目录
属性方法以下是wi在外部常用的方法,我们可以通过它得到以下信息:其他方法(该类自己使用的工具方法,外部没有任何使用)WorldInfo类
属性
世界信息类包括世界模型,变化控制结构,周期记录器。又新增了其特有的rollback
private StandardWorldModel world;private ChangeSet changed;private int time;private Map<EntityID, Map<Integer, Map<String, Object>>> rollback;private boolean runRollback;
rollback是一个Map,一个ID对应一个Map<Integer, Map<String, Object>>。Map<Integer, Map<String, Object>>为这个ID变化的历史记录,其中Integer为周期数,对应值Map<String,Object>为改变的属性。作用是记录每个ID在每个周期的属性情况。
方法
以下是wi在外部常用的方法,我们可以通过它得到以下信息:
getEntity(EntityID entityID) 通过传入ID得到标准实体(StandardEntity)类型的实体
getEntitiesOfType(StandardEntityURN urn) 通过传入urn得到这个类型的一个标准实体集合
getEntityIDsOfType(StandardEntityURN urn) 通过传入参数urn得到这个类型的实体ID集合(先调用了getEntitiesOfType() )
getObjectsInRange(EntityID entityID, int range) 传入ID和range(范围),得到一个标准实体集合
getObjectIDsInRange(EntityID entity, int range)传入ID和range,得到一个实体ID集合(先调用了getObjectsInRange())
getObjectsInRectangle(int targetTime, int x1, int y1, int x2, int y2) 传入次数和两个坐标得到这个矩形中的标准实体的集合
getAllEntities() 得到世界中所有的实体,也是以标准实体集合形式返回
getChanged() 得到改变量
getFireBuildings() 得到着火建筑的标准实体集合
getFireBuildingIDs() 得到着火建筑的实体ID集合,同上,先求出标准实体集合,再转换
getNumberOfBuried(@Nonnull Building building) 传入建筑的实体,得到该建筑下掩埋多少人类,包括智能体
getBuriedHumans(@Nonnull Building building) 传参同上,得到该建筑掩埋人类的集合
getBlockades(@Nonnull EntityID entityID) 传入实体ID,如果该ID是区域返回一个障碍物实体集合,否则返回空集合。
getPosition(××) 传入Human得到标准实体型
getDistance(@Nonnull EntityID first, @Nonnull EntityID second) 传入ID计算距离
getDistance(@Nonnull StandardEntity first, @Nonnull StandardEntity second) 传入标准实体计算距离
getBounds() 得到世界的边界
setWorld(@Nonnull StandardWorldModel world) 设置世界模型
setChanged(@Nonnull ChangeSet changed) 设置改变的结构
setTime(int time) 设置时间(周期)
其他方法(该类自己使用的工具方法,外部没有任何使用)
关于createRollback×××,在此详细分析一个
private Blockade createRollbackBlockade(@Nonnull StandardEntity entity, @Nonnull Map<String, Object> cache) {Blockade copy = (Blockade)entity.copy();//复制这个障碍物Iterator var4 = cache.keySet().iterator();//迭代cache里的StringSetwhile(var4.hasNext()) {//对每一个String进行下列操作String urn = (String)var4.next();Object value = cache.get(urn);StandardPropertyURN type = StandardPropertyURN.fromString(urn);//把String转化为对应的URNboolean isDefined = value != null;/根据该key(String)对应的Object是不是空分两种情况进行运算switch(type) {//根据不同类型属性不同操作case APEXES:if (isDefined) {copy.setApexes((int[])((int[])value));} else {copy.undefineApexes();}break;case REPAIR_COST:if (isDefined) {copy.setRepairCost((Integer)value);} else {copy.undefineRepairCost();}break;case X:if (isDefined) {copy.setX((Integer)value);} else {copy.undefineX();}break;case Y:if (isDefined) {copy.setY((Integer)value);} else {copy.undefineY();}break;case POSITION:if (isDefined) {copy.setPosition((EntityID)value);} else {copy.undefinePosition();}}}return copy;//返回经过操作后的障碍物}
更多推荐
作用,基础,WorldInfo
发布评论