public Vector2 Steer(MovingEntity agent, double elapsed) { Vector2 desiredVelocity = Vector2.Normalize( this.Location - agent.Position ) * agent.MaxSpeed; return desiredVelocity - agent.Velocity; }
public Follower(World world, MovingEntity target, float distance) { MaxSpeed = 250; Mass = 1; this._separate = new SeparationSteering(world, distance); this._target = target; this._arrive = new ArriveAtSteering(target.Position, distance); _rotationSpeed = 10; }
public Vector2 Steer(MovingEntity agent, double elapsed) { double jitterThisTimeSlice = _jitter * elapsed; _wanderTarget += new Vector2( RandomDouble() * jitterThisTimeSlice, RandomDouble() * jitterThisTimeSlice ); _wanderTarget = Vector2.Normalize(_wanderTarget); _wanderTarget *= _radius; Vector2 target = _wanderTarget + new Vector2(_distance, 0); Vector2 worldSpaceTarget = Transformation.PointToWorldSpace( target, agent.Heading, agent.Side, agent.Position); Vector2 result = worldSpaceTarget - agent.Position; return result; }
public Vector2 Steer(MovingEntity agent, double elapsed) { Vector2 force = new Vector2(); if (Keyboard.IsKeyDown(Keys.Left) || Keyboard.IsKeyDown(Keys.A)) { force.X -= 1; } if (Keyboard.IsKeyDown(Keys.Right) || Keyboard.IsKeyDown(Keys.D)) { force.X += 1; } if (Keyboard.IsKeyDown(Keys.Up) || Keyboard.IsKeyDown(Keys.W)) { force.Y -= 1; } if (Keyboard.IsKeyDown(Keys.Down) || Keyboard.IsKeyDown(Keys.S)) { force.Y += 1; } return force * agent.MaxSpeed; }
public Vector2 Steer(MovingEntity agent, double elapsed) { const double Deceleration = 1; Vector2 toTarget = Location - agent.Position; Vector2 toTargetDistance = Vector2.Normalize(toTarget); toTargetDistance *= toTarget.Length - Distance; double distance = toTargetDistance.Length; if (distance > 0) { double speed = distance / Deceleration; speed = Math.Min(speed, agent.MaxSpeed); Vector2 desiredVelocity = toTargetDistance * speed / distance; return desiredVelocity - agent.Velocity; } else { // We're ON our target... Don't move. return new Vector2(0, 0); } }
public Vector2 Steer(MovingEntity agent, double elapsed) { Vector2 steeringForce = new Vector2(0, 0); foreach (Entity entity in _world.Entities) { if (agent == entity) { // Can't escape from yourself, so continue with the next one. continue; } Vector2 distance = entity.Position - agent.Position; // Add seperating force to steering force for the current entity. if (distance.Length > 0 && distance.Length < Radius) { distance = Vector2.Normalize(distance) / distance.Length; steeringForce += distance; } } return steeringForce; }
/// <summary> /// Calculate steering velocity for the agent. /// </summary> public Vector2 Steer(MovingEntity agent, double elapsed) { _seekAtSteering.Location = _target.Position; Vector2 seek = _seekAtSteering.Steer(agent, elapsed); return new Vector2(-seek.X, -seek.Y); }
/// <summary> /// Calculate steering velocity for the agent. /// </summary> public Vector2 Steer(MovingEntity agent, double elapsed) { _seekAtSteering.Location = _target.Position; return _seekAtSteering.Steer(agent, elapsed); }