use of spacesettlers.utilities.Position in project spacesettlers by amymcgovern.
the class TestToroidal2DPhysics method testApplyOrientationMoveFromStop.
@Test
public void testApplyOrientationMoveFromStop() {
Movement movement = new Movement();
double angularAccel = Math.PI / 60.0;
movement.setAngularAccleration(angularAccel);
movement.setTranslationalAcceleration(new Vector2D());
double expectedOrientation = angularAccel;
Position newPosition = space.applyMovement(position, movement, timestep);
assertEquals(newPosition.getOrientation(), expectedOrientation, 0.01);
assertEquals(newPosition.getAngularVelocity(), angularAccel, 0.01);
assertEquals(newPosition.getX(), 0, 0.0);
assertEquals(newPosition.getY(), 0, 0.0);
assertEquals(newPosition.getTotalTranslationalVelocity(), 0, 0);
}
use of spacesettlers.utilities.Position in project spacesettlers by amymcgovern.
the class TestToroidal2DPhysics method testApplyTranslationalMovementVerticalFromStop.
@Test
public void testApplyTranslationalMovementVerticalFromStop() {
Movement movement = new Movement();
movement.setAngularAccleration(0);
movement.setTranslationalAcceleration(new Vector2D(0, 10));
position.setOrientation(Math.PI / 2);
double expectedX = 0;
double expectedY = 10;
Position newPosition = space.applyMovement(position, movement, timestep);
assertEquals(newPosition.getX(), expectedX, 0.01);
assertEquals(newPosition.getY(), expectedY, 0.01);
assertEquals(newPosition.getOrientation(), Math.PI / 2, 0.01);
assertEquals(newPosition.getAngularVelocity(), 0, 0.01);
assertEquals(newPosition.getTranslationalVelocityX(), 0, 0.01);
assertEquals(newPosition.getTranslationalVelocityY(), 10, 0.01);
}
use of spacesettlers.utilities.Position in project spacesettlers by amymcgovern.
the class TestToroidal2DPhysics method testApplyTranslationalMovementAngledFromStop.
@Test
public void testApplyTranslationalMovementAngledFromStop() {
Movement movement = new Movement();
movement.setAngularAccleration(0);
movement.setTranslationalAcceleration(new Vector2D(10, 10));
position.setOrientation(Math.PI / 4);
double expectedX = 10;
double expectedY = 10;
Position newPosition = space.applyMovement(position, movement, timestep);
assertEquals(newPosition.getX(), expectedX, 0.01);
assertEquals(newPosition.getY(), expectedY, 0.01);
assertEquals(newPosition.getOrientation(), Math.PI / 4, 0.01);
assertEquals(newPosition.getAngularVelocity(), 0, 0.01);
assertEquals(newPosition.getTranslationalVelocityX(), 10, 0.01);
assertEquals(newPosition.getTranslationalVelocityY(), 10, 0.01);
}
use of spacesettlers.utilities.Position in project spacesettlers by amymcgovern.
the class TestToroidal2DPhysics method testFindShortestDistance.
/**
* Tests the distances around a square using known distances from a triangle.
* Ensures wrap-around works
*
* -10, -10 0, -10 10, -10
* -10, 0 0, 0 10, 0
* -10, 10 0, 10 10, 10
*/
@Test
public void testFindShortestDistance() {
Position center = new Position(0, 0);
// do all the diagonals
double expectedDist = Math.sqrt(200);
Position other = new Position(-10, -10);
double dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(10, -10);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(10, 10);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(-10, 10);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
// now the square ones
expectedDist = 10;
other = new Position(0, -10);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(10, 0);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(0, 10);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
other = new Position(-10, 0);
dist = space.findShortestDistance(center, other);
assertEquals(dist, expectedDist, 0.01);
// and itself
dist = space.findShortestDistance(center, center);
assertEquals(dist, 0, 0.01);
}
use of spacesettlers.utilities.Position in project spacesettlers by amymcgovern.
the class HumanTeamClient method getMovementStart.
/**
* Look at the last key pressed by the human and do its movement
*/
@Override
public Map<UUID, AbstractAction> getMovementStart(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
HashMap<UUID, AbstractAction> actions = new HashMap<UUID, AbstractAction>();
for (AbstractObject actionable : actionableObjects) {
if (actionable instanceof Ship) {
// get the current position
Ship ship = (Ship) actionable;
Position myPosition = ship.getPosition();
Vector2D currentVelocity = myPosition.getTranslationalVelocity();
RawAction action = null;
double angularVel = myPosition.getAngularVelocity();
// if the key was up or down, accelerate along the current line
if (lastKeyPressed == HumanKeyPressed.UP) {
Vector2D newVel = new Vector2D(HUMAN_ACCEL * Math.cos(myPosition.getOrientation()), HUMAN_ACCEL * Math.sin(myPosition.getOrientation()));
newVel.add(currentVelocity);
action = new RawAction(newVel, 0);
} else if (lastKeyPressed == HumanKeyPressed.DOWN) {
Vector2D newVel = new Vector2D(-HUMAN_ACCEL * Math.cos(myPosition.getOrientation()), -HUMAN_ACCEL * Math.sin(myPosition.getOrientation()));
newVel.add(currentVelocity);
action = new RawAction(newVel, 0);
}
// if the key was right or left, turn
if (lastKeyPressed == HumanKeyPressed.RIGHT) {
action = new RawAction(0, HUMAN_TURN_ACCEL);
} else if (lastKeyPressed == HumanKeyPressed.LEFT) {
action = new RawAction(0, -HUMAN_TURN_ACCEL);
}
// was the mouse clicked?
if (lastMouseClick != null) {
if (mouseClickMove == null || mouseClickMove.isMovementFinished(space) || space.findShortestDistance(lastMouseClick, myPosition) > CLICK_DISTANCE) {
mouseClickMove = new MoveAction(space, myPosition, lastMouseClick);
graphicsToAdd.add(new StarGraphics(3, super.teamColor, lastMouseClick));
LineGraphics line = new LineGraphics(myPosition, lastMouseClick, space.findShortestDistanceVector(myPosition, lastMouseClick));
line.setLineColor(super.teamColor);
graphicsToAdd.add(line);
}
actions.put(actionable.getId(), mouseClickMove);
} else {
actions.put(actionable.getId(), action);
}
} else {
// can't really control anything but the ship
actions.put(actionable.getId(), new DoNothingAction());
}
}
return actions;
}
Aggregations