public bool TryBuild(TerrainUpgradeEntity terrainUpgrade, ResolvedMultipliers multipliers, TileContainer tileContainer) { List <ResolvedGenerator> cost = ResolvedGenerator.List(terrainUpgrade.BuildCost.Resources, multipliers); if (!CanAfford(cost)) { return(false); } Buy(cost); tileContainer.terrain = terrainUpgrade.Replacement.Entity; tileContainer.growable = terrainUpgrade.Replacement.Entity.Growable != null ? new GrowableIncarnation(terrainUpgrade.Replacement.Entity.Growable.Entity) : null; return(true); }
public bool TryUnlockUpgrade(UpgradeEntity upgrade, ResolvedMultipliers multipliers) { List <ResolvedGenerator> cost = ResolvedGenerator.List(upgrade.BuyCost.Resources, multipliers); if (!CanAfford(cost)) { return(false); } Buy(cost); unlockedUpgrades.Remove(upgrade); ownedUpgrades.Add(upgrade); return(true); }
public bool TryBuild(BuildingEntity building, ResolvedMultipliers multipliers, TileContainer tileContainer) { List <ResolvedGenerator> cost = ResolvedGenerator.List(building.BuildCost.Resources, multipliers); if (!CanAfford(cost)) { return(false); } Buy(cost); tileContainer.building = new BuildingIncarnation(building); if (!(building.Effect is BuildingEffectHarvester)) { tileContainer.growable = null; } return(true); }
public bool TryGenerate(BuildingEffectGenerator building, ResolvedMultipliers multipliers) { List <ResolvedGenerator> consumed = ResolvedGenerator.List(building.Consumed, multipliers); List <ResolvedGenerator> generated = ResolvedGenerator.List(building.Generated, multipliers); foreach (ResolvedGenerator cost in consumed) { if (!CanAfford(cost)) { return(false); } } foreach (ResolvedGenerator cost in consumed) { AddResource(cost.Resource, -cost.Amount); } foreach (ResolvedGenerator cost in generated) { AddResource(cost.Resource, cost.Amount); } return(true); }
public void Tick() { resolvedMultipliers = new ResolvedMultipliers(rules); // TODO: improve foreach (TileContainer tile in state.world.Values) { if (tile.specialEntity == null) { if (tile.growable != null) { tile.growable.Grow(); } if (tile.building != null) { if (tile.building.Ticker.MakeTick(1)) { TickBuilding(tile); } } } } ProcessUnlocks(); }
public static List <ResolvedGenerator> List(List <Generator> generators, ResolvedMultipliers multipliers) { return(new List <ResolvedGenerator>(generators.Select(generator => new ResolvedGenerator(generator, multipliers)))); }
public ResolvedGenerator(Generator generator, ResolvedMultipliers multipliers) { Resource = generator.Resource.Entity; Amount = multipliers.Get(generator).Apply(generator.Amount); }
public bool CanAfford(UpgradeEntity upgrade, ResolvedMultipliers multipliers) { return(CanAfford(ResolvedGenerator.List(upgrade.BuyCost.Resources, multipliers))); }
public bool CanAfford(TerrainUpgradeEntity terrainUpgrade, ResolvedMultipliers multipliers) { return(CanAfford(ResolvedGenerator.List(terrainUpgrade.BuildCost.Resources, multipliers))); }
public bool CanAfford(BuildingEntity building, ResolvedMultipliers multipliers) { return(CanAfford(ResolvedGenerator.List(building.BuildCost.Resources, multipliers))); }