Beispiel #1
0
        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;
                }
                }
            }
        }
Beispiel #2
0
        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);
                        }
                    }
                }
            }
        }