using CleverCrow.Fluid.BTs.Trees; using Entitas; using Game; using UnityEngine; namespace Game { public enum EAIModuleType { Spectator, Melee, LongRange, Max, } } [Game] public class AIComponent : IComponent { public float ThinkCdMax; //思考频率 public float ThinkCdNow; public MetaData Hungry = new MetaData(); public MetaData HungryMax = new MetaData(); public MetaData ModuleType = new MetaData(); public float HungryIncrease; //饥饿值自增速率 public float HungryIncreaseRate; //饥饿值自增倍率 public MetaData IsHungryFull = new MetaData(); //饥饿值满 public MetaData AttackPermit = new MetaData(); //攻击权限 public BehaviorTreePoolItem BehaviorTree;//行为树 } namespace Game { public abstract partial class Util { public static void ClearAI(GameEntity entity) { var ai = entity.aI; ai.Hungry.Value = 0; ai.HungryMax.Value = 1; ai.IsHungryFull.Value = false; ai.AttackPermit.Value = false; } public static void SetThinkCd(int entity, float cd) { var e = Util.GetEntity(entity); if (e != null) { e.aI.ThinkCdMax = cd; //设置一个随机的初始值 e.aI.ThinkCdNow = GameRandom.Random(0, cd); } } public static void SetHungryBasic(int entity, float max, float now, float increase) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; ai.HungryMax.Value = max; ai.Hungry.Value = now; ai.HungryIncrease = increase; } } public static void SetHungryIncreaseRate(int entity, float increaseRate) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; ai.HungryIncreaseRate = increaseRate; } } public static void SetAIModuleType(int entity, EAIModuleType type) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; ai.ModuleType.Value = type; } } public static EAIModuleType GetAIModuleType(int entity) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; return ai.ModuleType.Value; } return EAIModuleType.Spectator; } public static void SetAttackPermit(int entity, bool value) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; ai.AttackPermit.Value = value; ai.IsHungryFull.Value = false; } } public static bool GetAttackPermit(int entity) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; return ai.AttackPermit.Value; } return false; } public static bool GetHungryFull(int entity) { var e = Util.GetEntity(entity); if (e != null) { var ai = e.aI; return ai.IsHungryFull.Value; } return false; } } }