/// <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); }); }
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>()); } }
/// <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(); }
/// <summary> /// Applied after ConfigureEntitySelector runs. /// </summary> internal static void Postfix(SandboxToolParameterMenu __instance) { AddToSpawnerMenu(__instance); }
public static void DestroyInstance() { instance = null; }
public static void Postfix(SandboxToolParameterMenu __instance) => __instance.brushRadiusSlider.SetRange(BrushConfigChecker.MinSize, BrushConfigChecker.MaxSize);