private void ApplyPlaceElementForRoom(FeatureSettings feature, string group, List <Vector2I> cells, Chunk world, SetValuesFunction SetValues, float temperatureMin, float temperatureRange, SeededRandom rnd) { if (cells != null && cells.Count != 0 && feature.HasGroup(group)) { switch (feature.ElementChoiceGroups[group].selectionMethod) { case ProcGen.Room.Selection.Weighted: case ProcGen.Room.Selection.WeightedResample: for (int j = 0; j < cells.Count; j++) { Vector2I vector2I3 = cells[j]; int x2 = vector2I3.x; Vector2I vector2I4 = cells[j]; int num2 = Grid.XYToCell(x2, vector2I4.y); if (Grid.IsValidCell(num2) && !highPriorityClaims.Contains(num2)) { WeightedSimHash oneWeightedSimHash2 = feature.GetOneWeightedSimHash(group, rnd); ElementOverride elementOverride2 = GetElementOverride(oneWeightedSimHash2.element, oneWeightedSimHash2.overrides); if (!elementOverride2.overrideTemperature) { elementOverride2.pdelement.temperature = temperatureMin + world.heatOffset[num2] * temperatureRange; } if (!elementOverride2.overrideMass) { elementOverride2.pdelement.mass = GetDensityMassForCell(world, num2, elementOverride2.mass); } SetValues(num2, elementOverride2.element, elementOverride2.pdelement, elementOverride2.dc); } } break; default: { WeightedSimHash oneWeightedSimHash = feature.GetOneWeightedSimHash(group, rnd); DebugUtil.LogArgs("Picked one: ", oneWeightedSimHash.element); for (int i = 0; i < cells.Count; i++) { Vector2I vector2I = cells[i]; int x = vector2I.x; Vector2I vector2I2 = cells[i]; int num = Grid.XYToCell(x, vector2I2.y); if (Grid.IsValidCell(num) && !highPriorityClaims.Contains(num)) { ElementOverride elementOverride = GetElementOverride(oneWeightedSimHash.element, oneWeightedSimHash.overrides); if (!elementOverride.overrideTemperature) { elementOverride.pdelement.temperature = temperatureMin + world.heatOffset[num] * temperatureRange; } if (!elementOverride.overrideMass) { elementOverride.pdelement.mass = GetDensityMassForCell(world, num, elementOverride.mass); } SetValues(num, elementOverride.element, elementOverride.pdelement, elementOverride.dc); } } break; } } } }
private void HandleSprinkleOfElement(WorldGenSettings settings, Tag targetTag, Chunk world, SetValuesFunction SetValues, float temperatureMin, float temperatureRange, SeededRandom rnd) { FeatureSettings feature = settings.GetFeature(targetTag.Name); string element = feature.GetOneWeightedSimHash("SprinkleOfElementChoices", rnd).element; Element element2 = ElementLoader.FindElementByName(element); ProcGen.Room value = null; SettingsCache.rooms.TryGetValue(targetTag.Name, out value); SampleDescriber sampleDescriber = value; Sim.PhysicsData defaultValues = element2.defaultValues; Sim.DiseaseCell invalid = Sim.DiseaseCell.Invalid; for (int i = 0; i < terrainPositions.Count; i++) { if (!(terrainPositions[i].Value != targetTag)) { float radius = rnd.RandomRange(sampleDescriber.blobSize.min, sampleDescriber.blobSize.max); Vector2 center = Grid.CellToPos2D(terrainPositions[i].Key); List <Vector2I> filledCircle = ProcGen.Util.GetFilledCircle(center, radius); for (int j = 0; j < filledCircle.Count; j++) { Vector2I vector2I = filledCircle[j]; int x = vector2I.x; Vector2I vector2I2 = filledCircle[j]; int num = Grid.XYToCell(x, vector2I2.y); if (Grid.IsValidCell(num)) { defaultValues.mass = GetDensityMassForCell(world, num, element2.defaultValues.mass); defaultValues.temperature = temperatureMin + world.heatOffset[num] * temperatureRange; SetValues(num, element2, defaultValues, invalid); } } } } }