# [Solved] Simple Waypoint problem

This topic is 1936 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello everyone,

So I have a class called Enemy and I set a series or way point and the enemy follow the way points and move accordingly.

the problem is if the enemy movment speed is more than 5 the enemy doesn't move and get stuck and only move backward and forward. However if the speed is 4 or less the enemy moves with no problems at all.

I just want to know why does the enemy get stuck if the speed is more than 5?

Here is a video that show if speed is less than or equal 4 it works:-

And here video that show how the enemy get stuck and doesn't move if speed is more than 5:-

thank you all

[CODE]
class Enemy
{
int WayPointIndex;

double Length;

float Speed;

Vector2 Position;

Vector2 Direction;

Texture2D EnemyTexture;

Rectangle EnemyRec;

//Way points list
public static List<Vector2> EnemyPath = new List<Vector2>();

public Enemy()
{
WayPointIndex = 0;
Length = 0;
Position.X = 31; //if position X == 32 the enemy doesn't show up !!! just set it to 31 for now
Speed = 4;
}

// Load the way points from XML file and add them to EnemyPath list.
{
{
{
}
}
}

{
}

void Movment()
{
// Calculate direction vector
Direction.X = EnemyPath[WayPointIndex].X - Position.X;
Direction.Y = EnemyPath[WayPointIndex].Y - Position.Y;

// Normalize direction vector to unit length
Length = Math.Sqrt(Direction.X * Direction.X + Direction.Y * Direction.Y);
Direction.X /= (float)Length;
Direction.Y /= (float)Length;

// Apply movement vector to move
Position.X += Direction.X * Speed;
Position.Y += Direction.Y * Speed;

if (Length <= 1)
WayPointIndex++;
}

public void Update()
{
Movment();
}

public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(EnemyTexture, Position + ScreenScrolling.ScreenOffset, Color.White);
}
[/CODE]

Solution is I had to change this line of code in Movment():-

[CODE]
if (Length <= 1)
WayPointIndex++;
[/CODE]

To

[CODE]
if (Length <= speed)
WayPointIndex++;
[/CODE]

Way point XML file
[CODE]
<?xml version="1.0" encoding="utf-8"?>
<Enemy_Waypoints>
<WayPoint X="32" Y="0" />
<WayPoint X="32" Y="32" />
<WayPoint X="32" Y="64" />
<WayPoint X="32" Y="96" />
<WayPoint X="32" Y="128" />
<WayPoint X="32" Y="160" />
<WayPoint X="64" Y="160" />
<WayPoint X="96" Y="160" />
<WayPoint X="128" Y="160" />
<WayPoint X="160" Y="160" />
<WayPoint X="192" Y="160" />
<WayPoint X="224" Y="160" />
<WayPoint X="256" Y="160" />
<WayPoint X="288" Y="160" />
<WayPoint X="288" Y="128" />
<WayPoint X="288" Y="96" />
<WayPoint X="288" Y="64" />
<WayPoint X="288" Y="32" />
<WayPoint X="320" Y="32" />
<WayPoint X="352" Y="32" />
<WayPoint X="384" Y="32" />
<WayPoint X="384" Y="64" />
<WayPoint X="384" Y="96" />
<WayPoint X="384" Y="128" />
<WayPoint X="384" Y="160" />
<WayPoint X="384" Y="192" />
<WayPoint X="384" Y="224" />
<WayPoint X="384" Y="256" />
<WayPoint X="384" Y="288" />
<WayPoint X="352" Y="288" />
<WayPoint X="320" Y="288" />
<WayPoint X="288" Y="288" />
<WayPoint X="256" Y="288" />
<WayPoint X="224" Y="288" />
<WayPoint X="192" Y="288" />
<WayPoint X="160" Y="288" />
<WayPoint X="128" Y="288" />
<WayPoint X="128" Y="320" />
<WayPoint X="128" Y="352" />
<WayPoint X="128" Y="384" />
<WayPoint X="128" Y="416" />
<WayPoint X="128" Y="448" />
<WayPoint X="160" Y="448" />
<WayPoint X="192" Y="448" />
<WayPoint X="224" Y="448" />
<WayPoint X="256" Y="448" />
<WayPoint X="288" Y="448" />
<WayPoint X="320" Y="448" />
<WayPoint X="352" Y="448" />
<WayPoint X="384" Y="448" />
<WayPoint X="416" Y="448" />
<WayPoint X="448" Y="448" />
<WayPoint X="480" Y="448" />
<WayPoint X="512" Y="448" />
<WayPoint X="544" Y="448" />
<WayPoint X="544" Y="416" />
<WayPoint X="544" Y="384" />
<WayPoint X="544" Y="352" />
<WayPoint X="544" Y="320" />
<WayPoint X="544" Y="288" />
<WayPoint X="544" Y="256" />
<WayPoint X="544" Y="224" />
<WayPoint X="544" Y="192" />
<WayPoint X="544" Y="160" />
<WayPoint X="544" Y="128" />
<WayPoint X="544" Y="96" />
<WayPoint X="544" Y="64" />
<WayPoint X="576" Y="64" />
<WayPoint X="608" Y="64" />
<WayPoint X="640" Y="64" />
<WayPoint X="672" Y="64" />
<WayPoint X="704" Y="64" />
<WayPoint X="736" Y="64" />
<WayPoint X="736" Y="96" />
<WayPoint X="736" Y="128" />
<WayPoint X="736" Y="160" />
<WayPoint X="736" Y="192" />
<WayPoint X="704" Y="192" />
<WayPoint X="672" Y="192" />
<WayPoint X="640" Y="192" />
<WayPoint X="640" Y="224" />
<WayPoint X="640" Y="256" />
<WayPoint X="640" Y="288" />
<WayPoint X="640" Y="320" />
<WayPoint X="640" Y="352" />
<WayPoint X="640" Y="384" />
<WayPoint X="640" Y="416" />
<WayPoint X="640" Y="448" />
<WayPoint X="672" Y="448" />
<WayPoint X="704" Y="448" />
<WayPoint X="736" Y="448" />
<WayPoint X="768" Y="448" />
</Enemy_Waypoints>
[/CODE]