public int AddResource(ImmaterialResourceManager.Resource resource, int rate, Vector3 position, float radius)
 {
     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) * 20 + resource);
                 AddResource(ref m_localTempResources[num12], num10);
             }
         }
     }
     return rate;
 }
コード例 #2
0
        public double GetPollutionScore(Building data, ItemClass.Zone zone)
        {
            byte resourceRate13;

            Singleton <NaturalResourceManager> .instance.CheckPollution(data.m_position, out resourceRate13);

            return(ImmaterialResourceManager.CalculateResourceEffect((int)resourceRate13, 50, 255, 50, 100));
        }
 public override float GetEventImpact(ushort buildingID, ref Building data, ImmaterialResourceManager.Resource resource, float amount)
 {
     if ((data.m_flags & (Building.Flags.Abandoned | Building.Flags.BurnedDown)) != Building.Flags.None)
     {
         return 0f;
     }
     float result = LevelUpHelper3.instance.GetEventImpact(buildingID, data, resource, amount);
     if (result != 0)
     {
         return result;
     }
     else {
         return base.GetEventImpact(buildingID, ref data, resource, amount);
     }
 }
コード例 #4
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;
        }
コード例 #5
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 CalculateLocalResources(int x, int z, ushort[] buffer, int[] global, ushort[] target, int index)
        {
            int resourceRate1  = (int)buffer[index] + global[0];
            int resourceRate2  = (int)buffer[index + 1] + global[1];
            int resourceRate3  = (int)buffer[index + 2] + global[2];
            int resourceRate4  = (int)buffer[index + 3] + global[3];
            int resourceRate5  = (int)buffer[index + 4] + global[4];
            int resourceRate6  = (int)buffer[index + 5] + global[5];
            int resourceRate7  = (int)buffer[index + 6] + global[6];
            int resourceRate8  = (int)buffer[index + 7] + global[7];
            int resourceRate9  = (int)buffer[index + 8] + global[8];
            int num1           = (int)buffer[index + 9] + global[9];
            int num2           = (int)buffer[index + 10] + global[10];
            int num3           = (int)buffer[index + 11] + global[11];
            int a              = (int)buffer[index + 12] + global[12];
            int resourceRate10 = (int)buffer[index + 13] + global[13];
            int num4           = (int)buffer[index + 14] + global[14];
            int num5           = (int)buffer[index + 15] + global[15];
            int num6           = (int)buffer[index + 16] + global[16];
            int num7           = (int)buffer[index + 17] + global[17];
            int resourceRate11 = (int)buffer[index + 18] + global[18];
            int resourceRate12 = (int)buffer[index + 19] + global[19];
            int resourceRate13 = (int)buffer[index + 20] + global[20];
            int resourceRate14 = (int)buffer[index + 21];
            int num8           = (int)buffer[index + 22] + global[22];
            int resourceRate15 = (int)buffer[index + 23] + global[23];
            //begin mod
            Rect area = new Rect((float)(((double)x - HALFGRID - 1.5) * 38.4f), (float)(((double)z - HALFGRID - 1.5) * 38.4f), 153.6f, 153.6f);
            //end mod
            float groundPollution;
            float waterProximity;

            Singleton <NaturalResourceManager> .instance.AveragePollutionAndWater(area, out groundPollution, out waterProximity);

            int num9  = (int)((double)groundPollution * 100.0);
            int num10 = (int)((double)waterProximity * 100.0);

            if (num10 > 33 && num10 < 99)
            {
                //begin mod
                area = new Rect((float)(((double)x - HALFGRID + 0.25) * 38.4000015258789), (float)(((double)z - HALFGRID + 0.25) * 38.4000015258789), 19.2f, 19.2f);
                //end mod
                Singleton <NaturalResourceManager> .instance.AveragePollutionAndWater(area, out groundPollution, out waterProximity);

                num10 = Mathf.Max(Mathf.Min(num10, (int)((double)waterProximity * 100.0)), 33);
            }
            int resourceRate16 = num7 * 2 / (resourceRate2 + 50);
            int resourceRate17;
            int resourceRate18;
            int resourceRate19;

            if (a == 0)
            {
                resourceRate17 = 0;
                resourceRate18 = 50;
                resourceRate19 = 50;
            }
            else
            {
                resourceRate17 = num1 / a;
                resourceRate18 = num2 / a;
                resourceRate19 = num3 / a;
                num6          += Mathf.Min(a, 10) * 10;
            }
            //begin mod
            int num11 = ((Singleton <GameAreaManager> .instance.PointOutOfArea(VectorUtils.X_Y(area.center)) ? 1 : 0) | (x <= 1 || x >= GRID - 2 || z <= 1 ? 1 : (z >= GRID - 2 ? 1 : 0))) == 0 ? (num4 + ImmaterialResourceManager.CalculateResourceEffect(resourceRate1, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate3, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate2, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate4, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate5, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate6, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate7, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate8, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate12, 100, 500, 50, 100) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate10, 100, 500, 100, 200) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate19, 60, 100, 0, 50) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate18, 60, 100, 0, 50) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate13, 50, 100, 20, 25) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate15, 50, 100, 20, 25) + ImmaterialResourceManager.CalculateResourceEffect(resourceRate14, 100, 1000, 0, 25) - ImmaterialResourceManager.CalculateResourceEffect(100 - resourceRate19, 60, 100, 0, 50) - ImmaterialResourceManager.CalculateResourceEffect(100 - resourceRate18, 60, 100, 0, 50) - ImmaterialResourceManager.CalculateResourceEffect(num9, 50, (int)byte.MaxValue, 50, 100) - ImmaterialResourceManager.CalculateResourceEffect(resourceRate9, 10, 100, 0, 100) - ImmaterialResourceManager.CalculateResourceEffect(resourceRate17, 10, 100, 0, 100) - ImmaterialResourceManager.CalculateResourceEffect(resourceRate16, 50, 100, 10, 50) - ImmaterialResourceManager.CalculateResourceEffect(resourceRate11, 15, 50, 100, 200) + (ImmaterialResourceManager.CalculateResourceEffect(num10, 33, 67, 300, 0) * Mathf.Max(0, 32 - num9) >> 5)) / 10 : 0;
            //end mod
            int             num12     = Mathf.Clamp(resourceRate1, 0, (int)ushort.MaxValue);
            int             num13     = Mathf.Clamp(resourceRate2, 0, (int)ushort.MaxValue);
            int             num14     = Mathf.Clamp(resourceRate3, 0, (int)ushort.MaxValue);
            int             num15     = Mathf.Clamp(resourceRate4, 0, (int)ushort.MaxValue);
            int             num16     = Mathf.Clamp(resourceRate5, 0, (int)ushort.MaxValue);
            int             num17     = Mathf.Clamp(resourceRate6, 0, (int)ushort.MaxValue);
            int             num18     = Mathf.Clamp(resourceRate7, 0, (int)ushort.MaxValue);
            int             num19     = Mathf.Clamp(resourceRate8, 0, (int)ushort.MaxValue);
            int             num20     = Mathf.Clamp(resourceRate9, 0, (int)ushort.MaxValue);
            int             num21     = Mathf.Clamp(resourceRate17, 0, (int)ushort.MaxValue);
            int             num22     = Mathf.Clamp(resourceRate18, 0, (int)ushort.MaxValue);
            int             num23     = Mathf.Clamp(resourceRate19, 0, (int)ushort.MaxValue);
            int             num24     = Mathf.Clamp(a, 0, (int)ushort.MaxValue);
            int             num25     = Mathf.Clamp(resourceRate10, 0, (int)ushort.MaxValue);
            int             landvalue = Mathf.Clamp(num11, 0, (int)ushort.MaxValue);
            int             num26     = Mathf.Clamp(num5, 0, (int)ushort.MaxValue);
            int             coverage  = Mathf.Clamp(num6, 0, (int)ushort.MaxValue);
            int             num27     = Mathf.Clamp(resourceRate16, 0, (int)ushort.MaxValue);
            int             num28     = Mathf.Clamp(resourceRate11, 0, (int)ushort.MaxValue);
            int             num29     = Mathf.Clamp(resourceRate12, 0, (int)ushort.MaxValue);
            int             num30     = Mathf.Clamp(resourceRate13, 0, (int)ushort.MaxValue);
            int             num31     = Mathf.Clamp(resourceRate14, 0, (int)ushort.MaxValue);
            int             num32     = Mathf.Clamp(num8, 0, (int)ushort.MaxValue);
            int             num33     = Mathf.Clamp(resourceRate15, 0, (int)ushort.MaxValue);
            DistrictManager instance  = Singleton <DistrictManager> .instance;
            //begin mod
            byte district = instance.GetDistrict(x * FakeDistrictManager.GRID / GRID, z * FakeDistrictManager.GRID / GRID);

            //end mod
            instance.m_districts.m_buffer[(int)district].AddGroundData(landvalue, num9, coverage);
            bool flag = false;

            if (num12 != (int)target[index])
            {
                target[index] = (ushort)num12;
                flag          = true;
            }
            if (num13 != (int)target[index + 1])
            {
                target[index + 1] = (ushort)num13;
                flag = true;
            }
            if (num14 != (int)target[index + 2])
            {
                target[index + 2] = (ushort)num14;
                flag = true;
            }
            if (num15 != (int)target[index + 3])
            {
                target[index + 3] = (ushort)num15;
                flag = true;
            }
            if (num16 != (int)target[index + 4])
            {
                target[index + 4] = (ushort)num16;
                flag = true;
            }
            if (num17 != (int)target[index + 5])
            {
                target[index + 5] = (ushort)num17;
                flag = true;
            }
            if (num18 != (int)target[index + 6])
            {
                target[index + 6] = (ushort)num18;
                flag = true;
            }
            if (num19 != (int)target[index + 7])
            {
                target[index + 7] = (ushort)num19;
                flag = true;
            }
            if (num20 != (int)target[index + 8])
            {
                target[index + 8] = (ushort)num20;
                flag = true;
            }
            if (num21 != (int)target[index + 9])
            {
                target[index + 9] = (ushort)num21;
                flag = true;
            }
            if (num22 != (int)target[index + 10])
            {
                target[index + 10] = (ushort)num22;
                flag = true;
            }
            if (num23 != (int)target[index + 11])
            {
                target[index + 11] = (ushort)num23;
                flag = true;
            }
            if (num24 != (int)target[index + 12])
            {
                target[index + 12] = (ushort)num24;
                flag = true;
            }
            if (num25 != (int)target[index + 13])
            {
                target[index + 13] = (ushort)num25;
                flag = true;
            }
            if (landvalue != (int)target[index + 14])
            {
                target[index + 14] = (ushort)landvalue;
                flag = true;
            }
            if (num26 != (int)target[index + 15])
            {
                target[index + 15] = (ushort)num26;
                flag = true;
            }
            if (coverage != (int)target[index + 16])
            {
                target[index + 16] = (ushort)coverage;
                flag = true;
            }
            if (num27 != (int)target[index + 17])
            {
                target[index + 17] = (ushort)num27;
                flag = true;
            }
            if (num28 != (int)target[index + 18])
            {
                target[index + 18] = (ushort)num28;
                flag = true;
            }
            if (num29 != (int)target[index + 19])
            {
                target[index + 19] = (ushort)num29;
                flag = true;
            }
            if (num30 != (int)target[index + 20])
            {
                target[index + 20] = (ushort)num30;
                flag = true;
            }
            if (num31 != (int)target[index + 21])
            {
                target[index + 21] = (ushort)num31;
                flag = true;
            }
            if (num32 != (int)target[index + 22])
            {
                target[index + 22] = (ushort)num32;
                flag = true;
            }
            if (num33 != (int)target[index + 23])
            {
                target[index + 23] = (ushort)num33;
                flag = true;
            }
            return(flag);
        }
