Search in sources :

Example 6 with DoNothingAction

use of spacesettlers.actions.DoNothingAction 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;
}
Also used : HashMap(java.util.HashMap) Position(spacesettlers.utilities.Position) AbstractObject(spacesettlers.objects.AbstractObject) Beacon(spacesettlers.objects.Beacon) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) AbstractAction(spacesettlers.actions.AbstractAction) DoNothingAction(spacesettlers.actions.DoNothingAction) MoveToObjectAction(spacesettlers.actions.MoveToObjectAction)

Example 7 with DoNothingAction

use of spacesettlers.actions.DoNothingAction in project spacesettlers by amymcgovern.

the class CoreCollectorTeamClient 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();
            // if the ship has a core, take it to base
            if (ship.getNumCores() > 0) {
                Base base = findNearestBase(space, ship);
                AbstractAction newAction = new MoveToObjectAction(space, ship.getPosition(), base);
                actions.put(ship.getId(), newAction);
            } else {
                // go find a core (or keep aiming for one if you already are)
                if (current == null || !shipToCoreMap.containsKey(ship)) {
                    Position currentPosition = ship.getPosition();
                    AiCore core = pickNearestFreeCore(space, ship);
                    AbstractAction newAction = null;
                    if (core == null) {
                        // there is no core available so do nothing
                        newAction = new DoNothingAction();
                    } else {
                        coreToShipMap.put(core, ship);
                        shipToCoreMap.put(ship, core);
                        Position newGoal = core.getPosition();
                        newAction = new MoveToObjectAction(space, currentPosition, core);
                    }
                    actions.put(ship.getId(), newAction);
                } else {
                    // update the goal location since cores move
                    UUID myCoreId = shipToCoreMap.get(ship).getId();
                    AiCore myCore = (AiCore) space.getObjectById(myCoreId);
                    Position currentPosition = ship.getPosition();
                    AbstractAction newAction = null;
                    newAction = new MoveToObjectAction(space, currentPosition, myCore);
                    actions.put(ship.getId(), newAction);
                }
            }
        } else {
            // it is a base and core collector doesn't do anything to bases
            actions.put(actionable.getId(), new DoNothingAction());
        }
    }
    return actions;
}
Also used : HashMap(java.util.HashMap) Position(spacesettlers.utilities.Position) AiCore(spacesettlers.objects.AiCore) AbstractObject(spacesettlers.objects.AbstractObject) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) AbstractAction(spacesettlers.actions.AbstractAction) DoNothingAction(spacesettlers.actions.DoNothingAction) Base(spacesettlers.objects.Base) MoveToObjectAction(spacesettlers.actions.MoveToObjectAction)

Example 8 with DoNothingAction

use of spacesettlers.actions.DoNothingAction in project spacesettlers by amymcgovern.

the class PacifistFlagCollectorTeamClient 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();
}
Also used : Asteroid(spacesettlers.objects.Asteroid) Position(spacesettlers.utilities.Position) Beacon(spacesettlers.objects.Beacon) AbstractAction(spacesettlers.actions.AbstractAction) DoNothingAction(spacesettlers.actions.DoNothingAction) Base(spacesettlers.objects.Base) MoveToObjectAction(spacesettlers.actions.MoveToObjectAction)

Example 9 with DoNothingAction

use of spacesettlers.actions.DoNothingAction in project spacesettlers by amymcgovern.

the class PacifistFlagCollectorTeamClient method getMovementStart.

/**
 * Assigns ships to asteroids and beacons, as described above
 */
public Map<UUID, AbstractAction> getMovementStart(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
    HashMap<UUID, AbstractAction> actions = new HashMap<UUID, AbstractAction>();
    Ship flagShip;
    // get the flag carrier, if we have one
    flagShip = getFlagCarrier(space, actionableObjects);
    // we don't have a ship carrying a flag, so find the best choice (if it exists)
    if (flagShip == null) {
        flagShip = findHealthiestShipNearFlag(space, actionableObjects);
    }
    // resources (as long as it isn't the flagShip)
    for (AbstractObject actionable : actionableObjects) {
        if (actionable instanceof Ship) {
            Ship ship = (Ship) actionable;
            AbstractAction action;
            if (flagShip != null && ship.equals(flagShip)) {
                if (flagShip.isCarryingFlag()) {
                    // System.out.println("We have a flag carrier!");
                    Base base = findNearestBase(space, ship);
                    // System.out.println("Flag ship before computing action: " + flagShip);
                    action = new MoveToObjectAction(space, ship.getPosition(), base);
                    // System.out.println("Aiming for base with action " + action);
                    aimingForBase.put(ship.getId(), true);
                // System.out.println("Flag ship after computing action: " + flagShip);
                } else {
                    Flag enemyFlag = getEnemyFlag(space);
                    action = new MoveToObjectAction(space, ship.getPosition(), enemyFlag, enemyFlag.getPosition().getTranslationalVelocity());
                }
            } else {
                action = getAsteroidCollectorAction(space, ship);
            }
            // save the action for this ship
            actions.put(ship.getId(), action);
        } else {
            // bases do nothing
            actions.put(actionable.getId(), new DoNothingAction());
        }
    }
    return actions;
}
Also used : HashMap(java.util.HashMap) AbstractObject(spacesettlers.objects.AbstractObject) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) AbstractAction(spacesettlers.actions.AbstractAction) Flag(spacesettlers.objects.Flag) DoNothingAction(spacesettlers.actions.DoNothingAction) Base(spacesettlers.objects.Base) MoveToObjectAction(spacesettlers.actions.MoveToObjectAction)

