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); }
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); }