コード例 #7
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);
            }
        }
コード例 #8
0
        public double GetFactor(ItemClass.Zone zone, ImmaterialResourceManager.Resource resource)
        {
            if (zone == ItemClass.Zone.ResidentialLow || zone == ItemClass.Zone.ResidentialHigh)
            {
                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:
                        return 0.1;
                    case ImmaterialResourceManager.Resource.Entertainment:
                        return 0.2;
                }
            }
            switch (resource)
            {
                case ImmaterialResourceManager.Resource.FireDepartment:
                case ImmaterialResourceManager.Resource.PoliceDepartment:
                case ImmaterialResourceManager.Resource.PublicTransport:
                    return 0.3;
                case ImmaterialResourceManager.Resource.Abandonment:
                    return -0.2;
                case ImmaterialResourceManager.Resource.Entertainment:
                    if (zone == ItemClass.Zone.Office || zone == ItemClass.Zone.CommercialHigh || zone == ItemClass.Zone.CommercialLow)
                    {
                        return 0.1;
                    }
                    break;
                case ImmaterialResourceManager.Resource.NoisePollution:
                    if (zone == ItemClass.Zone.Office || zone == ItemClass.Zone.ResidentialHigh || zone == ItemClass.Zone.ResidentialLow)
                    {
                        return -0.2;
                    }
                    break;
                case ImmaterialResourceManager.Resource.CargoTransport:
                    if (zone == ItemClass.Zone.Industrial)
                    {
                        return 0.1;
                    }
                    break;
            }

            return 0;
        }
 public void CheckTotalResource(ImmaterialResourceManager.Resource resource, out int total)
 {
     total = m_totalFinalResources[(int)resource];
 }
