Exemplo n.º 1
0
        public override int OnCalculateResidentialDemand(int originalDemand)
        {
            int finalDemand = originalDemand;

            if (ExperimentsToggle.ImprovedResidentialDemand && !ExperimentsToggle.GhostMode)
            {
                DistrictManager       _districtManager           = Singleton <DistrictManager> .instance;
                DistrictPrivateData   _residentialData           = _districtManager.m_districts.m_buffer[0].m_residentialData;
                DistrictPrivateData   _industrialData            = _districtManager.m_districts.m_buffer[0].m_industrialData;
                DistrictPrivateData   _commercialData            = _districtManager.m_districts.m_buffer[0].m_commercialData;
                DistrictPrivateData   _playerData                = _districtManager.m_districts.m_buffer[0].m_playerData;
                DistrictEducationData _uneducatedData            = _districtManager.m_districts.m_buffer[0].m_educated0Data;
                DistrictEducationData _primarySchoolEducatedData = _districtManager.m_districts.m_buffer[0].m_educated1Data;
                DistrictEducationData _highSchoolEducatedData    = _districtManager.m_districts.m_buffer[0].m_educated2Data;
                DistrictEducationData _universityEducatedData    = _districtManager.m_districts.m_buffer[0].m_educated3Data;

                uint _totalHousePositions     = _residentialData.m_finalHomeOrWorkCount;
                uint _emptyHousePositions     = _residentialData.m_finalEmptyCount;
                uint _homelessPeople          = _uneducatedData.m_finalHomeless + _primarySchoolEducatedData.m_finalHomeless + _highSchoolEducatedData.m_finalHomeless + _universityEducatedData.m_finalHomeless;
                uint _emptyWorkplacePositions = _commercialData.m_finalEmptyCount + _industrialData.m_finalEmptyCount + _playerData.m_finalEmptyCount;
                uint _totalWorkplacePositions = _commercialData.m_finalHomeOrWorkCount + _industrialData.m_finalHomeOrWorkCount + _playerData.m_finalHomeOrWorkCount;

                if (_emptyHousePositions != 0 && _totalHousePositions != 0 && _emptyWorkplacePositions != 0 && _totalWorkplacePositions != 0)
                {
                    float _emptyJobPercentage   = ((float)_emptyWorkplacePositions / (float)_totalWorkplacePositions) * 100f;
                    float _emptyHomesPercentage = ((float)_emptyHousePositions / (float)_totalHousePositions) * 100f;

                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Empty job percentage: " + _emptyJobPercentage);
                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Empty homes percentage: " + _emptyHomesPercentage);
                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Empty houses: " + _emptyHousePositions);
                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Homeless: " + _homelessPeople);

                    finalDemand = (Mathf.RoundToInt(_emptyJobPercentage * 8f) + (int)_homelessPeople) /*- Mathf.RoundToInt(_emptyHomesPercentage)*/;

                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Final residential demand: " + finalDemand);
                }
            }
            else
            {
                CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Using legacy residential demand");
            }

            return(finalDemand);
        }
Exemplo n.º 2
0
        public override int OnCalculateWorkplaceDemand(int originalDemand)
        {
            int finalDemand = originalDemand;

            if (ExperimentsToggle.ImprovedDemand && !ExperimentsToggle.GhostMode)
            {
                DistrictManager     _districtManager = Singleton <DistrictManager> .instance;
                DistrictPrivateData _commercialData  = _districtManager.m_districts.m_buffer[0].m_commercialData;
                DistrictPrivateData _residentialData = _districtManager.m_districts.m_buffer[0].m_residentialData;
                DistrictPrivateData _industrialData  = _districtManager.m_districts.m_buffer[0].m_industrialData;
                DistrictPrivateData _playerData      = _districtManager.m_districts.m_buffer[0].m_playerData;
                uint _emptyWorkplacePositions        = _industrialData.m_finalEmptyCount;
                uint _totalResidentialPositions      = _residentialData.m_finalHomeOrWorkCount;
                uint _totalWorkplacePositions        = _industrialData.m_finalHomeOrWorkCount;
                uint _totalJobPositions = _commercialData.m_finalHomeOrWorkCount + _industrialData.m_finalHomeOrWorkCount + _playerData.m_finalHomeOrWorkCount;

                if (_totalWorkplacePositions != 0 && _totalResidentialPositions != 0)
                {
                    float _emptyJobPercentage         = ((float)_emptyWorkplacePositions / (float)_totalWorkplacePositions) * 100f;
                    float _adjustedEmptyJobPercentage = (Mathf.Clamp(_emptyJobPercentage, 0, _maxEmptyJobs) / _maxEmptyJobs) * _activeJobInfluence;
                    int   _activeJobPercentage        = (int)_activeJobInfluence - (int)Mathf.Round(_adjustedEmptyJobPercentage);

                    float _workplaceToResidentialPercentage         = 100f - (((float)_totalJobPositions / (float)_totalResidentialPositions) * 100f);
                    float _adjustedWorkplaceToResidentialPercentage = (Mathf.Clamp(_workplaceToResidentialPercentage, -_maxJobsToResidentialDifference, _maxJobsToResidentialDifference) / _maxJobsToResidentialDifference) * _commercialToResidentialInfluence;

                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Commercial/Industrial/Player - Residential percentage: " + _workplaceToResidentialPercentage);
                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Empty industrial job positions: " + _emptyJobPercentage);

                    finalDemand  = Mathf.Clamp(_activeJobPercentage * 2, (int)-_activeJobInfluence, (int)_activeJobInfluence);
                    finalDemand += Mathf.Clamp((int)_adjustedWorkplaceToResidentialPercentage, (int)-_commercialToResidentialInfluence, (int)_commercialToResidentialInfluence);

                    CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Final industrial demand: " + finalDemand);
                }
            }
            else
            {
                CimTools.CimToolsHandler.CimToolBase.DetailedLogger.Log("Using legacy industrial demand");
            }

            return(finalDemand);
        }