示例#1
0
        // Copied from ResidentialBuildingAI
        private static int GetResidentRequirement(ImmaterialResourceManager.Resource resource, ref Citizen citizen)
        {
            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                return(Citizen.GetHealthCareRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.DeathCare:
                return(Citizen.GetDeathCareRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.PoliceDepartment:
                return(Citizen.GetPoliceDepartmentRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.FireDepartment:
                return(Citizen.GetFireDepartmentRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.Entertainment:
                return(Citizen.GetEntertainmentRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.PublicTransport:
                return(Citizen.GetTransportRequirement(Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age)));

            case ImmaterialResourceManager.Resource.PostService:
                return(Citizen.GetMailAccumulation(citizen.EducationLevel));

            case ImmaterialResourceManager.Resource.EducationElementary:
            {
                Citizen.AgePhase agePhase3 = Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age);
                if (agePhase3 < Citizen.AgePhase.Teen0)
                {
                    return(Citizen.GetEducationRequirement(agePhase3));
                }
                return(0);
            }

            case ImmaterialResourceManager.Resource.EducationHighSchool:
            {
                Citizen.AgePhase agePhase2 = Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age);
                if (agePhase2 >= Citizen.AgePhase.Teen0 && agePhase2 < Citizen.AgePhase.Young0)
                {
                    return(Citizen.GetEducationRequirement(agePhase2));
                }
                return(0);
            }

            case ImmaterialResourceManager.Resource.EducationUniversity:
            {
                Citizen.AgePhase agePhase = Citizen.GetAgePhase(citizen.EducationLevel, citizen.Age);
                if (agePhase >= Citizen.AgePhase.Young0)
                {
                    return(Citizen.GetEducationRequirement(agePhase));
                }
                return(0);
            }

            default:
                return(100);
            }
        }
 public override int GetResourceRate(ushort buildingID, ref Building data, ImmaterialResourceManager.Resource resource)
 {
     if (resource == ImmaterialResourceManager.Resource.NoisePollution)
     {
         return(this.m_noiseAccumulation);
     }
     return(base.GetResourceRate(buildingID, ref data, resource));
 }
        public void CheckLocalResource(ImmaterialResourceManager.Resource resource, Vector3 position, out int local)
        {
            int num  = Mathf.Clamp((int)(position.x / 38.4f + HALFGRID), 0, GRID - 1);
            int num2 = Mathf.Clamp((int)(position.z / 38.4f + HALFGRID), 0, GRID - 1);
            int num3 = (int)((num2 * GRID + num) * 24 + resource);

            local = (int)m_localFinalResources[num3];
        }
        private void SetEffectChart(int position, ImmaterialResourceManager.Resource resource)
        {
            try
            {
                int   resourceKey              = (int)resource;
                float resourceEffect           = _effectsOnZonedBuilding[resourceKey];
                float resourceMaxEffect        = _maxEffectsOnZonedBuilding[resourceKey];
                float resourceEffectPercentage = resourceEffect / resourceMaxEffect;

                Color32 colorRed    = new Color32(255, 0, 0, 128);
                Color32 colorYellow = new Color32(255, 255, 0, 128);
                Color32 colorGreen  = new Color32(0, 255, 0, 128);
                Color32 color;

                if (resourceEffectPercentage > 0.66f)
                {
                    color = IsEffectPositive(resource) ? colorGreen : colorRed;
                }
                else if (resourceEffectPercentage > 0.33f)
                {
                    color = IsEffectPositive(resource) ? colorYellow : colorRed;
                }
                else
                {
                    color = IsEffectPositive(resource) ? colorRed : colorRed;
                }

                _effectCharts[position].GetSlice(0).outterColor = color;
                _effectCharts[position].GetSlice(0).innerColor  = color;

                _effectCharts[position].SetValues(resourceEffectPercentage, 1 - resourceEffectPercentage);
                _effectCharts[position].tooltip        = GetEffectLongName(resource);
                _effectCharts[position].objectUserData = resource;

                _effectOverlays[position].text     = $"{Math.Round(resourceEffectPercentage * 100f),1}%";
                _effectOverlays[position].position = new Vector3(_effectCharts[position].width / 2f - _effectOverlays[position].width / 2f + 3f, _effectOverlays[position].height / 2f - 29.5f);

                if (ModConfig.Instance.ExtendedPanelChartHelp is "Icon")
                {
                    _effectIcons[position].spriteName = GetEffectSprite(resource);
                    _effectIcons[position].position   = new Vector3(_effectCharts[position].width / 2f - _effectIcons[position].width / 2f, _effectIcons[position].height / 2f - 50f);
                }
                else
                {
                    _effectLegends[position].text     = GetEffectShortName(resource);
                    _effectLegends[position].position = new Vector3(_effectCharts[position].width / 2f - _effectLegends[position].width / 2f, _effectLegends[position].height / 2f - 55f);
                }
            }
            catch (Exception e)
            {
                Debug.Log("[Show It!] ZonedBuildingExtenderPanel:SetEffectChart -> Exception: " + e.Message);
            }
        }
        public int AddResource(ImmaterialResourceManager.Resource resource, int rate, Vector3 position, float radius)
        {
            //begin mod
            if (_buildingThemesPositionField != null)
            {
                if (resource == ImmaterialResourceManager.Resource.Abandonment)
                {
                    _buildingThemesPositionField.SetValue(null, position);
                }
            }
            //end mod

            if (rate == 0)
            {
                return(0);
            }
            float num  = Mathf.Max(0f, Mathf.Min(radius, 19.2f));
            float num2 = Mathf.Max(38.4f, radius + 19.2f);
            int   num3 = Mathf.Max((int)((position.x - radius) / 38.4f + HALFGRID), 2);
            int   num4 = Mathf.Max((int)((position.z - radius) / 38.4f + HALFGRID), 2);
            int   num5 = Mathf.Min((int)((position.x + radius) / 38.4f + HALFGRID), GRID - 3);
            int   num6 = Mathf.Min((int)((position.z + radius) / 38.4f + HALFGRID), GRID - 3);

            for (int i = num4; i <= num6; i++)
            {
                float num7 = ((float)i - HALFGRID + 0.5f) * 38.4f - position.z;
                for (int j = num3; j <= num5; j++)
                {
                    float num8 = ((float)j - HALFGRID + 0.5f) * 38.4f - position.x;
                    float num9 = num7 * num7 + num8 * num8;
                    if (num9 < num2 * num2)
                    {
                        int num10 = rate;
                        if (num9 > num * num)
                        {
                            float num11 = Mathf.Clamp01((num2 - Mathf.Sqrt(num9)) / (num2 - num));
                            num10 = Mathf.RoundToInt((float)num10 * num11);
                        }
                        int num12 = (int)((i * GRID + j) * 24 + resource);
                        AddResource(ImmaterialResourceManager.instance, ref m_localTempResources[num12], num10);
                    }
                }
            }
            return(rate);
        }
示例#6
0
        // Detours

        public int AddResource(ImmaterialResourceManager.Resource resource, int rate, Vector3 positionArg, float radius)
        {
            if (Debugger.Enabled && debugCounter < 10)
            {
                debugCounter++;
                Debugger.Log("Building Themes: Detoured ImmaterialResource.AddResource was called.");
            }

            // Catch the position of the abandoned building
            if (resource == ImmaterialResourceManager.Resource.Abandonment)
            {
                BuildingThemesMod.position = positionArg;
            }

            // Call the original method
            RedirectionHelper.RevertRedirect(_ImmaterialResourceManager_AddResource_original, _ImmaterialResourceManager_AddResource_state);
            var result = Singleton <ImmaterialResourceManager> .instance.AddResource(resource, rate, positionArg, radius);

            RedirectionHelper.RedirectCalls(_ImmaterialResourceManager_AddResource_original, _ImmaterialResourceManager_AddResource_detour);

            return(result);
        }
示例#7
0
        public double GetServiceScore(int resourceRate, ImmaterialResourceManager.Resource resource, ItemClass.Zone zone, ref int maxLimit)
        {
            if (zone == ItemClass.Zone.ResidentialHigh || zone == ItemClass.Zone.ResidentialLow || zone == ItemClass.Zone.CommercialHigh || zone == ItemClass.Zone.CommercialLow)
            {
                switch (resource)
                {
                case ImmaterialResourceManager.Resource.NoisePollution:
                case ImmaterialResourceManager.Resource.CrimeRate:
                    maxLimit = 100;
                    return(ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 10, 100, 0, 100));

                case ImmaterialResourceManager.Resource.FireHazard:
                    maxLimit = 100;
                    return(ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 50, 100, 10, 50));

                case ImmaterialResourceManager.Resource.Abandonment:
                    maxLimit = 50;
                    return(ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 15, 50, 100, 200));
                }
            }
            maxLimit = 500;
            return(ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 100, 500, 50, 100));
        }
 private static bool CanShowZonedResource(ImmaterialResourceManager.Resource res, ItemClass.Zone zone)
 => res == ImmaterialResourceManager.Resource.EducationElementary ||
 res == ImmaterialResourceManager.Resource.EducationHighSchool ||
 res == ImmaterialResourceManager.Resource.EducationUniversity ||
 res == ImmaterialResourceManager.Resource.HealthCare ||
 res == ImmaterialResourceManager.Resource.FireDepartment ||
 res == ImmaterialResourceManager.Resource.PoliceDepartment ||
 res == ImmaterialResourceManager.Resource.PublicTransport ||
 res == ImmaterialResourceManager.Resource.DeathCare ||
 res == ImmaterialResourceManager.Resource.Entertainment ||
 res == ImmaterialResourceManager.Resource.CrimeRate ||
 res == ImmaterialResourceManager.Resource.FireHazard ||
 res == ImmaterialResourceManager.Resource.PostService ||
 zone != ItemClass.Zone.ResidentialLow && zone != ItemClass.Zone.ResidentialHigh &&
 res == ImmaterialResourceManager.Resource.CargoTransport ||
 Singleton <LoadingManager> .instance.SupportsExpansion(Expansion.NaturalDisasters) &&
 (res == ImmaterialResourceManager.Resource.DisasterCoverage ||
  res == ImmaterialResourceManager.Resource.EarthquakeCoverage ||
  res == ImmaterialResourceManager.Resource.FirewatchCoverage ||
  res == ImmaterialResourceManager.Resource.RadioCoverage) ||
 Singleton <LoadingManager> .instance.SupportsExpansion(Expansion.Parks) &&
 (zone == ItemClass.Zone.ResidentialLow || zone == ItemClass.Zone.ResidentialHigh) &&
 (res == ImmaterialResourceManager.Resource.Attractiveness ||
  res == ImmaterialResourceManager.Resource.TourCoverage);