コード例 #10
0
 public double GetServiceScore(int resourceRate, ImmaterialResourceManager.Resource resource,ref int max)
 {
     switch (resource)
     {
         case ImmaterialResourceManager.Resource.Entertainment:
             max = 140;
             return ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 140, 340, 50, 100);
         case ImmaterialResourceManager.Resource.EducationElementary:
         case ImmaterialResourceManager.Resource.EducationHighSchool:
         case ImmaterialResourceManager.Resource.EducationUniversity:
         case ImmaterialResourceManager.Resource.PublicTransport:
             max = 130;
             return ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 65, 130, 50, 100);
         case ImmaterialResourceManager.Resource.DeathCare:
             max = 90;
             return ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 35, 90, 50, 100);
     }
     max = 210;
     return ImmaterialResourceManager.CalculateResourceEffect(resourceRate, 80, 210, 50, 100);
 }
コード例 #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)
 {
     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;
 }
 public void CheckResource(ImmaterialResourceManager.Resource resource, Vector3 position, out int local, out int total)
 {
     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) * 20 + resource);
     local = (int)m_localFinalResources[num3];
     total = m_totalFinalResources[(int)resource];
 }
コード例 #13
0
 internal float GetEventImpact(ushort buildingID, Building data, ImmaterialResourceManager.Resource resource, float amount)
 {
     var factor = GetFactor(data.Info.m_class.GetZone(), resource);
     var sign = 1;
     if (factor == 0)
     {
         return 0;
     }
     else if (factor < 0)
     {
         sign = -1;
     }
     int num;
     Singleton<ImmaterialResourceManager>.instance.CheckLocalResource(resource, data.m_position, out num);
     int max = 0;
     var after = GetServiceScore(Mathf.RoundToInt(amount) + num, resource,ref max);
     var before = GetServiceScore(num, resource, ref max);
     return sign * Mathf.Clamp((float)(after - before) / 100, -1f, 1f);
 }
