• Create Account

### #ActualGameGeazer

Posted 30 July 2012 - 08:37 PM

Here is my butchered solution if anyone runs into the same question. I'll clean it up and repost it eventually.

public boolean followPathSimple(Entity entity,PhysicsWorld physicsWorld)
{
GameMath math = new GameMath();
boolean isFinished = false;
Body body = physicsWorld.getBodyByID(entity.getUserData().getID());
if(cellList.size()>currentTile)
{
//find the radius of the target I will be hitting (unused saved for later)

//find the radius of the moveing object (unused saved for later)
((BodyUserData)body.getUserData()).getDimensions().y);
//the object moving
objectShape = new Circle(
(body.getWorldPoint(body.getLocalCenter()).x*GameConstants.M_TO_P)+16,
(body.getWorldPoint(body.getLocalCenter()).y*GameConstants.M_TO_P)+16,
5);
//if we are on the tile go to the next
if(targetShape.contains(objectShape.getCenterX(), objectShape.getCenterY()))
{
//if the path continues create a new target and increase our position on the path
if(currentTile<cellList.size()-1)
{

currentTile++;
targetShape = new Circle(
cellList.get(currentTile).getCenterX(),
cellList.get(currentTile).getCenterY(),10);
}
//if we are at the end of the list we have finished the path
else
{
isFinished = true;
body.setLinearVelocity(new Vec2(0,0));
}
}
else
{
int velX = 0;
int velY = 0;
//find the distance from the target in the x and y
float distanceX = targetShape.getCenterX()-objectShape.getCenterX();
float distanceY = targetShape.getCenterY()-objectShape.getCenterY();

//if the disance in the x is grater than the distance in the y move the entity along the x axis(4-way movement)
if(Math.abs(distanceX)>Math.abs(distanceY))
{
//if the distance is is less than zero then the object is to the right of the target
if(distanceX<0)
{
//move left
velX = (int) -entity.getVel_Max().x;
}
else if(distanceX>0)
{
//move right
velX = (int) entity.getVel_Max().x;
}
}
//else move it vertically
else
{
if(distanceY<0)
{
//move up
velY = (int) -entity.getVel_Max().y;
}
else if(distanceY>0)
{
//move down
velY = (int) entity.getVel_Max().y;
}
}
//set the new velocity of our object
body.setLinearVelocity(new Vec2(velX,velY));
}

}
//return whether or not we have finished walking anlong the path
return isFinished;
}


Here is how the movement ended up looking

if anyone wants the A* code aswell I'll put that up too.

### #9GameGeazer

Posted 30 July 2012 - 08:34 PM

Here is my butchered solution if anyone runs into the same question. I'll clean it up and repost it eventually.

public boolean followPathSimple(Entity entity,PhysicsWorld physicsWorld)
{
GameMath math = new GameMath();
boolean isFinished = false;
Body body = physicsWorld.getBodyByID(entity.getUserData().getID());
if(cellList.size()>currentTile)
{
//find the radius of the target I will be hitting (unused saved for later)

//find the radius of the moveing object (unused saved for later)
((BodyUserData)body.getUserData()).getDimensions().y);
//the object moving
objectShape = new Circle(
(body.getWorldPoint(body.getLocalCenter()).x*GameConstants.M_TO_P)+16,
(body.getWorldPoint(body.getLocalCenter()).y*GameConstants.M_TO_P)+16,
5);
//if we are on the tile go to the next
if(targetShape.contains(objectShape.getCenterX(), objectShape.getCenterY()))
{
//if the path continues create a new target and increase our position on the path
if(currentTile<cellList.size()-1)
{

currentTile++;
targetShape = new Circle(
cellList.get(currentTile).getCenterX(),
cellList.get(currentTile).getCenterY(),10);
}
//if we are at the end of the list we have finished the path
else
{
isFinished = true;
body.setLinearVelocity(new Vec2(0,0));
}
}
else
{
int velX = 0;
int velY = 0;
//find the distance from the target in the x and y
float distanceX = targetShape.getCenterX()-objectShape.getCenterX();
float distanceY = targetShape.getCenterY()-objectShape.getCenterY();

//if the disance in the x is grater than the distance in the y move the entity along the x axis(4-way movement)
if(Math.abs(distanceX)>Math.abs(distanceY))
{
//if the distance is is less than zero then the object is to the right of the target
if(distanceX<0)
{
//move left
velX = (int) -entity.getVel_Max().x;
}
else if(distanceX>0)
{
//move right
velX = (int) entity.getVel_Max().x;
}
}
//else move it vertically
else
{
if(distanceY<0)
{
//move up
velY = (int) -entity.getVel_Max().y;
}
else if(distanceY>0)
{
//move down
velY = (int) entity.getVel_Max().y;
}
}
//set the new velocity of our object
body.setLinearVelocity(new Vec2(velX,velY));
}

}
//return whether or not we have finished walking anlong the path
return isFinished;
}


### #8GameGeazer

Posted 30 July 2012 - 08:27 PM

