use of spacesettlers.utilities.Vector2D in project spacesettlers by amymcgovern.
the class TestMoveActionWithOrientation method testpdControlMoveToGoal.
/**
* Test moving to the goal
*
* (40, 40)
* (50,50)
* (40, 60)
*
* @throws SpaceSettlersActionException
*/
@Test
public void testpdControlMoveToGoal() throws SpaceSettlersActionException {
// first to -3pi/4
Position currentLoc = new Position(50, 50);
Position goalLoc = new Position(40, 40);
currentLoc.setOrientation(-(3 * Math.PI) / 4);
moveAction = new MoveActionWithOrientation();
Vector2D accel = moveAction.pdControlMoveToGoal(space, goalLoc, currentLoc, targetVelocity);
Movement movement = new Movement();
while (accel.getMagnitude() > MoveAction.TARGET_REACHED_ACCEL) {
movement.setTranslationalAcceleration(accel);
currentLoc = space.applyMovement(currentLoc, movement, timestep);
accel = moveAction.pdControlMoveToGoal(space, goalLoc, currentLoc, targetVelocity);
}
assertEquals(currentLoc.getOrientation(), -(3 * Math.PI) / 4, 0.01);
assertEquals(currentLoc.getX(), 40, 0.05);
assertEquals(currentLoc.getY(), 40, 0.05);
// then to 3pi/4
currentLoc = new Position(50, 50);
currentLoc.setOrientation(0);
goalLoc = new Position(40, 60);
currentLoc.setOrientation((3 * Math.PI) / 4);
accel = moveAction.pdControlMoveToGoal(space, goalLoc, currentLoc, targetVelocity);
while (accel.getMagnitude() > MoveAction.TARGET_REACHED_ACCEL) {
movement.setTranslationalAcceleration(accel);
currentLoc = space.applyMovement(currentLoc, movement, timestep);
accel = moveAction.pdControlMoveToGoal(space, goalLoc, currentLoc, targetVelocity);
}
assertEquals(currentLoc.getOrientation(), (3 * Math.PI) / 4, 0.01);
assertEquals(currentLoc.getX(), 40, 0.05);
assertEquals(currentLoc.getY(), 60, 0.05);
}
use of spacesettlers.utilities.Vector2D in project spacesettlers by amymcgovern.
the class TestCollisionHandler method testCollidingInsideRadius.
@Test
public void testCollidingInsideRadius() {
Ship ship;
Asteroid asteroid;
Position ship1Pos = new Position(100, 0, Math.PI / 4);
ship1Pos.setTranslationalVelocity(new Vector2D(20, 0));
ship = new Ship("team1", Color.BLUE, ship1Pos);
Position asteroid2Pos = new Position(134, 0, -Math.PI / 4);
asteroid2Pos.setTranslationalVelocity(new Vector2D(-10, 0));
asteroid = new Asteroid(asteroid2Pos, false, 20, true, .33, .33, .34);
ship.setMass(asteroid.getMass());
// ship radius is 15 and is at 100,0
// asteroid radius is 20 here and at 134,0
// ship should bounce back to -99.33,0 (edge of collision) and asteroid to 134.33 (edge of collision, based on velocities)
collisionHandler.collide(ship, asteroid, space);
assertEquals(ship.getPosition().getTranslationalVelocityX(), -10, 0.01);
assertEquals(ship.getPosition().getTranslationalVelocityY(), 0, 0.01);
assertEquals(asteroid.getPosition().getTranslationalVelocityX(), 20, 0.01);
assertEquals(asteroid.getPosition().getTranslationalVelocityY(), 0, 0.01);
assertEquals(ship.getPosition().getX(), 99.33, 0.01);
assertEquals(ship.getPosition().getY(), 0, 0.01);
assertEquals(asteroid.getPosition().getX(), 134.33, 0.01);
assertEquals(asteroid.getPosition().getY(), 0, 0.01);
}
use of spacesettlers.utilities.Vector2D in project spacesettlers by amymcgovern.
the class TestCollisionHandler method testElasticCollisionsShipToAsteroidX.
@Test
public void testElasticCollisionsShipToAsteroidX() {
Ship ship1;
Asteroid asteroid;
Position ship1Pos = new Position(0, 0, Math.PI / 4);
ship1Pos.setTranslationalVelocity(new Vector2D(20, 0));
ship1 = new Ship("team1", Color.BLUE, ship1Pos);
Position asteroid2Pos = new Position(10, 0, -Math.PI / 4);
asteroid2Pos.setTranslationalVelocity(new Vector2D(-10, 0));
asteroid = new Asteroid(asteroid2Pos, false, 10, true, .33, .33, .34);
ship1.setMass(asteroid.getMass());
collisionHandler.collide(ship1, asteroid, space);
assertEquals(ship1.getPosition().getTranslationalVelocityX(), -10, 0.01);
assertEquals(ship1.getPosition().getTranslationalVelocityY(), 0, 0.01);
assertEquals(asteroid.getPosition().getTranslationalVelocityX(), 20, 0.01);
assertEquals(asteroid.getPosition().getTranslationalVelocityY(), 0, 0.01);
}
use of spacesettlers.utilities.Vector2D in project spacesettlers by amymcgovern.
the class TestCollisionHandler method testCollidingWithMineableAsteroid.
@Test
public void testCollidingWithMineableAsteroid() {
Ship ship1;
Asteroid asteroid;
Position ship1Pos = new Position(0, 0, Math.PI / 4);
ship1Pos.setTranslationalVelocity(new Vector2D(20, 0));
ship1 = new Ship("team1", Color.BLUE, ship1Pos);
Position asteroid2Pos = new Position(10, 0, -Math.PI / 4);
asteroid2Pos.setTranslationalVelocity(new Vector2D(-10, 0));
asteroid = new Asteroid(asteroid2Pos, true, 10, true, .33, .33, .34);
ResourcePile asteroidResources = asteroid.getResources();
collisionHandler.collide(ship1, asteroid, space);
assertEquals(ship1.getResources().getResourceQuantity(ResourceTypes.FUEL), asteroidResources.getResourceQuantity(ResourceTypes.FUEL), 0.0);
assertEquals(ship1.getResources().getResourceQuantity(ResourceTypes.WATER), asteroidResources.getResourceQuantity(ResourceTypes.WATER), 0.0);
assertEquals(ship1.getResources().getResourceQuantity(ResourceTypes.METALS), asteroidResources.getResourceQuantity(ResourceTypes.METALS), 0.0);
}
use of spacesettlers.utilities.Vector2D in project spacesettlers by amymcgovern.
the class TestCollisionHandler method testElasticCollisionsAsteroidsMoveableToNonMoveableOnX.
@Test
public void testElasticCollisionsAsteroidsMoveableToNonMoveableOnX() {
Asteroid asteroid1, asteroid2;
Position position1 = new Position(0, 0, Math.PI / 4);
position1.setTranslationalVelocity(new Vector2D(20, 0));
asteroid1 = new Asteroid(position1, false, 10, true, .33, .33, .34);
Position position2 = new Position(10, 0, -Math.PI / 4);
asteroid2 = new Asteroid(position2, false, 10, false, .33, .33, .34);
collisionHandler.collide(asteroid1, asteroid2, space);
assertEquals(asteroid1.getPosition().getTranslationalVelocityX(), -20, 0.01);
assertEquals(asteroid1.getPosition().getTranslationalVelocityY(), 0, 0.01);
assertEquals(asteroid2.getPosition().getTranslationalVelocityX(), 0, 0.01);
assertEquals(asteroid2.getPosition().getTranslationalVelocityY(), 0, 0.01);
}
Aggregations