/** * Gets the operand value if it is applicable to the given Settlement. * * @param settlement The <code>Settlement</code> to check. * @return The operand value, or null if inapplicable. */ public Integer getValue(Settlement settlement) { if (value == null) { if (scopeLevel == ScopeLevel.SETTLEMENT && settlement instanceof Colony) { Colony colony = (Colony) settlement; List<FreeColObject> list = new LinkedList<FreeColObject>(); switch (operandType) { case UNITS: list.addAll(colony.getUnitList()); break; case BUILDINGS: list.addAll(colony.getBuildings()); break; default: if (getMethodName() != null) { try { Method method = colony.getClass().getMethod(getMethodName()); if (method != null && Integer.class.isAssignableFrom(method.getReturnType())) { return (Integer) method.invoke(colony); } } catch (Exception e) { logger.warning(e.toString()); return null; } } return null; } return count(list); } else { // in future, we might expand this to handle native // settlements return null; } } else { return value; } }
public void testProduction() { Game game = getGame(); game.setMap(getTestMap()); Colony colony = getStandardColony(3); ColonyTile tile = colony.getColonyTile(colony.getTile()); assertEquals(0, colony.getGoodsCount(foodType)); assertEquals(grainType, tile.getProduction().get(0).getType()); assertEquals(5, tile.getProduction().get(0).getAmount()); assertEquals(cottonType, tile.getProduction().get(1).getType()); assertEquals(2, tile.getProduction().get(1).getAmount()); for (Unit unit : colony.getUnitList()) { ProductionInfo unitInfo = colony.getProductionInfo(unit); assertNotNull(unitInfo); assertEquals(2, unitInfo.getConsumption().size()); assertEquals(2, unitInfo.getMaximumConsumption().size()); ProductionInfo tileInfo = colony.getProductionInfo(unit.getLocation()); assertEquals(1, tileInfo.getProduction().size()); assertEquals(grainType, tileInfo.getProduction().get(0).getType()); assertEquals(5, tileInfo.getProduction().get(0).getAmount()); } /* TypeCountMap<GoodsType> grossProduction = new TypeCountMap<GoodsType>(); TypeCountMap<GoodsType> netProduction = new TypeCountMap<GoodsType>(); for (ProductionInfo productionInfo : info.values()) { for (AbstractGoods goods : productionInfo.getProduction()) { grossProduction.incrementCount(goods.getType(), goods.getAmount()); netProduction.incrementCount(goods.getType().getStoredAs(), goods.getAmount()); } for (AbstractGoods goods : productionInfo.getStorage()) { grossProduction.incrementCount(goods.getType(), goods.getAmount()); netProduction.incrementCount(goods.getType().getStoredAs(), goods.getAmount()); } for (AbstractGoods goods : productionInfo.getConsumption()) { netProduction.incrementCount(goods.getType().getStoredAs(), -goods.getAmount()); } } assertEquals(2, grossProduction.getCount(cottonType)); assertEquals(2, colony.getNetProductionOf(cottonType)); assertEquals(20, grossProduction.getCount(grainType)); assertEquals(0, colony.getNetProductionOf(grainType)); assertEquals(3, grossProduction.getCount(bellsType)); assertEquals(0, colony.getNetProductionOf(bellsType)); assertEquals(1, grossProduction.getCount(crossesType)); assertEquals(1, colony.getNetProductionOf(crossesType)); // this is storage only assertEquals(7, grossProduction.getCount(foodType)); // this includes implicit type change and consumption assertEquals(14, colony.getNetProductionOf(foodType)); colony.addGoods(horsesType, 50); colony.getUnitList().get(0).setWorkType(cottonType); Building weaverHouse = colony.getBuilding(spec().getBuildingType("model.building.weaverHouse")); colony.getUnitList().get(1).setLocation(weaverHouse); info = colony.getProductionAndConsumption(); assertEquals(grainType, tile.getProduction().get(0).getType()); assertEquals(5, tile.getProduction().get(0).getAmount()); assertEquals(cottonType, tile.getProduction().get(1).getType()); assertEquals(2, tile.getProduction().get(1).getAmount()); grossProduction = new TypeCountMap<GoodsType>(); netProduction = new TypeCountMap<GoodsType>(); for (ProductionInfo productionInfo : info.values()) { for (AbstractGoods goods : productionInfo.getProduction()) { grossProduction.incrementCount(goods.getType(), goods.getAmount()); netProduction.incrementCount(goods.getType().getStoredAs(), goods.getAmount()); } for (AbstractGoods goods : productionInfo.getStorage()) { grossProduction.incrementCount(goods.getType(), goods.getAmount()); netProduction.incrementCount(goods.getType().getStoredAs(), goods.getAmount()); } for (AbstractGoods goods : productionInfo.getConsumption()) { netProduction.incrementCount(goods.getType().getStoredAs(), -goods.getAmount()); } } assertEquals(4, grossProduction.getCount(cottonType)); assertEquals(1, colony.getNetProductionOf(cottonType)); assertEquals(3, grossProduction.getCount(clothType)); assertEquals(3, colony.getNetProductionOf(clothType)); assertEquals(10, grossProduction.getCount(grainType)); assertEquals(0, colony.getNetProductionOf(grainType)); assertEquals(2, grossProduction.getCount(horsesType)); assertEquals(2, colony.getNetProductionOf(horsesType)); assertEquals(3, grossProduction.getCount(bellsType)); assertEquals(0, colony.getNetProductionOf(bellsType)); assertEquals(1, grossProduction.getCount(crossesType)); assertEquals(1, colony.getNetProductionOf(crossesType)); // this is storage only assertEquals(2, grossProduction.getCount(foodType)); // this includes implicit type change and consumption assertEquals(2, colony.getNetProductionOf(foodType)); */ }