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; }
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); } }
// 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; }
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); }
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); } }
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]; }
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); }
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]; }
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); }
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(); }
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); }
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); }
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; }
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; }
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); }