示例#9
0
        // Copied from ResidentialBuildingAI
        private static int GetAverageResidentRequirement(ushort buildingID, ref Building data, ImmaterialResourceManager.Resource resource)
        {
            CitizenManager instance = Singleton <CitizenManager> .instance;
            uint           num      = data.m_citizenUnits;
            int            num2     = 0;
            int            num3     = 0;
            int            num4     = 0;

            while (num != 0)
            {
                uint nextUnit = instance.m_units.m_buffer[num].m_nextUnit;
                if ((instance.m_units.m_buffer[num].m_flags & CitizenUnit.Flags.Home) != 0)
                {
                    int num5 = 0;
                    int num6 = 0;
                    for (int i = 0; i < 5; i++)
                    {
                        uint citizen = instance.m_units.m_buffer[num].GetCitizen(i);
                        if (citizen != 0 && !instance.m_citizens.m_buffer[citizen].Dead)
                        {
                            num5 += GetResidentRequirement(resource, ref instance.m_citizens.m_buffer[citizen]);
                            num6++;
                        }
                    }
                    if (num6 == 0)
                    {
                        num3 += 100;
                        num4++;
                    }
                    else
                    {
                        num3 += num5;
                        num4 += num6;
                    }
                }
                num = nextUnit;
                if (++num2 > 524288)
                {
                    break;
                }
            }
            if (num4 != 0)
            {
                return((num3 + (num4 >> 1)) / num4);
            }
            return(0);
        }