Here is my butchered solution if anyone runs into the same question. I'll clean it up and repost it eventually.

  public boolean followPathSimple(Entity entity,PhysicsWorld physicsWorld)
{
GameMath math = new GameMath();
boolean isFinished = false;
Body body = physicsWorld.getBodyByID(entity.getUserData().getID());
if(cellList.size()>currentTile)
{

//find the radius of the moveing object
((BodyUserData)body.getUserData()).getDimensions().y);
//the object moving
objectShape = new Circle(
(body.getWorldPoint(body.getLocalCenter()).x*GameConstants.M_TO_P)+16,
(body.getWorldPoint(body.getLocalCenter()).y*GameConstants.M_TO_P)+16,
5);
//if we are on the tile go to the next
if(targetShape.contains(objectShape.getCenterX(), objectShape.getCenterY()))
{
if(currentTile<cellList.size()-1)
{
currentTile++;
targetShape = new Circle(
cellList.get(currentTile).getCenterX(),
cellList.get(currentTile).getCenterY(),10);
}
else
{
isFinished = true;
body.setLinearVelocity(new Vec2(0,0));
}
}
else
{
int velX = 0;
int velY = 0;
float distanceX = targetShape.getCenterX()-objectShape.getCenterX();
float distanceY = targetShape.getCenterY()-objectShape.getCenterY();
if(Math.abs(distanceX)>Math.abs(distanceY))
{
if(distanceX<0)
{
velX = (int) -entity.getVel_Max().x;
}
else if(distanceX>0)
{
velX = (int) entity.getVel_Max().x;
}
}
else
{
if(distanceY<0)
{
velY = (int) -entity.getVel_Max().y;
}
else if(distanceY>0)
{
velY = (int) entity.getVel_Max().y;
}
}
body.setLinearVelocity(new Vec2(velX,velY));
}

}
return isFinished;
}


### #7GameGeazer

Posted 30 July 2012 - 08:25 PM

EDIT: the code wont post properly

### #6GameGeazer

Posted 30 July 2012 - 08:24 PM

If anyone would like my butchered solution to this problem for their own use here it is. I'll clean it up eventually and repost it.

[source lang="java"] public boolean followPathSimple(Entity entity,PhysicsWorld physicsWorld) { GameMath math = new GameMath(); boolean isFinished = false; Body body = physicsWorld.getBodyByID(entity.getUserData().getID()); if(cellList.size()>currentTile) { float targetRadius = math.pythag(cellDimensions.x/2,cellDimensions.y/2); targetRadius += math.pythag(body.getLinearVelocity().x, body.getLinearVelocity().y); //find the radius of the moveing object float objectRadius = math.pythag(((BodyUserData)body.getUserData()).getDimensions().x, ((BodyUserData)body.getUserData()).getDimensions().y); //the object moving objectShape = new Circle( (body.getWorldPoint(body.getLocalCenter()).x*GameConstants.M_TO_P)+16, (body.getWorldPoint(body.getLocalCenter()).y*GameConstants.M_TO_P)+16, 5); //if we are on the tile go to the next if(targetShape.contains(objectShape.getCenterX(), objectShape.getCenterY())) { if(currentTile<cellList.size()-1) { currentTile++; targetShape = new Circle( cellList.get(currentTile).getCenterX(), cellList.get(currentTile).getCenterY(),10); } else { isFinished = true; body.setLinearVelocity(new Vec2(0,0)); } } else { int velX = 0; int velY = 0; float distanceX = targetShape.getCenterX()-objectShape.getCenterX(); float distanceY = targetShape.getCenterY()-objectShape.getCenterY(); if(Math.abs(distanceX)>Math.abs(distanceY)) { if(distanceX<0) { velX = (int) -entity.getVel_Max().x; } else if(distanceX>0) { velX = (int) entity.getVel_Max().x; } } else { if(distanceY<0) { velY = (int) -entity.getVel_Max().y; } else if(distanceY>0) { velY = (int) entity.getVel_Max().y; } } body.setLinearVelocity(new Vec2(velX,velY)); } } return isFinished; }[/source]

### #5GameGeazer

Posted 30 July 2012 - 08:23 PM

If anyone would like my butchered solution to this problem for their own use here it is. I'll clean it up eventually and repost it.
public boolean followPathSimple(Entity entity,PhysicsWorld physicsWorld)
{
GameMath math = new GameMath();
boolean isFinished = false;
Body body = physicsWorld.getBodyByID(entity.getUserData().getID());
if(cellList.size()>currentTile)
{

//find the radius of the moveing object
((BodyUserData)body.getUserData()).getDimensions().y);
//the object moving
objectShape = new Circle(
(body.getWorldPoint(body.getLocalCenter()).x*GameConstants.M_TO_P)+16,
(body.getWorldPoint(body.getLocalCenter()).y*GameConstants.M_TO_P)+16,
5);
//if we are on the tile go to the next
if(targetShape.contains(objectShape.getCenterX(), objectShape.getCenterY()))
{
if(currentTile<cellList.size()-1)
{
currentTile++;
targetShape = new Circle(
cellList.get(currentTile).getCenterX(),
cellList.get(currentTile).getCenterY(),10);
}
else
{
isFinished = true;
body.setLinearVelocity(new Vec2(0,0));
}
}
else
{
int velX = 0;
int velY = 0;
float distanceX = targetShape.getCenterX()-objectShape.getCenterX();
float distanceY = targetShape.getCenterY()-objectShape.getCenterY();
if(Math.abs(distanceX)>Math.abs(distanceY))
{
if(distanceX<0)
{
velX = (int) -entity.getVel_Max().x;
}
else if(distanceX>0)
{
velX = (int) entity.getVel_Max().x;
}
}
else
{
if(distanceY<0)
{
velY = (int) -entity.getVel_Max().y;
}
else if(distanceY>0)
{
velY = (int) entity.getVel_Max().y;
}
}
body.setLinearVelocity(new Vec2(velX,velY));
}

}
return isFinished;
}

PARTNERS