public int AddBehaviour(ISteeringBehaviour behaviour) { TryInitialize(); Debug.Assert(!m_behaviours.Contains(behaviour)); var index = m_behaviours.Count; m_behaviours.Add(behaviour); return(index); }
public static Vector2 Flee(Vector2 threatPosition, ISteeringBehaviour agent) { return(agent.CalculateForceForDirection((agent.position - threatPosition).normalized)); }
public static Vector2 Seek(Vector2 targetPosition, float targetRadius, float epsilonRadius, ISteeringBehaviour agent) { var dPos = targetPosition - agent.position; var distanceToTarget = dPos.magnitude; var speedMultiplier = 1.0f; if (targetRadius > 0.0f) { speedMultiplier = Mathf.Clamp01(Mathf.InverseLerp(0.0f, targetRadius, distanceToTarget)); } if (distanceToTarget < epsilonRadius) { speedMultiplier = 0.0f; } return(agent.CalculateForceForDirection(dPos.normalized, speedMultiplier)); }
public void RemoveBehaviour(ISteeringBehaviour behaviour) { m_behaviours.Remove(behaviour); }