| using System; |
| using System; |
| . | using System.Collections.Generic; |
| |
| using UnityEngine; |
| using UnityEngine; |
| |
| |
| public class AnimalAI : BaseAI |
| public class AnimalAI : BaseAI |
| { |
| { |
| protected override void Awake() |
| protected override void Awake() |
| { |
| { |
| base.Awake(); |
| base.Awake(); |
| this.m_updateTargetTimer = UnityEngine.Random.Range(0f, 2f); |
| this.m_updateTargetTimer = UnityEngine.Random.Range(0f, 2f); |
| } |
| } |
| |
| |
| . | protected override void OnEnable() |
| |
| { |
| |
| base.OnEnable(); |
| |
| AnimalAI.Instances.Add(this); |
| |
| } |
| |
| |
| |
| protected override void OnDisable() |
| |
| { |
| |
| base.OnDisable(); |
| |
| AnimalAI.Instances.Remove(this); |
| |
| } |
| |
| |
| |
| protected override void OnDamaged(float damage, Character attacker) |
| protected override void OnDamaged(float damage, Character attacker) |
| { |
| { |
| base.OnDamaged(damage, attacker); |
| base.OnDamaged(damage, attacker); |
| this.SetAlerted(true); |
| this.SetAlerted(true); |
| } |
| } |
| |
| |
| . | public new void UpdateAI(float dt) |
| public override bool UpdateAI(float dt) |
| { |
| { |
| . | if (!this.m_nview.IsOwner()) |
| if (!base.UpdateAI(dt)) |
| { |
| { |
| . | return; |
| return false; |
| } |
| } |
| if (this.m_afraidOfFire && base.AvoidFire(dt, null, true)) |
| if (this.m_afraidOfFire && base.AvoidFire(dt, null, true)) |
| { |
| { |
| . | return; |
| return true; |
| } |
| } |
| this.m_updateTargetTimer -= dt; |
| this.m_updateTargetTimer -= dt; |
| if (this.m_updateTargetTimer <= 0f) |
| if (this.m_updateTargetTimer <= 0f) |
| { |
| { |
| this.m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 2f : 10f); |
| this.m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 2f : 10f); |
| Character character = base.FindEnemy(); |
| Character character = base.FindEnemy(); |
| if (character) |
| if (character) |
| { |
| { |
| this.m_target = character; |
| this.m_target = character; |
| } |
| } |
| } |
| } |
| if (this.m_target && this.m_target.IsDead()) |
| if (this.m_target && this.m_target.IsDead()) |
| { |
| { |
| this.m_target = null; |
| this.m_target = null; |
| } |
| } |
| if (this.m_target) |
| if (this.m_target) |
| { |
| { |
| bool flag = base.CanSenseTarget(this.m_target); |
| bool flag = base.CanSenseTarget(this.m_target); |
| base.SetTargetInfo(this.m_target.GetZDOID()); |
| base.SetTargetInfo(this.m_target.GetZDOID()); |
| if (flag) |
| if (flag) |
| { |
| { |
| this.SetAlerted(true); |
| this.SetAlerted(true); |
| } |
| } |
| } |
| } |
| else |
| else |
| { |
| { |
| base.SetTargetInfo(ZDOID.None); |
| base.SetTargetInfo(ZDOID.None); |
| } |
| } |
| if (base.IsAlerted()) |
| if (base.IsAlerted()) |
| { |
| { |
| this.m_inDangerTimer += dt; |
| this.m_inDangerTimer += dt; |
| if (this.m_inDangerTimer > this.m_timeToSafe) |
| if (this.m_inDangerTimer > this.m_timeToSafe) |
| { |
| { |
| this.m_target = null; |
| this.m_target = null; |
| this.SetAlerted(false); |
| this.SetAlerted(false); |
| } |
| } |
| } |
| } |
| if (this.m_target) |
| if (this.m_target) |
| { |
| { |
| base.Flee(dt, this.m_target.transform.position); |
| base.Flee(dt, this.m_target.transform.position); |
| this.m_target.OnTargeted(false, false); |
| this.m_target.OnTargeted(false, false); |
| . | return; |
| |
| } |
| } |
| . | base.IdleMovement(dt); |
| else |
| |
| { |
| |
| base.IdleMovement(dt); |
| |
| } |
| |
| return true; |
| } |
| } |
| |
| |
| protected override void SetAlerted(bool alert) |
| protected override void SetAlerted(bool alert) |
| { |
| { |
| if (alert) |
| if (alert) |
| { |
| { |
| this.m_inDangerTimer = 0f; |
| this.m_inDangerTimer = 0f; |
| } |
| } |
| base.SetAlerted(alert); |
| base.SetAlerted(alert); |
| } |
| } |
| . | |
| |
| public new static List<AnimalAI> Instances { get; } = new List<AnimalAI>(); |
| |
| |
| |
| private const float m_updateTargetFarRange = 32f; |
| private const float m_updateTargetFarRange = 32f; |
| |
| |
| private const float m_updateTargetIntervalNear = 2f; |
| private const float m_updateTargetIntervalNear = 2f; |
| |
| |
| private const float m_updateTargetIntervalFar = 10f; |
| private const float m_updateTargetIntervalFar = 10f; |
| |
| |
| public float m_timeToSafe = 4f; |
| public float m_timeToSafe = 4f; |
| |
| |
| private Character m_target; |
| private Character m_target; |
| |
| |
| private float m_inDangerTimer; |
| private float m_inDangerTimer; |
| |
| |
| private float m_updateTargetTimer; |
| private float m_updateTargetTimer; |
| } |
| } |
| |
| |