| | |
| | | { |
| | | public AI_Npc_200(GA_NpcClientFightNorm owner, Vector3 bornPosition) : base(owner, bornPosition) |
| | | { |
| | | m_SleepTime = 1; |
| | | m_SleepTime = .5f; |
| | | } |
| | | |
| | | protected override void OnUpdate() |
| | | public override void Update() |
| | | { |
| | | // ai休眠时间 |
| | | if (Time.realtimeSinceStartup - m_LastThinkTime < m_SleepTime) |
| | | if (Time.realtimeSinceStartup - m_LastThinkTime > m_SleepTime) |
| | | { |
| | | return; |
| | | _Thinking(); |
| | | } |
| | | |
| | | _Thinking(); |
| | | |
| | | switch (m_AIStatus) |
| | | { |
| | |
| | | |
| | | private void _Attack() |
| | | { |
| | | if (m_AIStatus == E_AIStatus.MoveToBornPos) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | GA_Hero _hero = PlayerDatas.Instance.hero; |
| | | |
| | | float _dis; |
| | |
| | | case 0: |
| | | var _skill = m_Owner.SkillMgr.Get(m_BaseAtkSkillID); |
| | | _dis = _skill.skillInfo.config.AtkDist * .5f; |
| | | if (m_Owner.posIndex != -1) |
| | | { |
| | | HeroRoundGird.Instance.Release(m_Owner.posIndex); |
| | | m_Owner.posIndex = -1; |
| | | } |
| | | var _node = HeroRoundGird.Instance.Request(m_Owner.ServerInstID, m_Owner.Pos, _dis); |
| | | if (_node != null) |
| | | { |
| | | atkPos = HeroRoundGird.Instance.GetRealPos(_node); |
| | | m_Owner.posIndex = _node.index; |
| | | } |
| | | _dis = MathUtility.DistanceSqrtXZ(atkPos, m_Owner.Pos); |
| | | if (_dis < 0.2f) |
| | | var _compareDis = MathUtility.DistanceSqrtXZ(_hero.Pos, m_Owner.Pos); |
| | | if (_compareDis < _dis * _dis) |
| | | { |
| | | atkStep = 1; |
| | | m_Owner.StopPathFind(); |
| | | m_Owner.Forward = MathUtility.ForwardXZ(_hero.Pos, m_Owner.Pos); |
| | | } |
| | | else |
| | | { |
| | | atkStep = 2; |
| | | if (m_Owner.posIndex != -1) |
| | | { |
| | | HeroRoundGird.Instance.Release(m_Owner.posIndex); |
| | | m_Owner.posIndex = -1; |
| | | } |
| | | var _node = HeroRoundGird.Instance.Request(m_Owner.ServerInstID, m_Owner.Pos, _dis); |
| | | if (_node != null) |
| | | { |
| | | atkPos = HeroRoundGird.Instance.GetRealPos(_node); |
| | | m_Owner.posIndex = _node.index; |
| | | } |
| | | _dis = MathUtility.DistanceSqrtXZ(atkPos, m_Owner.Pos); |
| | | if (_dis < 0.2f) |
| | | { |
| | | atkStep = 1; |
| | | m_Owner.StopPathFind(); |
| | | m_Owner.Forward = MathUtility.ForwardXZ(_hero.Pos, m_Owner.Pos); |
| | | } |
| | | else |
| | | { |
| | | atkStep = 2; |
| | | } |
| | | } |
| | | |
| | | break; |
| | | case 2: |
| | | _dis = MathUtility.DistanceSqrtXZ(atkPos, m_Owner.Pos); |
| | |
| | | } |
| | | break; |
| | | case 1: |
| | | |
| | | if (Time.realtimeSinceStartup - m_LastAttackTime < m_Owner.NpcConfig.AtkInterval * Constants.F_GAMMA) |
| | | { |
| | | return; |
| | |
| | | private Vector3 randomPos; |
| | | private void _Patrol() |
| | | { |
| | | if (m_AIStatus == E_AIStatus.MoveToBornPos) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | switch (patrolStep) |
| | | { |
| | | case 0: |
| | |
| | | { |
| | | // 回到出生点 |
| | | m_AIStatus = E_AIStatus.MoveToBornPos; |
| | | atkStep = 0; |
| | | } |
| | | } |
| | | } |