42 lines
1.2 KiB
C#
42 lines
1.2 KiB
C#
using Code.Base;
|
|
|
|
namespace Code.Lab2
|
|
{
|
|
public class Leave : AgentBehaviour
|
|
{
|
|
public float escapeRadius;
|
|
public float dangerRadius;
|
|
public float timeToTarget = 0.1f;
|
|
|
|
public override Steering GetSteering()
|
|
{
|
|
var steering = new Steering();
|
|
var direction = transform.position - target.transform.position;
|
|
var distance = direction.magnitude;
|
|
|
|
if (distance > dangerRadius) return steering;
|
|
|
|
float reduce;
|
|
|
|
if (distance < escapeRadius)
|
|
reduce = 0f;
|
|
else
|
|
reduce = distance / dangerRadius * Agent.maxSpeed;
|
|
|
|
var targetSpeed = Agent.maxSpeed - reduce;
|
|
|
|
var desiredVelocity = direction;
|
|
desiredVelocity.Normalize();
|
|
desiredVelocity *= targetSpeed;
|
|
steering.Linear = desiredVelocity - Agent.velocity;
|
|
steering.Linear /= timeToTarget;
|
|
|
|
if (!(steering.Linear.magnitude > Agent.maxAcceleration)) return steering;
|
|
|
|
steering.Linear.Normalize();
|
|
steering.Linear *= Agent.maxAcceleration;
|
|
|
|
return steering;
|
|
}
|
|
}
|
|
} |