void UpdateBuildings() { foreach (string faction in factions) { //new resources are only considered at the beginning of the next round int resources = GetResourcesTotalByFaction(faction); int usedResources = 0; foreach (Building building in manager.GetBuildingsByFaction(faction)) { //ignore destroyed buildings if (building.IsDestroyed) { building.CheckHide(); continue; } if (building is FactoryBuilding) { FactoryBuilding factoryBuilding = (FactoryBuilding)building; if (factoryBuilding.CanProduce(round) && factoryBuilding.SpawnCost <= resources) { resources -= factoryBuilding.SpawnCost; usedResources += factoryBuilding.SpawnCost; Unit newUnit = factoryBuilding.CreateUnit(round); manager.AddUnit(newUnit); } } else if (building is ResourceBuilding) { ResourceBuilding resourceBuilding = (ResourceBuilding)building; resourceBuilding.IncreaseResourceAmount(); } } //remove used resources from faction's available resource buildings UseResourcesFromFaction(faction, usedResources); } }
private void AddBuildings(int numBuildings, string faction) { for (int i = 0; i < numBuildings; i++) { int x = random.Next(0, map.width); int y = random.Next(0, map.height); int buildingType = random.Next(0, 2); Building building; if (buildingType == 0) { building = new FactoryBuilding(x, y, faction, map.height); } else { building = new ResourceBuilding(x, y, faction); } manager.AddBuilding(building); } }
/// /// /// /// public void UpdateBuildings() { foreach (Building building in map.Buildings) { if (building is FactoryBuilding) { FactoryBuilding factoryBuilding = (FactoryBuilding)building; //if building is a factory, it gets assigned if (round % factoryBuilding.ProductionSpeed == 0) //if the round can be divided by the factory production speed, it creates a unit { Unit newUnit = factoryBuilding.CreateUnit(); map.AddUnit(newUnit); } } else if (building is ResourceBuilding) //resource building { ResourceBuilding resourceBuilding = (ResourceBuilding)building; //casting it resourceBuilding.IncreaseResourceAmount(); } } }