动作状态机,动作状态 状态机的,初始化函数,也是分别从,对应的字典容器,提取数据,放到对应的fsm状态机即可

初始化,打断当前计划的handler队列容器,也是遍历动作字典容器,如果其中的动作事件,对应的Action动作的,布尔CanInterruptiblePlan字段为true,就说明是可被打断的,加到队列容器即可; 可打断的handler,也会有优先级区别,使用OrderByDescending降序,基于动作优先级Priority重新排序即可,参考LINQ使用Orderby、ThenBy实现多字段的排序

还有两个抽象函数,分别是初始化,当前代理agent处理的动作,还有当前可叠加的

动作管理的构造函数,对声明的各个变量,完成初始化,再调用之前解析的,各个初始化函数即可

添加动作事件Handler的接口,是通过agent代理的映射map字段的接口,通过label标签提取即可; handler的完成回调,是通过lambda表达式,调用管理器的完成回调_onActionComplete即可;

调用上述接口,分别是动作状态机字典,还有动作状态 状态机字典

移除和获取,动作字典相关接口

管理器的,帧更新函数,也是分别调用,两个状态机的帧更新函数

通过两个状态机,也是遍历 动作字典 、动作状态字典,调用新状态ExcuteNewState接口; 还有添加完成回调的AddActionCompleteListener函数接口逻辑;

ActionBase动作的抽象基类,继承和实现IAction动作接口,声明了标签、动作消耗、优先级、动作是否可以被打断的布尔,作为先决条件的状态,执行之后的状态,还有当前agent代理

对先决条件、后续影响的初始化,还有先决条件的验证,就是通过state的ContainState接口,判断在_dataTable数据容器中,是否包含状态即可

构造函数,就是调用上述函数,完成初始化即可

回到IGoal目标基类接口,除了之前解析的,还有其余函数接口声明,会在后续实现

目标GaolBase抽象基类,继承自IGoal目标接口,声明了目标对应的,后续影响、激活生效条件、目标代理、生效回调_onActivate,失效回调_onInactivate,还有标签Label

其余函数接口:获取目标优先级、后续影响、激活条件; 还有初始化后续影响、激活条件; 是否已实现目标的逻辑,就是检测代理agent对应的状态中,是否包含后续影响effects即可;

添加,激活回调_onActivate和失效回调_onInactivate的函数接口; 还有更新函数接口的逻辑实现,通过ActiveCondition激活函数,返回的布尔,判断是调用_onActivate,还是调用_onInactivate即可; 需要注意的是,目标代理agent,对应的AgentState代理状态,是包含了激活条件_activeCondition,还有后续影响_effects的;

构造函数,完成传参赋值,调用初始化函数即可

目标管理的基类接口,包含 当前目标、添加/移除 目标,寻找目标,更新目标相关数据信息 几个声明

目标管理的,抽象实现类,声明了目标字典容器,用来存储所有目标、还有对应的agent代理,当前目标CurrentGoal,再整一个队列容器_activeGoals存储,当前激活的目标

初始化目标相关,是一个等待实现的抽象函数

添加和移除目标,分别是基于,代理的映射Maps,通过label标签拿到目标,然后加到_goalsDic字典容器; 通过AddGoalActivateListener完成,激活回调_onActivate的逻辑,对应了当前激活目标队列_activeGoals的add添加; 而失效回调_onInactivate的逻辑,就是对应了_activeGoals的remove移除了; 移除目标,逻辑就相对简单,从_goalsDic移除remove即可;