Example 10 with DoNothingAction

use of spacesettlers.actions.DoNothingAction in project spacesettlers by amymcgovern.

the class RandomTeamClient method getMovementStart.

@Override
public Map<UUID, AbstractAction> getMovementStart(Toroidal2DPhysics space, Set<AbstractActionableObject> actionableObjects) {
    HashMap<UUID, AbstractAction> randomActions = new HashMap<UUID, AbstractAction>();
    for (AbstractObject actionable : actionableObjects) {
        if (actionable instanceof Ship) {
            Ship ship = (Ship) actionable;
            AbstractAction current = ship.getCurrentAction();
            // if we finished, make a new spot in space to aim for
            if (current == null || current.isMovementFinished(space)) {
                Position currentPosition = ship.getPosition();
                Position newGoal = space.getRandomFreeLocationInRegion(random, Ship.SHIP_RADIUS, (int) currentPosition.getX(), (int) currentPosition.getY(), RANDOM_MOVE_RADIUS);
                MoveAction newAction = null;
                newAction = new MoveAction(space, currentPosition, newGoal);
                // System.out.println("Ship is at " + currentPosition + " and goal is " + newGoal);
                SpacewarGraphics graphic = new CircleGraphics(1, getTeamColor(), newGoal);
                graphics.add(graphic);
                // Vector2D shortVec = space.findShortestDistanceVector(currentPosition, newGoal);
                // LineShadow lineShadow = new LineShadow(currentPosition, newGoal, shortVec);
                // newShadows.add(lineShadow);
                randomActions.put(ship.getId(), newAction);
            } else {
                randomActions.put(ship.getId(), ship.getCurrentAction());
            }
        } else {
            // it is a base and random doesn't do anything to bases
            randomActions.put(actionable.getId(), new DoNothingAction());
        }
    }
    return randomActions;
}
Also used : MoveAction(spacesettlers.actions.MoveAction) SpacewarGraphics(spacesettlers.graphics.SpacewarGraphics) HashMap(java.util.HashMap) Position(spacesettlers.utilities.Position) AbstractObject(spacesettlers.objects.AbstractObject) CircleGraphics(spacesettlers.graphics.CircleGraphics) Ship(spacesettlers.objects.Ship) UUID(java.util.UUID) AbstractAction(spacesettlers.actions.AbstractAction) DoNothingAction(spacesettlers.actions.DoNothingAction)

Aggregations

AbstractAction (spacesettlers.actions.AbstractAction)19 DoNothingAction (spacesettlers.actions.DoNothingAction)19 Ship (spacesettlers.objects.Ship)15 UUID (java.util.UUID)12 AbstractObject (spacesettlers.objects.AbstractObject)12 Position (spacesettlers.utilities.Position)12 HashMap (java.util.HashMap)11 MoveToObjectAction (spacesettlers.actions.MoveToObjectAction)11 Base (spacesettlers.objects.Base)11 Beacon (spacesettlers.objects.Beacon)8 Asteroid (spacesettlers.objects.Asteroid)6 AiCore (spacesettlers.objects.AiCore)5 MoveAction (spacesettlers.actions.MoveAction)2 AbstractActionableObject (spacesettlers.objects.AbstractActionableObject)2 Flag (spacesettlers.objects.Flag)2 LinkedHashSet (java.util.LinkedHashSet)1 Map (java.util.Map)1 ExecutionException (java.util.concurrent.ExecutionException)1 ExecutorService (java.util.concurrent.ExecutorService)1 Future (java.util.concurrent.Future)1