use of spacesettlers.objects.Beacon in project spacesettlers by amymcgovern.
the class AggressiveFlagCollectorTeamClient method getWeaponShipAction.
/**
* Gets the action for the weapons based ship
* @param space
* @param ship
* @return
*/
private AbstractAction getWeaponShipAction(Toroidal2DPhysics space, Ship ship) {
AbstractAction current = ship.getCurrentAction();
Position currentPosition = ship.getPosition();
// aim for a beacon if there isn't enough energy
if (ship.getEnergy() < 2000) {
Beacon beacon = pickNearestBeacon(space, ship);
AbstractAction newAction = null;
// if there is no beacon, then just skip a turn
if (beacon == null) {
newAction = new DoNothingAction();
} else {
newAction = new MoveToObjectAction(space, currentPosition, beacon);
}
aimingForBase.put(ship.getId(), false);
return newAction;
}
// if the ship has enough resourcesAvailable, take it back to base
if (ship.getResources().getTotal() > 500) {
Base base = findNearestBase(space, ship);
AbstractAction newAction = new MoveToObjectAction(space, currentPosition, base);
aimingForBase.put(ship.getId(), true);
return newAction;
}
// did we bounce off the base?
if (ship.getResources().getTotal() == 0 && ship.getEnergy() > 2000 && aimingForBase.containsKey(ship.getId()) && aimingForBase.get(ship.getId())) {
current = null;
aimingForBase.put(ship.getId(), false);
}
// otherwise aim for the nearest enemy ship
if (current == null || current.isMovementFinished(space)) {
aimingForBase.put(ship.getId(), false);
Ship enemy = pickNearestEnemyShip(space, ship);
AbstractAction newAction = null;
if (enemy == null) {
// there is no enemy available so collect a beacon
Beacon beacon = pickNearestBeacon(space, ship);
// if there is no beacon, then just skip a turn
if (beacon == null) {
newAction = new DoNothingAction();
} else {
newAction = new MoveToObjectAction(space, currentPosition, beacon);
}
} else {
newAction = new MoveToObjectAction(space, currentPosition, enemy, enemy.getPosition().getTranslationalVelocity());
}
return newAction;
} else {
return ship.getCurrentAction();
}
}
use of spacesettlers.objects.Beacon in project spacesettlers by amymcgovern.
the class AggressiveFlagCollectorTeamClient method getAsteroidCollectorAction.
/**
* Gets the action for the asteroid collecting ship
* @param space
* @param ship
* @return
*/
private AbstractAction getAsteroidCollectorAction(Toroidal2DPhysics space, Ship ship) {
AbstractAction current = ship.getCurrentAction();
Position currentPosition = ship.getPosition();
// aim for a beacon if there isn't enough energy
if (ship.getEnergy() < 2000) {
Beacon beacon = pickNearestBeacon(space, ship);
AbstractAction newAction = null;
// if there is no beacon, then just skip a turn
if (beacon == null) {
newAction = new DoNothingAction();
} else {
newAction = new MoveToObjectAction(space, currentPosition, beacon);
}
aimingForBase.put(ship.getId(), false);
return newAction;
}
// if the ship has enough resourcesAvailable, take it back to base
if (ship.getResources().getTotal() > 500) {
Base base = findNearestBase(space, ship);
AbstractAction newAction = new MoveToObjectAction(space, currentPosition, base);
aimingForBase.put(ship.getId(), true);
return newAction;
}
// did we bounce off the base?
if (ship.getResources().getTotal() == 0 && ship.getEnergy() > 2000 && aimingForBase.containsKey(ship.getId()) && aimingForBase.get(ship.getId())) {
current = null;
aimingForBase.put(ship.getId(), false);
}
// otherwise aim for the asteroid
if (current == null || current.isMovementFinished(space)) {
aimingForBase.put(ship.getId(), false);
Asteroid asteroid = pickHighestValueNearestFreeAsteroid(space, ship);
AbstractAction newAction = null;
if (asteroid != null) {
asteroidToShipMap.put(asteroid.getId(), ship);
newAction = new MoveToObjectAction(space, currentPosition, asteroid, asteroid.getPosition().getTranslationalVelocity());
}
return newAction;
}
return ship.getCurrentAction();
}
use of spacesettlers.objects.Beacon in project spacesettlers by amymcgovern.
the class AggressiveHeuristicAsteroidCollectorSingletonTeamClient method getAggressiveAsteroidCollectorAction.
/**
* Gets the action for the asteroid collecting ship (while being aggressive towards the other ships)
* @param space
* @param ship
* @return
*/
private AbstractAction getAggressiveAsteroidCollectorAction(Toroidal2DPhysics space, Ship ship) {
AbstractAction current = ship.getCurrentAction();
Position currentPosition = ship.getPosition();
// aim for a beacon if there isn't enough energy
if (ship.getEnergy() < 2000) {
Beacon beacon = pickNearestBeacon(space, ship);
AbstractAction newAction = null;
// if there is no beacon, then just skip a turn
if (beacon == null) {
newAction = new DoNothingAction();
} else {
newAction = new MoveToObjectAction(space, currentPosition, beacon);
}
aimingForBase.put(ship.getId(), false);
shouldShoot = false;
return newAction;
}
// if the ship has enough resourcesAvailable, take it back to base
if (ship.getResources().getTotal() > 500 || ship.getNumCores() > 0) {
Base base = findNearestBase(space, ship);
AbstractAction newAction = new MoveToObjectAction(space, currentPosition, base);
aimingForBase.put(ship.getId(), true);
shouldShoot = false;
return newAction;
}
// did we bounce off the base?
if (ship.getResources().getTotal() == 0 && ship.getEnergy() > 2000 && aimingForBase.containsKey(ship.getId()) && aimingForBase.get(ship.getId())) {
current = null;
aimingForBase.put(ship.getId(), false);
shouldShoot = false;
}
// if there is a nearby core, go get it
AiCore nearbyCore = pickNearestCore(space, ship, 100);
if (nearbyCore != null) {
Position newGoal = nearbyCore.getPosition();
AbstractAction newAction = new MoveToObjectAction(space, currentPosition, nearbyCore);
return newAction;
}
// otherwise either for an asteroid or an enemy ship (depending on who is closer and what we need)
if (current == null || current.isMovementFinished(space)) {
aimingForBase.put(ship.getId(), false);
// see if there is an enemy ship nearby
Ship enemy = pickNearestEnemyShip(space, ship);
// find the highest valued nearby asteroid
Asteroid asteroid = pickHighestValueNearestFreeAsteroid(space, ship);
AbstractAction newAction = null;
// if there is no enemy nearby, go for an asteroid
if (enemy == null) {
if (asteroid != null) {
newAction = new MoveToObjectAction(space, currentPosition, asteroid, asteroid.getPosition().getTranslationalVelocity());
shouldShoot = false;
return newAction;
} else {
// no enemy and no asteroid, just skip this turn (shouldn't happen often)
shouldShoot = true;
newAction = new DoNothingAction();
return newAction;
}
}
// now decide which one to aim for
if (asteroid != null) {
double enemyDistance = space.findShortestDistance(ship.getPosition(), enemy.getPosition());
double asteroidDistance = space.findShortestDistance(ship.getPosition(), asteroid.getPosition());
// we are aggressive, so aim for enemies if they are nearby
if (enemyDistance < asteroidDistance) {
shouldShoot = true;
newAction = new MoveToObjectAction(space, currentPosition, enemy, enemy.getPosition().getTranslationalVelocity());
} else {
shouldShoot = false;
newAction = new MoveToObjectAction(space, currentPosition, asteroid, asteroid.getPosition().getTranslationalVelocity());
}
return newAction;
} else {
newAction = new MoveToObjectAction(space, currentPosition, enemy, enemy.getPosition().getTranslationalVelocity());
}
return newAction;
}
// return the current if new goals haven't formed
return ship.getCurrentAction();
}
use of spacesettlers.objects.Beacon in project spacesettlers by amymcgovern.
the class BeaconCollectorTeamClient method getMovementEnd.
/**
* Clean up data structure including beacon maps
*/
public void getMovementEnd(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
// new location)
for (Beacon beacon : space.getBeacons()) {
if (!beacon.isAlive()) {
shipToBeaconMap.remove(beaconToShipMap.get(beacon));
beaconToShipMap.remove(beacon);
}
}
}
use of spacesettlers.objects.Beacon in project spacesettlers by amymcgovern.
the class BeaconCollectorTeamClient method getMovementStart.
/**
* Send each ship to a beacon
*/
public Map<UUID, AbstractAction> getMovementStart(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
HashMap<UUID, AbstractAction> actions = new HashMap<UUID, AbstractAction>();
// loop through each ship
for (AbstractObject actionable : actionableObjects) {
if (actionable instanceof Ship) {
Ship ship = (Ship) actionable;
AbstractAction current = ship.getCurrentAction();
// does the ship have a beacon it is aiming for?
if (current == null || current.isMovementFinished(space) || !shipToBeaconMap.containsKey(ship)) {
Position currentPosition = ship.getPosition();
Beacon beacon = pickNearestFreeBeacon(space, ship);
AbstractAction newAction = null;
if (beacon == null) {
// there is no beacon available so do nothing
newAction = new DoNothingAction();
} else {
beaconToShipMap.put(beacon, ship);
shipToBeaconMap.put(ship, beacon);
Position newGoal = beacon.getPosition();
newAction = new MoveToObjectAction(space, currentPosition, beacon);
}
actions.put(ship.getId(), newAction);
} else {
actions.put(ship.getId(), ship.getCurrentAction());
}
} else {
// it is a base and Beacon collector doesn't do anything to bases
actions.put(actionable.getId(), new DoNothingAction());
}
}
return actions;
}
Aggregations