2
0
Fork 0
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.

124 lines
3.6 KiB
C#

2 years ago
using Entitas;
using Game;
namespace Game
{
public enum EAIModuleType
{
Spectator,
Melee,
LongRange,
Max,
}
}
[Game]
public class AIComponent : IComponent
{
public BlueprintBasicData Data;
public bool IsInit = false;
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>();//攻击权限
}
namespace Game
{
public abstract partial class Util
{
public static void ClearAI(GameEntity entity)
{
var ai = entity.aI;
ai.IsInit = false;
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;
}
}
}