WorldInfo基础作用

编程入门 行业动态 更新时间:2024-10-28 15:31:12

目录

属性方法以下是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

本文发布于:2023-05-27 22:45:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/306150.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作用   基础   WorldInfo

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!