/******************************************************************************** * 文件名: AIController.cs * 全路径: \Script\Player\AIController.cs * 创建人: 李嘉 * 创建时间:2013-11-18 * * 功能说明: 客户端AI控制器,负责Obj的AI装载 * AI分为三种AI列表进行管理,分别是平时AI,战斗AI和死亡AI,通过特殊接口触发 * 三种AI的切换接口为: * 初始化:Normal.AI * 进入战斗:Normal.AI->Combat.AI * 离开战斗:Combat.AI->Normal.AI * 死亡:Combat.AI or Normal.AI->Dead.AI * 复活:Dead.AI->Normal.AI * 修改记录: *********************************************************************************/ using UnityEngine; using System.Collections; using System.Collections.Generic; using Games.GlobeDefine; using Games.LogicObj; namespace Games.AI_Logic { public class AIController : MonoBehaviour { //NPC非战斗AI private BaseAI m_NormalAI = null; public BaseAI NormalAI { get { return m_NormalAI; } set { if (null != m_NormalAI) { m_NormalAI.Destroy(); } m_NormalAI = value; } } //NPC战斗AI private BaseAI m_CombatAI = null; public BaseAI CombatAI { get { return m_CombatAI; } set { if (null != m_CombatAI) { m_CombatAI.Destroy(); } m_CombatAI = value; } } //NPC死亡AI private BaseAI m_DeadAI = null; public BaseAI DeadAI { get { return m_DeadAI; } set { if (null != m_DeadAI) { m_DeadAI.Destroy(); } m_DeadAI = value; } } //当前NPC状态 private BaseAI m_CurrentAIState = null; public BaseAI CurrentAIState { get { return m_CurrentAIState; } set { m_CurrentAIState = value; } } //标记位 //private bool m_bAliveFlag = true; //是否死亡标记位 //private bool m_bCombatFlag; //是否战斗标记位 public bool CombatFlag { get; set; } //private bool m_bRestFlag = false; //是否正在进行复位操作 ////////////////////////////////////////////////////////////////////////// //战斗AI相关 ////////////////////////////////////////////////////////////////////////// private Threat m_ThreadInfo; public Threat ThreadInfo { get { return m_ThreadInfo; } set { m_ThreadInfo = value; } } //初始化AI Controller操作 void Awake() { //m_bAliveFlag = true; CombatFlag = false; //m_bRestFlag = false; if (null == ThreadInfo) { ThreadInfo = new Threat(); } } private void Update() { if (null == m_CurrentAIState) m_CurrentAIState = m_NormalAI; if (null != m_CurrentAIState) m_CurrentAIState.UpdateAI(); } //切换AI public void SwitchCurrentAI(BaseAI ai) { if (null != m_CurrentAIState) { m_CurrentAIState.OnDeactive(); } m_CurrentAIState = ai; if (null != m_CurrentAIState) { //重置Threat if (m_CurrentAIState.AIStateType != CharacterDefine.AI_STATE_TYPE.AI_STATE_COMBAT) { m_ThreadInfo.ResetAllThreat(); } m_CurrentAIState.OnActive(); } } //初始化 //进入战斗 public void EnterCombat() { CombatFlag = true; SwitchCurrentAI(m_CombatAI); } //离开战斗 public void LeaveCombat() { CombatFlag = false; SwitchCurrentAI(m_NormalAI); } //复活 public void OnAlive() { CombatFlag = false; //m_bAliveFlag = true; SwitchCurrentAI(m_NormalAI); } //死亡 public void OnDie() { CombatFlag = false; //m_bAliveFlag = false; SwitchCurrentAI(m_DeadAI); } //Obj复位操作 public void OnRest(bool bFlag) { //m_bRestFlag = bFlag; m_ThreadInfo.ResetAllThreat(); } //根据AI类型添加 public bool AddAIByStateType(BaseAI ai) { switch (ai.AIStateType) { case CharacterDefine.AI_STATE_TYPE.AI_STATE_NORMAL: { NormalAI = ai; return true; } case CharacterDefine.AI_STATE_TYPE.AI_STATE_COMBAT: { CombatAI = ai; return true; } case CharacterDefine.AI_STATE_TYPE.AI_STATE_DEAD: { DeadAI = ai; return true; } default: break; } return false; } public int GetThreatValue(Obj_Character objCharacter) { return ThreadInfo.GetThreatValue(objCharacter); } } }