210 lines
5.7 KiB
C#
210 lines
5.7 KiB
C#
/********************************************************************************
|
||
* 文件名: 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);
|
||
}
|
||
}
|
||
}
|