// Advance game time by one tick. public void GameTimeTick() { --TicksUntilEconomyTick; if (TicksUntilEconomyTick == 0) { Economy.Tick(); TicksUntilEconomyTick = EconomyTickInterval; } // Ja ich weiß furchtbares Design, aber Gründe ... int workersIncome = 0; this.Map.ForEachTile((x, y, tile) => { if (tile.Building != null) { HousingBuilding testCast = tile.Building as HousingBuilding; if (testCast != null) { workersIncome += testCast.getNumberOfWorkers(); } tile.Building.gameTick(); } }); Economy.addIncome(workersIncome); }
public Worker SpawnWorker(HousingBuilding home) { Worker w = Instantiate(_workerPrefab, home._tile.transform.position, Quaternion.identity).GetComponent <Worker>(); w.transform.SetParent(_workerParentObject); w.AssignToHome(home); _population++; return(w); }
private void Die() { gameObject.SetActive(false); // Unregister from job _jobManager.RemoveWorker(this); // Clear buildings _home = null; _workplace = null; }
public void Setup(HousingBuilding home) { Home = home; _age = 0; _happiness = 0; timeSinceLastAgeIncrease = 0; _happinessRequirements = GetComponents <IHappinessRequirement>().ToList(); _employed = false; _atHome = true; Birth.Invoke(this); }
public void Initialize(ResourceManager resourceManager, JobManager jobManager, float age, HousingBuilding home) { _age = age; _jobManager = jobManager; _home = home; _targetTile = _home._tile; _consumptionRate.Add(ResourceManager.ResourceTypes.Fish, 1); _consumptionRate.Add(ResourceManager.ResourceTypes.Clothes, 1); _consumptionRate.Add(ResourceManager.ResourceTypes.Schnapps, 0); _resourceManager = resourceManager; foreach (KeyValuePair <ResourceManager.ResourceTypes, float> resource in _consumptionRate) { _consumption.Add(resource.Key, 1f); } Age(); }
// Try to place a building at a certain map tile public void PlaceBuildingOnTile( MapTile tile, uint mapX, uint mapY, BuildingCategoryParams buildingCategoryParams, BuildingSpawner spawnBuilding ) { if (tile.Building != null) { return; } if (!buildingCategoryParams.IsCompatibleTileType(tile.Type)) { return; } if (!Economy.CanAfford(buildingCategoryParams.BuildCostMoney)) { return; } var enoughPlanksAvailable = this.Warehouse.IsAvailable( type: ResourceType.Plank, amount: buildingCategoryParams.BuildCostPlanks ); if (!enoughPlanksAvailable) { return; } Economy.SpendMoney(buildingCategoryParams.BuildCostMoney); this.Warehouse.Pick( type: ResourceType.Plank, amount: buildingCategoryParams.BuildCostPlanks ); var pos = this.MapToWorldMapper.GetWorldPosition( mapX: mapX, mapY: mapY, tile: tile ); spawnBuilding(pos); AbstractBuilding abstractBuilding; if (buildingCategoryParams.isProductionBuilding) { abstractBuilding = new ProductionBuilding( upkeepCost: buildingCategoryParams.UpkeepCost, resourceGenerationInterval: ( // TODO: this assumes one tick == one second (int)buildingCategoryParams.ResourceGenerationInterval ), outputResource: buildingCategoryParams.OutputResource, outputCount: buildingCategoryParams.OutputCount, inputResources: buildingCategoryParams.InputResources, efficiency: GetBuildingEfficiency( mapX: mapX, mapY: mapY, scaleTileType: ( buildingCategoryParams.EfficiencyScaleTileType ), scaleMinNeighbors: ( buildingCategoryParams.EfficiencyScaleMinNeighbors ), scaleMaxNeighbors: ( buildingCategoryParams.EfficiencyScaleMaxNeighbors ) ), areResourcesAvailable: this.Warehouse.IsAvailable, pickResources: this.Warehouse.Pick ); abstractBuilding.ResourcesProduced += (sender, args) => { var senderBuilding = (ProductionBuilding)sender; this.Warehouse.Store( type: senderBuilding.OutputResource, amount: senderBuilding.OutputCount ); }; } else { abstractBuilding = new HousingBuilding(0); } tile.Building = abstractBuilding; }
public void Initialize(ResourceManager resourceManager, JobManager jobManager, HousingBuilding home) { Initialize(resourceManager, jobManager, 0f, home); }
public void AssignToHome(HousingBuilding home) { _home = home; }