回到AOICell地图方块类,CellOpEnum枚举,标识的是,玩家实体,进入、移动、退出,该cell地图方块的状态

AddCellOp函数接口,是根据上述CellOpEnum实体状态; 判断该entity实体,是加入到,对应该地图方块的UpdateItem实体更新逻辑cellUpdateItem变量的各个Lst队列; 如果是实体离开方块,也是根据EntityDriverEnum枚举,判断是客户端实体count减少,还是服务器实体count减少;

StraightMove函数接口,对应的是,上下左右,四个方向的移动逻辑,根据传参方块的数组索引,判断是要从方块移除,还是新进入,还是移动,然后调用,aoi实体Entity类的,移除或添加方块,再调用cell自己的AddCellOp函数接口,完成上述解析的,UpdateItem实体各个Lst队列的数据增减处理; SkewMove函数接口,则是对应,斜着的四个方向,具体逻辑也是跟StraightMove一致;

完成cellUpdateItem各个队列的数据整合后,会作为传参,传递到,aoi管理器的数据融合,OnCellEntityOpCombine函数回调,然后重置cellUpdateItem即可

回顾一下,给外部Entity实体调用的,在方块中移动,和退出该方块的脚本逻辑,是这俩MoveCell和ExitCellI,对周边的cell方块,也进行实体的更新逻辑处理

EnterCell函数接口,是进入方块的核心逻辑调用,如果是新加入游戏,也就是新加入到方块的实体,是会调用TransferEnter的移动状态枚举,会调用AOIEntity实体的AddAroundCellView脚本逻辑,完成周边方块的添加; 然后,如果是方块之间移动,也就是MoveCross枚举的话,根据DirEnum方向枚举,调用上述的 StraightMove 或 SkewMove函数接口;

继续,完成switch判断和调用即可

aoicell方块,也会重写Tostring字符串打印输出

回到aoimgr管理器,EnterCell函数接口,是实例化一个,新的AOIEntity实体,调用它内部的UpdatePos坐标更新,传参除了xy坐标,还有TransferEnter的枚举,标识新加入; UpdatePos函数接口,就是调用,传参Entity实体,内部的UpdatePos函数接口,完成位置更新即可; 而ExitCell是Entity实体,离开当前cell方块的相关逻辑,是根据cellkey这个方块名称字符,在cellDic字典容器获取到,对应的cell地图方块;

计算AOI相关的CalcAOIUpdate函数接口,是一个汇总的更新函数接口,包含了Entity实体的CalcEntityCellViewChange计算,各个Entity实体的视野变化,还有遍历所有的cell地图方块,通过哈希对应的ExceptWithUnionWith函数接口,完成仨HashSet哈希容器的增删处理; 最后,再调用地图方块的CalcCellOpCombine数据融合接口即可; 回顾一下,对应触发的,实际上是,场景的CellEntityOpCombine逻辑,合并复用cell的计算结果,优化CPU开销;

回顾一下,aoi管理器内,在方块间移动的,是MoveCrossCell接口、在方块内移动的,是MoveInsideCell接口,也是调用cell对应的内部接口,标识要退出对应方块的,就是MarkExitEntityCell接口

获取当前地图方块汇总的字典容器

创建新aoicell方块的脚本逻辑,完成创建、加入容器后,调用OnCreateNewCell回调即可

回顾一下,这个回调,是完成地图方块的构建后,广播发送一个NtfCell协议的数据消息包