using UnityEngine; /// /// 一般的挂机AI行为 /// 主要应用为野外挂机行为, 只有根据设定选怪, 根据拥有技能去释放技能 /// 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) { m_LockPos = PlayerDatas.Instance.hero.Pos; base.OnUserClickSkill(skillID); } protected override void OnActiveInterrupt() { 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); } } }