示例#10
0
        public static int GetMaxEffect(ImmaterialResourceManager.Resource resource)
        {
            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                return(100);

            case ImmaterialResourceManager.Resource.FireDepartment:
            case ImmaterialResourceManager.Resource.PoliceDepartment:
            case ImmaterialResourceManager.Resource.EducationElementary:
            case ImmaterialResourceManager.Resource.EducationHighSchool:
            case ImmaterialResourceManager.Resource.EducationUniversity:
                return(40);

            case ImmaterialResourceManager.Resource.DeathCare:
                return(20);

            case ImmaterialResourceManager.Resource.PublicTransport:
                return(40);

            case ImmaterialResourceManager.Resource.NoisePollution:
                return(100);

            case ImmaterialResourceManager.Resource.CrimeRate:
                return(100);

            case ImmaterialResourceManager.Resource.Health:
            case ImmaterialResourceManager.Resource.Wellbeing:
                return(50);

            case ImmaterialResourceManager.Resource.Density:
                return(0);

            case ImmaterialResourceManager.Resource.Entertainment:
                return(60);

            case ImmaterialResourceManager.Resource.LandValue:
            case ImmaterialResourceManager.Resource.Attractiveness:
            case ImmaterialResourceManager.Resource.Coverage:
                return(0);

            case ImmaterialResourceManager.Resource.FireHazard:
                return(50);

            case ImmaterialResourceManager.Resource.Abandonment:
                return(20);

            case ImmaterialResourceManager.Resource.CargoTransport:
                return(0);

            case ImmaterialResourceManager.Resource.RadioCoverage:
                return(25);

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                return(25);

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                return(25);

            case ImmaterialResourceManager.Resource.TourCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.PostService:
                return(10);

            case ImmaterialResourceManager.Resource.None:
                return(0);

            default:
                return(0);
            }
        }
