public override Vector2 CalculateSteering(MovingEntity vehicle) { Vector2 steeringForce = new Vector2(); if (seek) { steeringForce += SteeringBehaviors.Seek(vehicle); } if (flee) { steeringForce += SteeringBehaviors.Flee(vehicle); } if (arrive) { steeringForce += SteeringBehaviors.Arrive(vehicle, SteeringBehaviors.Deceleration.normal); } if (separation) { steeringForce += SteeringBehaviors.Separation(vehicle) * 3; } if (pursuit) { steeringForce += SteeringBehaviors.Pursuit(vehicle); } return(steeringForce); }
public override Vector2 CalculateSteering(MovingEntity vehicle) { Vector2 steeringForce = Vector2.zero; Vector2 force; if (separation) { force = SteeringBehaviors.Separation(vehicle) * 1.0f; if (AccumulateForce(vehicle, ref steeringForce, force) && force != Vector2.zero) { return(steeringForce); } } if (seek) { force = SteeringBehaviors.Seek(vehicle) * 1.0f; if (AccumulateForce(vehicle, ref steeringForce, force)) { return(steeringForce); } } if (flee) { force = SteeringBehaviors.Flee(vehicle) * 1.0f; if (AccumulateForce(vehicle, ref steeringForce, force)) { return(steeringForce); } } if (arrive) { force = SteeringBehaviors.Arrive(vehicle) * 1.0f; if (AccumulateForce(vehicle, ref steeringForce, force)) { return(steeringForce); } } if (pursuit) { force = SteeringBehaviors.Pursuit(vehicle) * 1.0f; if (AccumulateForce(vehicle, ref steeringForce, force)) { return(steeringForce); } } return(steeringForce); }
private void Update() { SetFrameNeighbours(); Vector3 SteeringForce = Steering.Pursuit(Player.Instance) * Seek; SteeringForce += Steering.Wander() * Wander; SteeringForce += Steering.Separation() * Separation; SteeringForce += Steering.Alignment() * Alightment; SteeringForce += Steering.Cohesion() * Cohesion; Vector3 Avoidance = Steering.ObstacleAvoidance(); if (Avoidance.magnitude > float.Epsilon) { SteeringForce = Avoidance; } Velocity += SteeringForce * Acceleration * Time.deltaTime; Velocity.Truncate(MaxSpeed); transform.position += Velocity * Time.deltaTime; FixCollision(); }
public void UpdateSteering() { steeringVector = transform.forward; if (isSeeking && targetTransform != null) { steeringVector = SteeringBehaviors.Seek(cachedTransform.position, velocity, maxSpeed, targetTransform.position); } if (isFleeing && targetTransform != null) { steeringVector = SteeringBehaviors.Flee(cachedTransform.position, velocity, maxSpeed, targetTransform.position); } if (isPursuing && movingTarget != null) { steeringVector = SteeringBehaviors.Pursuit(cachedTransform.position, velocity, maxSpeed, movingTarget.transform.position, movingTarget.velocity); } if (isEvading && movingTarget != null) { steeringVector = SteeringBehaviors.Evasion(cachedTransform.position, velocity, maxSpeed, movingTarget.transform.position, movingTarget.velocity); } if (isArriving && targetTransform != null) { steeringVector = SteeringBehaviors.Arrival(cachedTransform.position, velocity, maxSpeed, targetTransform.position, arrivalSlowingDistance); } if (IsWandering) { steeringVector = Wander(0.5f, 0.1f, false); } if (isLeaderFollowing) { Vector3 leaderFollowPoint = leader.transform.position + leader.transform.forward * -2f; steeringVector = SteeringBehaviors.Arrival(cachedTransform.position, velocity, maxSpeed, leaderFollowPoint, arrivalSlowingDistance); } if (isPathFollowing) { Vector3 possibleSteeringVector = PathFollowing(simplePath); if (possibleSteeringVector != Vector3.zero) { steeringVector = possibleSteeringVector; } } if (isSeperating) { Vector3 repulsionLocation = cachedTransform.position + Seperation(); if (repulsionLocation != cachedTransform.position) { Vector3 desiredVelocity = (repulsionLocation - cachedTransform.position).normalized * maxSpeed; steeringVector = desiredVelocity - velocity; } } if (isAvoidingCollision) { Vector3 collisionSteeringVector = CollisionAvoidance(); if (collisionSteeringVector != velocity) { if (collisionSteeringVector == transform.forward * maxSpeed && steeringVector != transform.forward) { // The previously applied steering vector should not be modified. } else { steeringVector = collisionSteeringVector; } } } if (velocity != Vector3.zero) //Check is to prevent the log message "Look rotation viewing vector is zero" { transform.rotation = Quaternion.LookRotation(velocity); } UpdateMovement(); }