use of spacesettlers.actions.PurchaseCosts in project spacesettlers by amymcgovern.
the class Team method getTeamPurchases.
/**
* Ask the team if they want to purchase anything this turn. You can only
* purchase one item per turn and only if you have enough resourcesAvailable.
*
* @param space
* @return
*/
public Map<UUID, PurchaseTypes> getTeamPurchases(Toroidal2DPhysics space) {
Map<UUID, PurchaseTypes> purchase = new HashMap<UUID, PurchaseTypes>();
final Toroidal2DPhysics clonedSpace = space.deepClone();
final Set<AbstractActionableObject> clonedActionableObjects = getTeamActionableObjectsClone(space);
final PurchaseCosts clonedPurchaseCost = getPurchaseCostClone();
final ResourcePile clonedResources = new ResourcePile(availableResources);
// if the previous thread call hasn't finished, then just return default
if (executor == null || executor.isTerminated()) {
executor = Executors.newSingleThreadExecutor();
} else {
return purchase;
}
// System.out.println("exec " + executor.isTerminated());
Future<Map<UUID, PurchaseTypes>> future = executor.submit(new Callable<Map<UUID, PurchaseTypes>>() {
public Map<UUID, PurchaseTypes> call() throws Exception {
return teamClient.getTeamPurchases(clonedSpace, clonedActionableObjects, clonedResources, clonedPurchaseCost);
}
});
try {
// start
purchase = future.get(SpaceSettlersSimulator.TEAM_ACTION_TIMEOUT, TimeUnit.MILLISECONDS);
// finished in time
} catch (TimeoutException e) {
// was terminated
// return empty map, don't buy anything
System.out.println(getTeamName() + " timed out in getTeamPurchases");
purchase = new HashMap<UUID, PurchaseTypes>();
} catch (InterruptedException e) {
// we were interrupted (should not happen but lets be good programmers)
// return empty map, don't buy anything
purchase = new HashMap<UUID, PurchaseTypes>();
e.printStackTrace();
} catch (ExecutionException e) {
// the executor threw and exception (should not happen but lets be good programmers)
// return empty map, don't buy anything
purchase = new HashMap<UUID, PurchaseTypes>();
e.printStackTrace();
} catch (RejectedExecutionException e) {
System.err.println("exec" + executor.isTerminated());
e.printStackTrace();
} catch (Exception e) {
purchase = new HashMap<UUID, PurchaseTypes>();
e.printStackTrace();
}
executor.shutdownNow();
return purchase;
}
Aggregations