/// <summary> /// Calculate forces using weights map to each behavior. /// Currently all behavior have the same weight. /// </summary> private void CalculateWeightsSum(double timeElapsed) { // Check for each behavior if (IsSeekOn) { SteeringForce += Seek(Target.Pos) * _weights[BehaviorType.Seek]; } if (IsFleeOn) { SteeringForce += Flee(ToAvoid.Pos) * _weights[BehaviorType.Flee]; } if (IsArriveOn) { SteeringForce += Arrive(Target.Pos) * _weights[BehaviorType.Arrive]; } if (IsPursuitOn) { SteeringForce += Pursuit(Target) * _weights[BehaviorType.Pursuit]; } if (IsEvadeOn) { SteeringForce += Evade(ToAvoid) * _weights[BehaviorType.Evade]; } if (IsWanderOn) { SteeringForce += Wander(timeElapsed) * _weights[BehaviorType.Wander]; } if (IsSeparationOn) { SteeringForce += Separation(_neighbors) * _weights[BehaviorType.Separation]; } if (IsAlignmentOn) { SteeringForce += Alignment(_neighbors) * _weights[BehaviorType.Alignment]; } if (IsCohesionOn) { SteeringForce += Cohesion(_neighbors) * _weights[BehaviorType.Cohesion]; } // if ( IsOffsetPursuitOn ) { SteeringForce += OffsetPursuit(Target, new Vector2(30f, 30f)) * _weights["Cohesion"]; } // Make sure force does not exceed max agent Force SteeringForce = SteeringForce.TruncateExt(Agent.MaxForce); }