Example #1
0
    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);
    }
Example #2
0
    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);
    }
Example #3
0
    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);
    }
Example #4
0
    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);
    }
Example #5
0
    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();
    }
Example #6
0
 public static List <ResolvedGenerator> List(List <Generator> generators, ResolvedMultipliers multipliers)
 {
     return(new List <ResolvedGenerator>(generators.Select(generator => new ResolvedGenerator(generator, multipliers))));
 }
Example #7
0
 public ResolvedGenerator(Generator generator, ResolvedMultipliers multipliers)
 {
     Resource = generator.Resource.Entity;
     Amount   = multipliers.Get(generator).Apply(generator.Amount);
 }
Example #8
0
 public bool CanAfford(UpgradeEntity upgrade, ResolvedMultipliers multipliers)
 {
     return(CanAfford(ResolvedGenerator.List(upgrade.BuyCost.Resources, multipliers)));
 }
Example #9
0
 public bool CanAfford(TerrainUpgradeEntity terrainUpgrade, ResolvedMultipliers multipliers)
 {
     return(CanAfford(ResolvedGenerator.List(terrainUpgrade.BuildCost.Resources, multipliers)));
 }
Example #10
0
 public bool CanAfford(BuildingEntity building, ResolvedMultipliers multipliers)
 {
     return(CanAfford(ResolvedGenerator.List(building.BuildCost.Resources, multipliers)));
 }