using UnityEngine;
|
|
/// <summary>
|
/// 一般的挂机AI行为
|
/// 主要应用为野外挂机行为, 只有根据设定选怪, 根据拥有技能去释放技能
|
/// </summary>
|
public class HeroAI_NormalAuto : HeroAI_Auto
|
{
|
private Vector3 m_LockPos;
|
|
public sealed override bool Condition()
|
{
|
GA_Hero _hero = PlayerDatas.Instance.hero;
|
if (_hero == null)
|
{
|
return false;
|
}
|
|
if (_hero.aiHandler.currentType == E_HeroAIType.NormalAuto)
|
{
|
return true;
|
}
|
|
return base.Condition();
|
}
|
|
protected sealed override void OnEnter()
|
{
|
GA_Hero _hero = PlayerDatas.Instance.hero;
|
if (_hero == null)
|
{
|
return;
|
}
|
|
m_HandupRange = 50;
|
|
if (PlayerDatas.Instance.baseData.MapID == 31020
|
|| PlayerDatas.Instance.baseData.MapID == 31030)
|
{
|
m_HandupRange = 8;
|
}
|
|
// 确定顶点挂机的位置
|
if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.curFixedScreen))
|
{
|
m_LockPos = _hero.Pos;
|
}
|
}
|
|
protected sealed override void OnExit() { }
|
|
public sealed override bool IsOver()
|
{
|
if (base.IsOver())
|
{
|
return true;
|
}
|
|
bool _result = PlayerDatas.Instance.hero.aiHandler.currentType
|
!= E_HeroAIType.NormalAuto;
|
|
return _result;
|
}
|
|
protected sealed override bool OnUpdate()
|
{
|
GA_Hero _hero = PlayerDatas.Instance.hero;
|
|
if (_hero != null)
|
{
|
if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.curFixedScreen))
|
{
|
float _distSqrt = MathUtility.DistanceSqrtXZ(m_LockPos, _hero.Pos);
|
|
if (_distSqrt > 100)
|
{
|
if (_hero.SelectTarget != null)
|
{
|
if (m_LockTargetSID == _hero.SelectTarget.ServerInstID)
|
{
|
m_LockTargetSID = 0;
|
}
|
_hero.SelectTarget = null;
|
}
|
|
if (_hero.LockTarget != null)
|
{
|
_hero.SelectTarget = _hero.LockTarget;
|
}
|
else
|
{
|
_hero.MoveToPosition(m_LockPos);
|
}
|
}
|
}
|
}
|
|
return false;
|
}
|
|
protected override void OnUserClickSkill(int skillID)
|
{
|
if (PlayerDatas.Instance.hero == null)
|
{
|
return;
|
}
|
|
m_LockPos = PlayerDatas.Instance.hero.Pos;
|
|
base.OnUserClickSkill(skillID);
|
}
|
|
protected override void OnActiveInterrupt()
|
{
|
if (PlayerDatas.Instance.hero == null)
|
{
|
return;
|
}
|
|
m_LockPos = PlayerDatas.Instance.hero.Pos;
|
|
base.OnActiveInterrupt();
|
}
|
|
protected override void OnClickFloor(Vector3 dest)
|
{
|
m_LockPos = dest;
|
|
base.OnClickFloor(dest);
|
}
|
|
protected sealed override GActorFight SelectTarget()
|
{
|
if (HangUpSetModel.Instance.GetBool(HangUpAutoBoolType.curFixedScreen))
|
{
|
return DecideAttackTarget(m_LockPos, 10);
|
}
|
else
|
{
|
return DecideAttackTarget(PlayerDatas.Instance.hero.Pos,
|
m_HandupRange);
|
}
|
}
|
}
|