public void AddExposure(ExposureType exposure_type, float amount) { accumulation.TryGetValue(exposure_type.germ_id, out float value); float num = value + amount; if (num > 1f) { foreach (MinionIdentity item in Components.LiveMinionIdentities.Items) { GermExposureMonitor.Instance sMI = item.GetSMI <GermExposureMonitor.Instance>(); if (sMI.GetExposureState(exposure_type.germ_id) == GermExposureMonitor.ExposureState.Exposed) { GermExposureMonitor.Instance sMI2 = item.GetSMI <GermExposureMonitor.Instance>(); float exposureWeight = sMI2.GetExposureWeight(exposure_type.germ_id); if (exposureWeight > 0f) { exposure_candidates.Add(new WeightedExposure { weight = exposureWeight, monitor = sMI }); } } } while (num > 1f) { num -= 1f; if (exposure_candidates.Count > 0) { WeightedExposure weightedExposure = WeightedRandom.Choose(exposure_candidates, rng); exposure_candidates.Remove(weightedExposure); weightedExposure.monitor.ContractGerms(exposure_type.germ_id); } } } accumulation[exposure_type.germ_id] = num; exposure_candidates.Clear(); }
public void ConvertToMap(Chunk world, TerrainCell.SetValuesFunction SetValues, float temperatureMin, float temperatureRange, SeededRandom rnd) { Sim.DiseaseCell invalid = Sim.DiseaseCell.Invalid; for (int i = 0; i < pathElements.Count; i++) { Segment segment = pathElements[i]; Vector2 e = segment.e1; Segment segment2 = pathElements[i]; Vector2 vector = e - segment2.e0; Vector2 normalized = new Vector2(0f - vector.y, vector.x).normalized; Segment segment3 = pathElements[i]; Vector2 e2 = segment3.e0; Segment segment4 = pathElements[i]; List <Vector2I> line = ProcGen.Util.GetLine(e2, segment4.e1); for (int j = 0; j < line.Count; j++) { Vector2I vector2I = line[j]; int x = vector2I.x; Vector2I vector2I2 = line[j]; int num = Grid.XYToCell(x, vector2I2.y); if (Grid.IsValidCell(num)) { Element element = ElementLoader.FindElementByName(WeightedRandom.Choose(this.element, rnd).element); Sim.PhysicsData defaultValues = element.defaultValues; defaultValues.temperature = temperatureMin + world.heatOffset[num] * temperatureRange; SetValues(num, element, defaultValues, invalid); } for (float num2 = 0.5f; num2 <= width; num2 += 1f) { Vector2 vector2 = (Vector2)line[j] + normalized * num2; num = Grid.XYToCell((int)vector2.x, (int)vector2.y); if (Grid.IsValidCell(num)) { Element element2 = ElementLoader.FindElementByName(WeightedRandom.Choose(this.element, rnd).element); Sim.PhysicsData defaultValues2 = element2.defaultValues; defaultValues2.temperature = temperatureMin + world.heatOffset[num] * temperatureRange; SetValues(num, element2, defaultValues2, invalid); } Vector2 vector3 = (Vector2)line[j] - normalized * num2; num = Grid.XYToCell((int)vector3.x, (int)vector3.y); if (Grid.IsValidCell(num)) { Element element3 = ElementLoader.FindElementByName(WeightedRandom.Choose(this.element, rnd).element); Sim.PhysicsData defaultValues3 = element3.defaultValues; defaultValues3.temperature = temperatureMin + world.heatOffset[num] * temperatureRange; SetValues(num, element3, defaultValues3, invalid); } } } } }