游戏中的AI算法_第二章
弄一个代理基类接口
动作映射管理类,用于把目标和代理,关联起来
目标基类接口,包含标签,优先级等
更新数据函数,和打断相关,基类接口
计划队列接口
触发器的基类接口,包含优先级,是否触发的布尔判断,还有更新的帧函数
树节点,其中包含,对应该节点的,默认ID常量,父节点,动作事件IActionHandler接口,对应节点的,当前状态,目标状态,完成的消耗等
树节点逻辑的构造函数,就是初始化,各个声明的变量,和调用State状态的CreateNew接口,创建俩空的新状态,分别对应当前状态,和目标状态
树逻辑,其中包含,创建一个新的树节点,还有创建一个顶部节点,调用了树节点的,重置ID逻辑,将ID归零
回到,动作对象映射管理类接口,除了获取动作事件外,还有获取目标、设置和获取游戏数据函数接口,是通过key配合字典容器,进行这一系列操作
抽象映射基类,继承自IMaps映射接口,其中声明了,几个字典容器,分别用来存储,事件接口,实现目标,游戏数据相关; 还有两个变量,代理_agent和对对象池_pool; 在构造函数中,对它们完成初始化即可; 对应调用的,各个初始化函数,如下所示;
两个接口,都是从字典容器,获取对应的动作和目标数据
而添加,动作和目标,到字典容器接口,也是同理,配合对象池_pool管理即可
设置和获取,游戏数据,对_gameData字典容器操作即可
代理基类接口中,也会有对应的映射接口
这是继承自,动作事件接口IActionHandler的抽象类,声明了对应的Action动作和Label标签; 还有ActionExcuteState枚举,是对应有限状态机FSM的,用来设定,当前动作所处的状态; 还声明了对应的代理_agent,动作完成对应的Action回调_onFinishAction,映射_map;
构造函数中,id自增,其他声明的变量,也完成初始化,设定当前动作的枚举是INIT初始化; 而SetAgentData是覆盖,当前状态的state,SetAgentState是新增一个键值对数据;
动作完成的异步回调OnComplete,使用async; 而CanPerformAction虚函数,是返回对应Action动作的VerifyPreconditions先决条件; AddFinishCallBack接口,是完成回调函数的赋值;
几个获取游戏数据的接口,都是调用映射map的对应接口即可
动作的三种状态:进入、进行中、结束
事件管理的基类接口,包含 是否执行动作的布尔判断,效果和动作的映射map字典容器,还有默认动作的表情标签
其余的函数接口
抽象类ActionManagerBase,是继承实现,事件管理接口,声明了几个容器,存储动作、动作状态、能打断当前计划的动作; 还有动作本身的状态机,动作状态的 状态机; 动作对应的_agent代理,还有是否在执行的布尔标志位;
动作和效果,对应的map映射关系,其中Effect效果,指的是,动作执行之后的状态,还有动作完成的回调
初始化,动作和状态映射关系的具体逻辑,先foreach遍历,动作字典_actionHandlerDic,拿到其中的handler,然后提取出,它的Effects影响状态; 如果不为空,就拿到对应的key,是调用了state状态类中_dataTable状态字典容器的key总集,作为EffectsAndActionMap映射字典容器的key; 然后构建键值对,完成key和value的映射即可;