Esempio n. 1
0
 public Vector2 Steer(MovingEntity agent, double elapsed)
 {
     Vector2 desiredVelocity = Vector2.Normalize(
         this.Location - agent.Position
     ) * agent.MaxSpeed;
     return desiredVelocity - agent.Velocity;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 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;
 }
Esempio n. 4
0
 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;
 }
Esempio n. 5
0
        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;
        }
Esempio n. 7
0
 /// <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);
 }
Esempio n. 8
0
 /// <summary>
 /// Calculate steering velocity for the agent.
 /// </summary>
 public Vector2 Steer(MovingEntity agent, double elapsed)
 {
     _seekAtSteering.Location = _target.Position;
     return _seekAtSteering.Steer(agent, elapsed);
 }