示例#11
0
 public override void GetImmaterialResourceRadius(ushort buildingID, ref Building data, out ImmaterialResourceManager.Resource resource1, out float radius1, out ImmaterialResourceManager.Resource resource2, out float radius2)
 {
     resource1 = ImmaterialResourceManager.Resource.None;
     radius1   = 0f;
     resource2 = ImmaterialResourceManager.Resource.None;
     radius2   = 0f;
 }
        private void GetEffectInfoModes(ImmaterialResourceManager.Resource resource, out InfoManager.InfoMode infoMode, out InfoManager.SubInfoMode subInfoMode)
        {
            infoMode    = InfoManager.InfoMode.LandValue;
            subInfoMode = InfoManager.SubInfoMode.Default;

            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                infoMode    = InfoManager.InfoMode.Health;
                subInfoMode = InfoManager.SubInfoMode.HealthCare;
                break;

            case ImmaterialResourceManager.Resource.FireDepartment:
                infoMode    = InfoManager.InfoMode.FireSafety;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.PoliceDepartment:
                infoMode    = InfoManager.InfoMode.CrimeRate;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.EducationElementary:
                infoMode    = InfoManager.InfoMode.Education;
                subInfoMode = InfoManager.SubInfoMode.ElementarySchool;
                break;

            case ImmaterialResourceManager.Resource.EducationHighSchool:
                infoMode    = InfoManager.InfoMode.Education;
                subInfoMode = InfoManager.SubInfoMode.HighSchool;
                break;

            case ImmaterialResourceManager.Resource.EducationUniversity:
                infoMode    = InfoManager.InfoMode.Education;
                subInfoMode = InfoManager.SubInfoMode.University;
                break;

            case ImmaterialResourceManager.Resource.DeathCare:
                infoMode    = InfoManager.InfoMode.Health;
                subInfoMode = InfoManager.SubInfoMode.DeathCare;
                break;

            case ImmaterialResourceManager.Resource.PublicTransport:
                infoMode    = InfoManager.InfoMode.Transport;
                subInfoMode = InfoManager.SubInfoMode.NormalTransport;
                break;

            case ImmaterialResourceManager.Resource.NoisePollution:
                infoMode    = InfoManager.InfoMode.NoisePollution;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.CrimeRate:
                infoMode    = InfoManager.InfoMode.CrimeRate;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.Health:
                infoMode    = InfoManager.InfoMode.Health;
                subInfoMode = InfoManager.SubInfoMode.HealthCare;
                break;

            case ImmaterialResourceManager.Resource.Wellbeing:
                infoMode    = InfoManager.InfoMode.Happiness;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.Density:
                infoMode    = InfoManager.InfoMode.Density;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.Entertainment:
                infoMode    = InfoManager.InfoMode.Entertainment;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.LandValue:
                infoMode    = InfoManager.InfoMode.LandValue;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.Attractiveness:
                infoMode    = InfoManager.InfoMode.Tourism;
                subInfoMode = InfoManager.SubInfoMode.Attractiveness;
                break;

            case ImmaterialResourceManager.Resource.Coverage:
                infoMode    = InfoManager.InfoMode.LandValue;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.FireHazard:
                infoMode    = InfoManager.InfoMode.FireSafety;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.Abandonment:
                infoMode    = InfoManager.InfoMode.Destruction;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.CargoTransport:
                infoMode    = InfoManager.InfoMode.Connections;
                subInfoMode = InfoManager.SubInfoMode.Import;
                break;

            case ImmaterialResourceManager.Resource.RadioCoverage:
                infoMode    = InfoManager.InfoMode.Radio;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                infoMode    = InfoManager.InfoMode.FireSafety;
                subInfoMode = InfoManager.SubInfoMode.ForestFireHazard;
                break;

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                infoMode    = InfoManager.InfoMode.DisasterDetection;
                subInfoMode = InfoManager.SubInfoMode.EarthquakeDetection;
                break;

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                infoMode    = InfoManager.InfoMode.DisasterDetection;
                subInfoMode = InfoManager.SubInfoMode.DisasterDetection;
                break;

            case ImmaterialResourceManager.Resource.TourCoverage:
                infoMode    = InfoManager.InfoMode.Tours;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.PostService:
                infoMode    = InfoManager.InfoMode.Post;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            case ImmaterialResourceManager.Resource.None:
                infoMode    = InfoManager.InfoMode.LandValue;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;

            default:
                infoMode    = InfoManager.InfoMode.LandValue;
                subInfoMode = InfoManager.SubInfoMode.Default;
                break;
            }
        }
        private string GetEffectSprite(ImmaterialResourceManager.Resource resource)
        {
            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                return("ToolbarIconHealthcare");

            case ImmaterialResourceManager.Resource.FireDepartment:
                return("ToolbarIconFireDepartment");

            case ImmaterialResourceManager.Resource.PoliceDepartment:
                return("ToolbarIconPolice");

            case ImmaterialResourceManager.Resource.EducationElementary:
                return("ToolbarIconEducation");

            case ImmaterialResourceManager.Resource.EducationHighSchool:
                return("ToolbarIconEducation");

            case ImmaterialResourceManager.Resource.EducationUniversity:
                return("ToolbarIconEducation");

            case ImmaterialResourceManager.Resource.DeathCare:
                return("NotificationIconDead");

            case ImmaterialResourceManager.Resource.PublicTransport:
                return("ToolbarIconPublicTransport");

            case ImmaterialResourceManager.Resource.NoisePollution:
                return("InfoIconNoisePollution");

            case ImmaterialResourceManager.Resource.CrimeRate:
                return("InfoIconCrime");

            case ImmaterialResourceManager.Resource.Health:
                return("InfoIconHealth");

            case ImmaterialResourceManager.Resource.Wellbeing:
                return("InfoIconHappiness");

            case ImmaterialResourceManager.Resource.Density:
                return("InfoIconPopulation");

            case ImmaterialResourceManager.Resource.Entertainment:
                return("InfoIconEntertainment");

            case ImmaterialResourceManager.Resource.LandValue:
                return("InfoIconLandValue");

            case ImmaterialResourceManager.Resource.Attractiveness:
                return("InfoIconLevel");

            case ImmaterialResourceManager.Resource.Coverage:
                return("ToolbarIconZoomOutGlobe");

            case ImmaterialResourceManager.Resource.FireHazard:
                return("IconPolicySmokeDetectors");

            case ImmaterialResourceManager.Resource.Abandonment:
                return("InfoIconDestruction");

            case ImmaterialResourceManager.Resource.CargoTransport:
                return("InfoIconOutsideConnections");

            case ImmaterialResourceManager.Resource.RadioCoverage:
                return("InfoIconRadio");

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                return("InfoIconForestFire");

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return("InfoIconEarthquake");

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                return("InfoIconDisasterDetection");

            case ImmaterialResourceManager.Resource.TourCoverage:
                return("InfoIconTours");

            case ImmaterialResourceManager.Resource.PostService:
                return("InfoIconPost");

            case ImmaterialResourceManager.Resource.None:
                return("ToolbarIconHelp");

            default:
                return("ToolbarIconHelp");
            }
        }
 public override void GetImmaterialResourceRadius(ushort buildingID, ref Building data, out ImmaterialResourceManager.Resource resource1, out float radius1, out ImmaterialResourceManager.Resource resource2, out float radius2)
 {
     if (this.m_noiseAccumulation != 0)
     {
         resource1 = ImmaterialResourceManager.Resource.NoisePollution;
         radius1   = this.m_noiseRadius;
     }
     else
     {
         resource1 = ImmaterialResourceManager.Resource.None;
         radius1   = 0f;
     }
     resource2 = ImmaterialResourceManager.Resource.None;
     radius2   = 0f;
 }
示例#15
0
 public double GetServiceScore(ImmaterialResourceManager.Resource resource, ItemClass.Zone zone, ushort[] array, int num, ref int rawValue, ref int maxLimit)
 {
     rawValue = array[num + (int)resource];
     return(GetServiceScore(rawValue, resource, zone, ref maxLimit));
 }
