public virtual void DoChase() { if (m_target != null && m_creature.InRange(m_target, canSeeDistance)) { var heading = m_target.transform.position - this.transform.position; var direction = heading / heading.magnitude; m_creature.agent.SetDestination(transform.position + direction * targetDistance); state = EAI_State.STATE_COMBAT; } else { state = EAI_State.STATE_WANDER; } }
public virtual void DoCombat() { if (m_target != null && m_creature.CanSee(m_target)) { if (!m_creature.InRange(m_target, targetDistance) && state == EAI_State.STATE_COMBAT) { state = EAI_State.STATE_CHASE; } } else { state = EAI_State.STATE_WANDER; } }
public virtual void DoWander() { if (m_creature.agent.velocity.magnitude <= 0) { var direction = new Vector3(m_creature.transform.position.x + 1 * Random.Range(-10f, 10f), m_creature.transform.position.y, m_creature.transform.position.z + 1 * Random.Range(-10f, 10f)); m_creature.agent.SetDestination(direction); } if (behavior == EAI_Behavior.BEHAVIOR_AGRESSIVE && state == EAI_State.STATE_WANDER) { var actor = m_creature.GetActorInRange(10, EGameActorType.TYPE_PLAYER); if (actor != null && m_creature.CanSee(actor)) { m_target = actor; state = EAI_State.STATE_COMBAT; } } }