コード例 #14
0
 private string GetName(ImmaterialResourceManager.Resource res)
 {
     switch (res)
     {
         case ImmaterialResourceManager.Resource.FireDepartment:
             return "Fire";
         case ImmaterialResourceManager.Resource.PoliceDepartment:
             return "Police";
         case ImmaterialResourceManager.Resource.PublicTransport:
             return "Transp.";
         case ImmaterialResourceManager.Resource.Abandonment:
             return "Abandonment";
         case ImmaterialResourceManager.Resource.Entertainment:
             return "Parks";
         case ImmaterialResourceManager.Resource.NoisePollution:
             return "Noise";
         case ImmaterialResourceManager.Resource.CargoTransport:
             return "Cargo";
         case ImmaterialResourceManager.Resource.EducationElementary:
             return "Elem.";
         case ImmaterialResourceManager.Resource.EducationHighSchool:
             return "High Sch.";
         case ImmaterialResourceManager.Resource.EducationUniversity:
             return "Uni.";
         case ImmaterialResourceManager.Resource.HealthCare:
             return "Health";
         case ImmaterialResourceManager.Resource.DeathCare:
             return "Death";
     }
     return res.ToString();
 }
コード例 #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 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);
        }
コード例 #17
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;
        }
コード例 #18
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);
            }
        }
 private static void AddResource(ImmaterialResourceManager manager, ref ushort buffer, int rate)
 {
     UnityEngine.Debug.Log($"{manager}-{buffer}-{rate}");
 }
 public int AddResource(ImmaterialResourceManager.Resource resource, int rate)
 {
     if (rate == 0)
     {
         return 0;
     }
     AddResource(ref m_globalTempResources[(int)resource], rate);
     return rate;
 }
コード例 #21
0
 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);
 }