Example #1
0
            /// <summary>
            /// Applied after OnSpawn runs.
            /// </summary>
            internal static void Postfix(SandboxToolParameterMenu __instance)
            {
                var settings = __instance.settings;

                settings.OnChangeDisease += delegate {
                    // Use same instance as the default handler
                    SandboxToolParameterMenu.instance?.diseaseCountSlider?.SetValue(0.0f);
                };
                __instance.diseaseCountSlider.SetValue(0.0f);
                // Mass slider no longer rounds to nearest 1 kg if typed in, only to 0.01 kg
                var massSlider = __instance.massSlider;
                var massField  = massSlider.inputField;

                massSlider.minValue     = 0.0f;
                massField.decimalPlaces = 2;
                Traverse.Create(massField).SetField("onEndEdit", (System.Action)
                                                    delegate {
                    var inputField = massSlider.inputField;
                    // Round to nearest 0.01 instead
                    float value = (Mathf.Round(100.0f * inputField.currentValue) * 0.01f).
                                  InRange(inputField.minValue, inputField.maxValue);
                    inputField.SetDisplayValue(value.ToString("F2"));
                    massSlider.slider.value = value;
                    massSlider.onValueChanged?.Invoke(value);
                });
            }
Example #2
0
 protected override void OnSpawn()
 {
     base.OnSpawn();
     ConfigureElementSelector();
     ConfigureDiseaseSelector();
     ConfigureEntitySelector();
     SpawnSelector(entitySelector);
     SpawnSelector(elementSelector);
     SpawnSlider(brushRadiusSlider);
     SpawnSlider(noiseScaleSlider);
     SpawnSlider(noiseDensitySlider);
     SpawnSlider(massSlider);
     SpawnSlider(temperatureSlider);
     SpawnSlider(temperatureAdditiveSlider);
     SpawnSelector(diseaseSelector);
     SpawnSlider(diseaseCountSlider);
     if ((UnityEngine.Object)instance == (UnityEngine.Object)null)
     {
         instance = this;
         base.gameObject.SetActive(false);
         settings.SelectElement(ElementLoader.FindElementByHash(SimHashes.Water));
         brushRadiusSlider.SetRange(1f, 10f);
         brushRadiusSlider.slider.wholeNumbers = true;
         noiseScaleSlider.SetRange(0f, 1f);
         noiseDensitySlider.SetRange(0f, 20f);
         temperatureSlider.SetRange(Mathf.Max(instance.settings.Element.lowTemp - 10f, 1f), instance.settings.Element.highTemp + 10f);
         massSlider.SetRange(0.1f, instance.settings.Element.defaultValues.mass * 2f);
         massSlider.SetValue(settings.Mass);
         settings.SelectDisease(Db.Get().Diseases.FoodGerms);
         settings.SelectEntity(Assets.GetPrefab("MushBar".ToTag()).GetComponent <KPrefabID>());
     }
 }
Example #3
0
        /// <summary>
        /// Adds more items to the spawner list, including geysers, artifacts, and POI items.
        /// </summary>
        /// <param name="instance">The sandbox tool menu to modify.</param>
        private static void AddToSpawnerMenu(SandboxToolParameterMenu instance)
        {
            // Transpiling it is possible (and a bit faster) but way more brittle
            var selector = instance.entitySelector;
            var filters  = ListPool <SearchFilter, SandboxToolParameterMenu> .Allocate();

            filters.AddRange(selector.filters);
            // POI Props
            filters.Add(new SearchFilter(SandboxToolsStrings.FILTER_POIPROPS,
                                         (entity) => {
                var prefab = entity as KPrefabID;
                bool ok    = prefab != null;
                if (ok)
                {
                    string name = prefab.PrefabTag.Name;
                    // Include anti-entropy thermo nullifier and neural vacillator
                    // Vacillator's ID is private, we have to make do
                    ok = (name.StartsWith("Prop") && name.Length > 4 && char.IsUpper(
                              name, 4)) || name == MassiveHeatSinkConfig.ID ||
                         name == "GeneShuffler";
                }
                return(ok);
            }, null, Def.GetUISprite(Assets.GetPrefab("PropLadder"))));
            // Artifacts
            filters.Add(new SearchFilter(SandboxToolsStrings.FILTER_ARTIFACTS,
                                         (entity) => {
                var prefab = entity as KPrefabID;
                bool ok    = prefab != null;
                if (ok)
                {
                    ok = prefab.PrefabTag.Name.StartsWith("artifact_");
                }
                return(ok);
            }, null, Def.GetUISprite(Assets.GetPrefab("artifact_eggrock"))));
            // Geysers
            filters.Add(new SearchFilter(SandboxToolsStrings.FILTER_GEYSERS,
                                         (entity) => {
                var prefab = entity as KPrefabID;
                return(prefab != null && (prefab.GetComponent <Geyser>() != null || prefab.
                                          PrefabTag.Name == "OilWell"));
            }, null, Def.GetUISprite(Assets.GetPrefab("GeyserGeneric_slush_water"))));
            // TODO Vanilla/DLC code
            if (PPatchTools.GetTypeSafe("FullereneCometConfig") == null)
            {
                // Update the special filter to add other comet types
                foreach (var filter in filters)
                {
                    if (filter.Name == STRINGS.UI.SANDBOXTOOLS.FILTERS.ENTITIES.SPECIAL)
                    {
                        var oldCondition = filter.condition;
                        filter.condition = (entity) => {
                            var prefab = entity as KPrefabID;
                            return((prefab != null && prefab.GetComponent <Comet>() != null) ||
                                   oldCondition.Invoke(entity));
                        };
                    }
                }
            }
            // Add matching assets
            var options = ListPool <object, SandboxToolParameterMenu> .Allocate();

            foreach (var prefab in Assets.Prefabs)
            {
                foreach (var filter in filters)
                {
                    if (filter.condition(prefab))
                    {
                        options.Add(prefab);
                        break;
                    }
                }
            }
#if DEBUG
            PUtil.LogDebug("Added {0:D} options to spawn menu".F(options.Count));
#endif
            selector.options = options.ToArray();
            selector.filters = filters.ToArray();
            options.Recycle();
            filters.Recycle();
        }
Example #4
0
 /// <summary>
 /// Applied after ConfigureEntitySelector runs.
 /// </summary>
 internal static void Postfix(SandboxToolParameterMenu __instance)
 {
     AddToSpawnerMenu(__instance);
 }
Example #5
0
 public static void DestroyInstance()
 {
     instance = null;
 }
Example #6
0
 public static void Postfix(SandboxToolParameterMenu __instance) => __instance.brushRadiusSlider.SetRange(BrushConfigChecker.MinSize, BrushConfigChecker.MaxSize);