Ejemplo n.º 1
0
    // 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);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
 private void Die()
 {
     gameObject.SetActive(false);
     // Unregister from job
     _jobManager.RemoveWorker(this);
     // Clear buildings
     _home      = null;
     _workplace = null;
 }
Ejemplo n.º 4
0
        public void Setup(HousingBuilding home)
        {
            Home = home;

            _age       = 0;
            _happiness = 0;
            timeSinceLastAgeIncrease = 0;
            _happinessRequirements   = GetComponents <IHappinessRequirement>().ToList();
            _employed = false;
            _atHome   = true;

            Birth.Invoke(this);
        }
Ejemplo n.º 5
0
    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();
    }
Ejemplo n.º 6
0
    // 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;
    }
Ejemplo n.º 7
0
 public void Initialize(ResourceManager resourceManager, JobManager jobManager, HousingBuilding home)
 {
     Initialize(resourceManager, jobManager, 0f, home);
 }
Ejemplo n.º 8
0
 public void AssignToHome(HousingBuilding home)
 {
     _home = home;
 }