示例#16
0
        public static int CalculateResourceEffect(ushort buildingID, ref Building data, ImmaterialResourceManager.Resource resource)
        {
            int averageResidentRequirement;
            int value;

            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
            //Debug.Log("HealthCare: " + ((float)Citizen.GetHealthLevel(data.m_health) * 0.2f * 100));
            //return (int)Math.Round((float)Citizen.GetHealthLevel(data.m_health) * 0.2f * 100);
            case ImmaterialResourceManager.Resource.FireDepartment:
            case ImmaterialResourceManager.Resource.PoliceDepartment:
            case ImmaterialResourceManager.Resource.EducationElementary:
            case ImmaterialResourceManager.Resource.EducationHighSchool:
            case ImmaterialResourceManager.Resource.EducationUniversity:
                averageResidentRequirement = GetAverageResidentRequirement(buildingID, ref data, resource);
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, averageResidentRequirement, 500, 20, 40));

            case ImmaterialResourceManager.Resource.DeathCare:
                averageResidentRequirement = GetAverageResidentRequirement(buildingID, ref data, resource);
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, averageResidentRequirement, 500, 10, 20));

            case ImmaterialResourceManager.Resource.PublicTransport:
                averageResidentRequirement = GetAverageResidentRequirement(buildingID, ref data, resource);
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, averageResidentRequirement, 500, 20, 40));

            case ImmaterialResourceManager.Resource.NoisePollution:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 10, 100, 0, 100));

            case ImmaterialResourceManager.Resource.CrimeRate:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 10, 100, 0, 100));

            case ImmaterialResourceManager.Resource.Health:
            case ImmaterialResourceManager.Resource.Wellbeing:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 60, 100, 0, 50));

            case ImmaterialResourceManager.Resource.Density:
                return(0);

            case ImmaterialResourceManager.Resource.Entertainment:
                averageResidentRequirement = GetAverageResidentRequirement(buildingID, ref data, resource);
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, averageResidentRequirement, 500, 30, 60));

            case ImmaterialResourceManager.Resource.LandValue:
            case ImmaterialResourceManager.Resource.Attractiveness:
            case ImmaterialResourceManager.Resource.Coverage:
                return(0);

            case ImmaterialResourceManager.Resource.FireHazard:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 10, 50));

            case ImmaterialResourceManager.Resource.Abandonment:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 15, 50, 10, 20));

            case ImmaterialResourceManager.Resource.CargoTransport:
                return(0);

            case ImmaterialResourceManager.Resource.RadioCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 20, 25));

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 1000, 0, 25));

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 20, 25));

            case ImmaterialResourceManager.Resource.TourCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.PostService:
                averageResidentRequirement = GetAverageResidentRequirement(buildingID, ref data, resource);
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, averageResidentRequirement, 200, 5, 10));

            case ImmaterialResourceManager.Resource.None:
                return(0);

            default:
                return(0);
            }
        }
        public static int CalculateResourceEffect(ushort buildingID, ref Building data, ImmaterialResourceManager.Resource resource)
        {
            int value;

            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
            case ImmaterialResourceManager.Resource.FireDepartment:
            case ImmaterialResourceManager.Resource.PoliceDepartment:
            case ImmaterialResourceManager.Resource.EducationElementary:
            case ImmaterialResourceManager.Resource.EducationHighSchool:
            case ImmaterialResourceManager.Resource.EducationUniversity:
            case ImmaterialResourceManager.Resource.DeathCare:
            case ImmaterialResourceManager.Resource.PublicTransport:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 500, 50, 100));

            case ImmaterialResourceManager.Resource.NoisePollution:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 10, 100, 0, 100));

            case ImmaterialResourceManager.Resource.CrimeRate:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 10, 100, 0, 100));

            case ImmaterialResourceManager.Resource.Health:
            case ImmaterialResourceManager.Resource.Wellbeing:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 60, 100, 0, 50));

            case ImmaterialResourceManager.Resource.Density:
                return(0);

            case ImmaterialResourceManager.Resource.Entertainment:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 500, 50, 100));

            case ImmaterialResourceManager.Resource.LandValue:
            case ImmaterialResourceManager.Resource.Attractiveness:
            case ImmaterialResourceManager.Resource.Coverage:
                return(0);

            case ImmaterialResourceManager.Resource.FireHazard:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 10, 50));

            case ImmaterialResourceManager.Resource.Abandonment:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 15, 50, 10, 20));

            case ImmaterialResourceManager.Resource.CargoTransport:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 500, 50, 100));

            case ImmaterialResourceManager.Resource.RadioCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 20, 25));

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 1000, 0, 25));

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 50, 100, 20, 25));

            case ImmaterialResourceManager.Resource.TourCoverage:
                return(0);

            case ImmaterialResourceManager.Resource.PostService:
                Singleton <ImmaterialResourceManager> .instance.CheckLocalResource(resource, data.m_position, out value);

                return(ImmaterialResourceManager.CalculateResourceEffect(value, 100, 500, 50, 100));

            case ImmaterialResourceManager.Resource.None:
                return(0);

            default:
                return(0);
            }
        }
 private static bool CanShowResource(ImmaterialResourceManager.Resource res)
 => res != ImmaterialResourceManager.Resource.Abandonment &&
 res != ImmaterialResourceManager.Resource.Coverage &&
 res != ImmaterialResourceManager.Resource.Density &&
 res != ImmaterialResourceManager.Resource.NoisePollution;
        public int AddObstructedResource(ImmaterialResourceManager.Resource resource, int rate, Vector3 position, float radius)
        {
            if (rate == 0)
            {
                return(0);
            }
            ushort[] finalHeights = Singleton <TerrainManager> .instance.FinalHeights;
            //begin mod
            for (int index = 0; index < GRID; ++index)
            {
                //end mod
                m_tempSectorSlopes[index]    = -100f;
                m_tempSectorDistances[index] = 0.0f;
            }
            float num1 = radius * 0.5f;
            float num2 = Mathf.Max(38.4f, radius + 19.2f);
            int   num3 = (int)resource;
            //begin mod
            int num4 = Mathf.Clamp((int)((double)position.x / 38.4000015258789 + HALFGRID), 2, GRID - 3);
            //end mod
            int num5 = num4;
            //begin mod
            int num6 = Mathf.Clamp((int)((double)position.z / 38.4000015258789 + HALFGRID), 2, GRID - 3);
            //end mod
            int num7 = num6;
            //begin mod
            float num8 = position.x - (float)(((double)num4 - HALFGRID + 0.5) * 38.4000015258789);
            float num9 = position.z - (float)(((double)num6 - HALFGRID + 0.5) * 38.4000015258789);

            //end mod
            if ((double)num8 > 9.60000038146973)
            {
                //begin mod
                num5 = Mathf.Min(num5 + 1, GRID - 3);
            }
            //end mod
            else if ((double)num8 < -9.60000038146973)
            {
                num4 = Mathf.Max(num4 - 1, 2);
            }
            if ((double)num9 > 9.60000038146973)
            {
                //begin mod
                num7 = Mathf.Min(num7 + 1, GRID - 3);
            }
            //end mod
            else if ((double)num9 < -9.60000038146973)
            {
                num6 = Mathf.Max(num6 - 1, 2);
            }
            int  num10 = num6;
            int  num11 = num7;
            int  num12 = num10 + 1;
            int  num13 = num11 - 1;
            int  num14 = 0;
            bool flag;

            do
            {
                flag = false;
                float num15 = (float)(38.4000015258789 * (0.75 + (double)num14++));
                float num16 = num15 * num15;
                for (int index1 = num10; index1 <= num11; ++index1)
                {
                    int index2 = index1 > num6 ? index1 : num6 - index1 + num10;
                    //begin mod
                    float num17 = (float)(((double)index2 - HALFGRID + 0.5) * 38.4000015258789);
                    //end mod
                    float y     = num17 - position.z;
                    int   num18 = Mathf.Clamp(Mathf.RoundToInt((float)((double)num17 / 16.0 + 540.0)), 0, 1080);
                    int   a1    = num4;
                    int   a2    = num5;
                    if (index2 >= num12 && index2 <= num13)
                    {
                        a1 = Mathf.Min(a1, m_tempCircleMinX[index2] - 1);
                        a2 = Mathf.Max(a2, m_tempCircleMaxX[index2] + 1);
                    }
                    for (int index3 = a1; index3 >= 2; a1 = index3--)
                    {
                        //begin mod
                        float num19 = (float)(((double)index3 - HALFGRID + 0.5) * 38.4000015258789);
                        //end mod
                        float x     = num19 - position.x;
                        int   num20 = Mathf.Clamp(Mathf.RoundToInt((float)((double)num19 / 16.0 + 540.0)), 0, 1080);
                        float f1    = (float)((double)y * (double)y + (double)x * (double)x);
                        if ((a1 == index3 || (double)f1 < (double)num16) && (double)f1 < (double)num2 * (double)num2)
                        {
                            float b1     = Mathf.Sqrt(f1);
                            float num21  = (float)rate;
                            float num22  = (1f / 64f * (float)finalHeights[num18 * 1081 + num20] - position.y) / Mathf.Max(1f, b1);
                            float num23  = Mathf.Atan2(y, x) * 40.74366f;
                            float num24  = Mathf.Min((float)(38.4000015258789 / (double)Mathf.Max(1f, b1) * 20.3718318939209), 64f); //TODO: 64: halfgrid/2 ??
                            int   num25  = Mathf.RoundToInt(num23 - num24) & (int)byte.MaxValue;
                            int   num26  = Mathf.RoundToInt(num23 + num24) & (int)byte.MaxValue;
                            float num27  = 0.0f;
                            float b2     = 0.0f;
                            int   index4 = num25;
                            while (true)
                            {
                                float num28 = m_tempSectorSlopes[index4];
                                float num29 = m_tempSectorDistances[index4];
                                float num30 = Mathf.Clamp(b1 - num29, 1f, 38.4f);
                                num27 += (num28 - num22) * num30;
                                b2    += num30;
                                if ((double)num22 > (double)num28)
                                {
                                    m_tempSectorSlopes[index4]    = num22;
                                    m_tempSectorDistances[index4] = b1;
                                }
                                if (index4 != num26)
                                {
                                    index4 = index4 + 1 & (int)byte.MaxValue;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            float num31 = num27 / Mathf.Max(1f, b2);
                            float f2    = num21 * (float)(1.5 / (double)Mathf.Max(1f, (float)((double)num31 * 20.0 + 2.625)) - 0.5);
                            if ((double)f2 > 0.0)
                            {
                                if ((double)b1 > (double)num1)
                                {
                                    f2 *= Mathf.Clamp01((float)(((double)num2 - (double)b1) / ((double)num2 - (double)num1)));
                                }
                                //begin mod
                                this.AddResource(ref m_localTempResources[(index2 * GRID + index3) * 24 + num3], Mathf.RoundToInt(f2));
                                //end mod
                            }
                            flag = true;
                        }
                        if ((double)f1 >= (double)num16)
                        {
                            break;
                        }
                    }
                    //begin mod
                    for (int index3 = a2; index3 <= GRID - 3; a2 = index3++)
                    {
                        float num19 = (float)(((double)index3 - HALFGRID + 0.5) * 38.4000015258789);
                        //end mod
                        float x     = num19 - position.x;
                        int   num20 = Mathf.Clamp(Mathf.RoundToInt((float)((double)num19 / 16.0 + 540.0)), 0, 1080);
                        float f1    = (float)((double)y * (double)y + (double)x * (double)x);
                        if ((a2 == index3 || (double)f1 < (double)num16) && (index3 != num4 && (double)f1 < (double)num2 * (double)num2))
                        {
                            float b1     = Mathf.Sqrt(f1);
                            float num21  = (float)rate;
                            float num22  = (1f / 64f * (float)finalHeights[num18 * 1081 + num20] - position.y) / Mathf.Max(1f, b1);
                            float num23  = Mathf.Atan2(y, x) * 40.74366f;
                            float num24  = Mathf.Min((float)(38.4000015258789 / (double)Mathf.Max(1f, b1) * 20.3718318939209), 64f); //TODO: 64: halfgrid/2 ??
                            int   num25  = Mathf.RoundToInt(num23 - num24) & (int)byte.MaxValue;
                            int   num26  = Mathf.RoundToInt(num23 + num24) & (int)byte.MaxValue;
                            float num27  = 0.0f;
                            float b2     = 0.0f;
                            int   index4 = num25;
                            while (true)
                            {
                                float num28 = m_tempSectorSlopes[index4];
                                float num29 = m_tempSectorDistances[index4];
                                float num30 = Mathf.Clamp(b1 - num29, 1f, 38.4f);
                                num27 += (num28 - num22) * num30;
                                b2    += num30;
                                if ((double)num22 > (double)num28)
                                {
                                    m_tempSectorSlopes[index4]    = num22;
                                    m_tempSectorDistances[index4] = b1;
                                }
                                if (index4 != num26)
                                {
                                    index4 = index4 + 1 & (int)byte.MaxValue;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            float num31 = num27 / Mathf.Max(1f, b2);
                            float f2    = num21 * (float)(1.5 / (double)Mathf.Max(1f, (float)((double)num31 * 20.0 + 2.625)) - 0.5);
                            if ((double)f2 > 0.0)
                            {
                                if ((double)b1 > (double)num1)
                                {
                                    f2 *= Mathf.Clamp01((float)(((double)num2 - (double)b1) / ((double)num2 - (double)num1)));
                                }
                                //begin mod
                                this.AddResource(ref m_localTempResources[(index2 * GRID + index3) * 24 + num3], Mathf.RoundToInt(f2));
                                //end mod
                            }
                            flag = true;
                        }
                        if ((double)f1 >= (double)num16)
                        {
                            break;
                        }
                    }
                    m_tempCircleMinX[index2] = a1;
                    m_tempCircleMaxX[index2] = a2;
                }
                num12 = num10;
                num13 = num11;
                if (num10 > 2)
                {
                    --num10;
                }
                //begin mod
                if (num11 < GRID - 3)
                {
                    //end mod
                    ++num11;
                }
            }while (flag);
            return(rate);
        }
        private bool IsEffectPositive(ImmaterialResourceManager.Resource resource)
        {
            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                return(true);

            case ImmaterialResourceManager.Resource.FireDepartment:
                return(true);

            case ImmaterialResourceManager.Resource.PoliceDepartment:
                return(true);

            case ImmaterialResourceManager.Resource.EducationElementary:
                return(true);

            case ImmaterialResourceManager.Resource.EducationHighSchool:
                return(true);

            case ImmaterialResourceManager.Resource.EducationUniversity:
                return(true);

            case ImmaterialResourceManager.Resource.DeathCare:
                return(true);

            case ImmaterialResourceManager.Resource.PublicTransport:
                return(true);

            case ImmaterialResourceManager.Resource.NoisePollution:
                return(false);

            case ImmaterialResourceManager.Resource.CrimeRate:
                return(false);

            case ImmaterialResourceManager.Resource.Health:
                return(true);

            case ImmaterialResourceManager.Resource.Wellbeing:
                return(true);

            case ImmaterialResourceManager.Resource.Density:
                return(true);

            case ImmaterialResourceManager.Resource.Entertainment:
                return(true);

            case ImmaterialResourceManager.Resource.LandValue:
                return(true);

            case ImmaterialResourceManager.Resource.Attractiveness:
                return(true);

            case ImmaterialResourceManager.Resource.Coverage:
                return(true);

            case ImmaterialResourceManager.Resource.FireHazard:
                return(false);

            case ImmaterialResourceManager.Resource.Abandonment:
                return(false);

            case ImmaterialResourceManager.Resource.CargoTransport:
                return(true);

            case ImmaterialResourceManager.Resource.RadioCoverage:
                return(true);

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                return(true);

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return(true);

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                return(true);

            case ImmaterialResourceManager.Resource.TourCoverage:
                return(true);

            case ImmaterialResourceManager.Resource.PostService:
                return(true);

            case ImmaterialResourceManager.Resource.None:
                return(false);

            default:
                return(false);
            }
        }
        private string GetEffectLongName(ImmaterialResourceManager.Resource resource)
        {
            switch (resource)
            {
            case ImmaterialResourceManager.Resource.HealthCare:
                return("Health Care");

            case ImmaterialResourceManager.Resource.FireDepartment:
                return("Fire Department");

            case ImmaterialResourceManager.Resource.PoliceDepartment:
                return("Police Department");

            case ImmaterialResourceManager.Resource.EducationElementary:
                return("Elementary");

            case ImmaterialResourceManager.Resource.EducationHighSchool:
                return("High School");

            case ImmaterialResourceManager.Resource.EducationUniversity:
                return("University");

            case ImmaterialResourceManager.Resource.DeathCare:
                return("Death Care");

            case ImmaterialResourceManager.Resource.PublicTransport:
                return("Public Transport");

            case ImmaterialResourceManager.Resource.NoisePollution:
                return("Noise Pollution");

            case ImmaterialResourceManager.Resource.CrimeRate:
                return("Crime Rate");

            case ImmaterialResourceManager.Resource.Health:
                return("Health");

            case ImmaterialResourceManager.Resource.Wellbeing:
                return("Wellbeing");

            case ImmaterialResourceManager.Resource.Density:
                return("Density");

            case ImmaterialResourceManager.Resource.Entertainment:
                return("Entertainment");

            case ImmaterialResourceManager.Resource.LandValue:
                return("Land Value");

            case ImmaterialResourceManager.Resource.Attractiveness:
                return("Attractiveness");

            case ImmaterialResourceManager.Resource.Coverage:
                return("Coverage");

            case ImmaterialResourceManager.Resource.FireHazard:
                return("Fire Hazard");

            case ImmaterialResourceManager.Resource.Abandonment:
                return("Abandonment");

            case ImmaterialResourceManager.Resource.CargoTransport:
                return("Cargo Transport");

            case ImmaterialResourceManager.Resource.RadioCoverage:
                return("Radio Coverage");

            case ImmaterialResourceManager.Resource.FirewatchCoverage:
                return("Firewatch Coverage");

            case ImmaterialResourceManager.Resource.EarthquakeCoverage:
                return("Earthquake Coverage");

            case ImmaterialResourceManager.Resource.DisasterCoverage:
                return("Disaster Coverage");

            case ImmaterialResourceManager.Resource.TourCoverage:
                return("Tour Coverage");

            case ImmaterialResourceManager.Resource.PostService:
                return("Post Service");

            case ImmaterialResourceManager.Resource.None:
                return("None");

            default:
                return("Unknown");
            }
        }
示例#22
0
        public double GetFactor(ItemClass.Zone zone, ImmaterialResourceManager.Resource resource)
        {
            if (zone == ItemClass.Zone.Industrial)
            {
                switch (resource)
                {
                case ImmaterialResourceManager.Resource.PublicTransport:
                    return(0.3333);

                case ImmaterialResourceManager.Resource.PoliceDepartment:
                case ImmaterialResourceManager.Resource.HealthCare:
                case ImmaterialResourceManager.Resource.DeathCare:
                    return(0.2);

                case ImmaterialResourceManager.Resource.FireDepartment:
                    return(0.5);

                case ImmaterialResourceManager.Resource.Entertainment:
                case ImmaterialResourceManager.Resource.EducationElementary:
                case ImmaterialResourceManager.Resource.EducationHighSchool:
                case ImmaterialResourceManager.Resource.EducationUniversity:
                    return(0.125);

                case ImmaterialResourceManager.Resource.CargoTransport:
                    return(1);

                case ImmaterialResourceManager.Resource.NoisePollution:
                case ImmaterialResourceManager.Resource.Abandonment:
                    return(-0.1429);
                }
            }
            else if (zone == ItemClass.Zone.Office)
            {
                switch (resource)
                {
                case ImmaterialResourceManager.Resource.PublicTransport:
                    return(0.3333);

                case ImmaterialResourceManager.Resource.PoliceDepartment:
                case ImmaterialResourceManager.Resource.HealthCare:
                case ImmaterialResourceManager.Resource.DeathCare:
                case ImmaterialResourceManager.Resource.FireDepartment:
                    return(0.2);

                case ImmaterialResourceManager.Resource.Entertainment:
                    return(0.1667);

                case ImmaterialResourceManager.Resource.EducationElementary:
                case ImmaterialResourceManager.Resource.EducationHighSchool:
                case ImmaterialResourceManager.Resource.EducationUniversity:
                    return(0.1429);

                case ImmaterialResourceManager.Resource.NoisePollution:
                    return(-0.25);

                case ImmaterialResourceManager.Resource.Abandonment:
                    return(-0.3333);
                }
            }
            else
            {
                switch (resource)
                {
                case ImmaterialResourceManager.Resource.EducationElementary:
                case ImmaterialResourceManager.Resource.EducationHighSchool:
                case ImmaterialResourceManager.Resource.EducationUniversity:
                case ImmaterialResourceManager.Resource.HealthCare:
                case ImmaterialResourceManager.Resource.FireDepartment:
                case ImmaterialResourceManager.Resource.PoliceDepartment:
                case ImmaterialResourceManager.Resource.PublicTransport:
                case ImmaterialResourceManager.Resource.DeathCare:
                case ImmaterialResourceManager.Resource.Entertainment:
                case ImmaterialResourceManager.Resource.CargoTransport:
                    return(1);

                case ImmaterialResourceManager.Resource.NoisePollution:
                case ImmaterialResourceManager.Resource.CrimeRate:
                case ImmaterialResourceManager.Resource.FireHazard:
                case ImmaterialResourceManager.Resource.Abandonment:
                    return(-1);
                }
            }
            return(0);
        }
示例#23
0
 public bool IsResourcePositive(ImmaterialResourceManager.Resource resource)
 => resource != ImmaterialResourceManager.Resource.Abandonment ||
 resource != ImmaterialResourceManager.Resource.CrimeRate ||
 resource != ImmaterialResourceManager.Resource.FireHazard ||
 resource != ImmaterialResourceManager.Resource.NoisePollution;