public int Calculate(ProvinceRevision revision, Buildings building)
        {
            var triple = new BuildingTriple(revision.Power, revision.CultureLevel, building);
            int turnsNeeded;
            if (turns.TryGetValue(triple, out turnsNeeded))
            {
                return turnsNeeded;
            }

            return 99;

            // TODO productionCapacity && productionCost should be removed.
            int capacity = productionCapacity.Calculate(revision);
            int cost = productionCost.Calculate(revision, building);

            return cost / capacity;
        }
 public int Calculate(ProvinceRevision revision, Buildings target)
 {
     switch (target)
     {
         case Buildings.Soldiers:
             return 5;
         case Buildings.Fortification:
             return 50;
         case Buildings.Farm:
             return (revision.FarmsCount + 1) * (revision.FarmsCount + 1);
         case Buildings.Culture:
             return 60;
         //                case Buildings.Unknown:
         //                    break;
         default:
             throw new ArgumentOutOfRangeException("target");
     }
 }
        internal Buildings GetNextBuilding(ProvinceRevision lastRevision, Buildings lastBuilt)
        {
            if (lastBuilt == Buildings.Soldiers)
            {
                if (lastRevision.FarmsCount == 1
                        && lastRevision.SoldiersCount == 2)
                {
                    return Buildings.Soldiers;
                }

                if (lastRevision.SoldiersCount < lastRevision.FarmsCount * 2)
                {
                    return Buildings.Soldiers;
                }

                return Buildings.Farm;
            }

            return lastBuilt;
        }
 public void Add(ProvinceRevision revision)
 {
     revisions.Add(revision);
 }