You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
| 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<float> Hungry = new MetaData<float>();
 | |
|     public MetaData<float> HungryMax = new MetaData<float>();
 | |
|     public MetaData<EAIModuleType> ModuleType = new MetaData<EAIModuleType>();
 | |
|     public float HungryIncrease; //饥饿值自增速率
 | |
|     public float HungryIncreaseRate; //饥饿值自增倍率
 | |
|     public MetaData<bool> IsHungryFull = new MetaData<bool>(); //饥饿值满
 | |
|     public MetaData<bool> AttackPermit = new MetaData<bool>(); //攻击权限
 | |
|     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;
 | |
|         }
 | |
|     }
 | |
| } |