Пример #1
0
 /**
  * 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));

    */
  }