/// <summary> /// Applied after SetTarget runs. /// </summary> internal static void Postfix(KNumberInputField ___numberInput, GameObject new_target) { float normalMax = (___numberInput == null) ? ___numberInput.maxValue : 0.0f; if (new_target != null) { var sw = new_target.GetComponent <IThresholdSwitch>(); if (sw != null && ShouldAffect(normalMax, sw)) { ___numberInput.maxValue = float.MaxValue; } } }
/// <summary> /// Applied after SetTarget runs. /// </summary> internal static void Postfix(KNumberInputField ___numberInput, GameObject new_target) { float normalMax = (___numberInput == null) ? ___numberInput.maxValue : 0.0f; if (new_target != null) { var cdp = new_target.GetComponent <CreatureDeliveryPoint>(); if (cdp != null && ShouldAffect(normalMax, cdp)) { ___numberInput.maxValue = float.MaxValue; } } }
private static void SetupInputs(NonLinearSlider slider, KNumberInputField input, NonLinearSlider.Range[] sliderRanges, float inputMin, float inputMax, int inputDecimals, Action <float> onUpdate, Func <float, float> convertSlider, Func <float, float> convertInput) { slider.onDrag += () => onUpdate(convertSlider(slider.GetValueForPercentage(slider.value))); slider.onPointerDown += () => onUpdate(convertSlider(slider.GetValueForPercentage(slider.value))); slider.onMove += () => onUpdate(convertSlider(slider.GetValueForPercentage(slider.value))); slider.minValue = 0; slider.maxValue = 100; slider.SetRanges(sliderRanges); input.onEndEdit += () => onUpdate(convertInput(input.currentValue)); input.decimalPlaces = inputDecimals; input.minValue = inputMin; input.maxValue = inputMax; input.Activate(); }
protected override void OnPrefabInit() { Log.Spam($"OnPrefabInit"); base.OnPrefabInit(); titleKey = "STRINGS.UI.UISIDESCREENS.COMBO_SENSOR_SIDESCREEN.TITLE"; var sideScreens = Traverse.Create(DetailsScreen.Instance).Field <List <DetailsScreen.SideScreenRef> >("sideScreens").Value; if (sideScreens == null) { Log.Error("No sideScreens"); return; } Traverse thresholdSwitchSideScreen = null; foreach (var sideScreen in sideScreens) { var component = sideScreen.screenPrefab?.GetComponent <ThresholdSwitchSideScreen>(); if (component != null) { thresholdSwitchSideScreen = Traverse.Create(component); break; } } if (thresholdSwitchSideScreen == null) { Log.Error("No ThresholdSwitchSideScreen"); return; } var locText = thresholdSwitchSideScreen.Field <LocText>("currentValue").Value; var aboveToggle = thresholdSwitchSideScreen.Field <KToggle>("aboveToggle").Value; var belowToggle = thresholdSwitchSideScreen.Field <KToggle>("belowToggle").Value; var thresholdSlider = thresholdSwitchSideScreen.Field <NonLinearSlider>("thresholdSlider").Value; var numberInput = thresholdSwitchSideScreen.Field <KNumberInputField>("numberInput").Value; var dummyPanel = Gui.CreatePanel(); var mainPanel = Gui.CreatePanel(); mainPanel.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); { var groupPanel = Gui.CreatePanel(parent: mainPanel); groupPanel.GetComponent <Image>().color = new Color(0, 0, 0, 0.1f); groupPanel.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); temperatureCurrent = Gui.Create <LocText>(prefab: locText.gameObject, parent: groupPanel); temperatureCurrent.FindOrAddComponent <LayoutElement>().minHeight = 20; var buttonPanel = Gui.CreatePanel(parent: groupPanel); buttonPanel.FindOrAddComponent <HorizontalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); temperatureBelow = Gui.Create <KToggle>(prefab: belowToggle.gameObject, parent: buttonPanel); temperatureAbove = Gui.Create <KToggle>(prefab: aboveToggle.gameObject, parent: buttonPanel); temperatureSlider = Gui.Create <NonLinearSlider>(prefab: thresholdSlider.gameObject, parent: groupPanel); temperatureInput = Gui.Create <KNumberInputField>(prefab: numberInput.gameObject, parent: groupPanel); temperatureInput.FindOrAddComponent <LayoutElement>().minHeight = 30; temperatureInput.transform.Find("UnitsLabel")?.DeleteObject(); } Gui.CreatePanel(parent: mainPanel).FindOrAddComponent <LayoutElement>().minHeight = 5; { var groupPanel = Gui.CreatePanel(parent: mainPanel); groupPanel.GetComponent <Image>().color = new Color(0, 0, 0, 0.1f); groupPanel.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); massCurrent = Gui.Create <LocText>(prefab: locText.gameObject, parent: groupPanel); massCurrent.FindOrAddComponent <LayoutElement>().minHeight = 20; var buttonPanel = Gui.CreatePanel(parent: groupPanel); buttonPanel.FindOrAddComponent <HorizontalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); massBelow = Gui.Create <KToggle>(prefab: belowToggle.gameObject, parent: buttonPanel); massAbove = Gui.Create <KToggle>(prefab: aboveToggle.gameObject, parent: buttonPanel); massSlider = Gui.Create <NonLinearSlider>(prefab: thresholdSlider.gameObject, parent: groupPanel); massInput = Gui.Create <KNumberInputField>(prefab: numberInput.gameObject, parent: groupPanel); massInput.FindOrAddComponent <LayoutElement>().minHeight = 30; massInput.transform.Find("UnitsLabel")?.DeleteObject(); } Gui.CreatePanel(parent: mainPanel).FindOrAddComponent <LayoutElement>().minHeight = 5; { var groupPanel = Gui.CreatePanel(parent: mainPanel); groupPanel.GetComponent <Image>().color = new Color(0, 0, 0, 0.1f); groupPanel.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); germsCurrent = Gui.Create <LocText>(prefab: locText.gameObject, parent: groupPanel); germsCurrent.FindOrAddComponent <LayoutElement>().minHeight = 20; var buttonPanel = Gui.CreatePanel(parent: groupPanel); buttonPanel.FindOrAddComponent <HorizontalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); germsBelow = Gui.Create <KToggle>(prefab: belowToggle.gameObject, parent: buttonPanel); germsAbove = Gui.Create <KToggle>(prefab: aboveToggle.gameObject, parent: buttonPanel); germsSlider = Gui.Create <NonLinearSlider>(prefab: thresholdSlider.gameObject, parent: groupPanel); germsInput = Gui.Create <KNumberInputField>(prefab: numberInput.gameObject, parent: groupPanel); germsInput.FindOrAddComponent <LayoutElement>().minHeight = 30; germsInput.transform.Find("UnitsLabel")?.DeleteObject(); DumpTree(germsInput.gameObject); } Gui.CreatePanel(parent: mainPanel).FindOrAddComponent <LayoutElement>().minHeight = 5; { var groupPanel = Gui.CreatePanel(parent: mainPanel); groupPanel.GetComponent <Image>().color = new Color(0, 0, 0, 0.1f); groupPanel.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); materialCurrent = Gui.Create <LocText>(prefab: locText.gameObject, parent: groupPanel); materialCurrent.FindOrAddComponent <LayoutElement>().minHeight = 20; var buttonPanel = Gui.CreatePanel(parent: groupPanel); buttonPanel.FindOrAddComponent <HorizontalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); materialChecked = Gui.Create <KToggle>(prefab: belowToggle.gameObject, parent: buttonPanel); materialUnchecked = Gui.Create <KToggle>(prefab: aboveToggle.gameObject, parent: buttonPanel); } gameObject.FindOrAddComponent <VerticalLayoutGroup>().padding = new RectOffset(5, 5, 5, 5); LayoutElement layoutElement = gameObject.FindOrAddComponent <LayoutElement>(); layoutElement.minWidth = 150; layoutElement.preferredWidth = 150; layoutElement.minHeight = 450; layoutElement.preferredHeight = 450; mainPanel.transform.SetParent(gameObject.transform); ContentContainer = mainPanel; }
private GameObject SpawnSlider(SliderValue value) { GameObject gameObject = Util.KInstantiateUI(sliderPropertyPrefab, base.gameObject, true); HierarchyReferences component = gameObject.GetComponent <HierarchyReferences>(); component.GetReference <Image>("BottomIcon").sprite = Assets.GetSprite(value.bottomSprite); component.GetReference <Image>("TopIcon").sprite = Assets.GetSprite(value.topSprite); KSlider slider = component.GetReference <KSlider>("Slider"); KNumberInputField inputField = component.GetReference <KNumberInputField>("InputField"); gameObject.GetComponent <ToolTip>().SetSimpleTooltip(value.tooltip); slider.minValue = value.minValue; slider.maxValue = value.maxValue; inputField.minValue = 0f; inputField.maxValue = 99999f; inputFields.Add(inputField.gameObject); value.slider = slider; value.inputField = inputField; value.row = gameObject; slider.onReleaseHandle += delegate { slider.value = Mathf.Round(slider.value * 10f) / 10f; inputField.currentValue = slider.value; inputField.SetDisplayValue(inputField.currentValue.ToString()); if (value.onValueChanged != null) { value.onValueChanged(slider.value); } }; slider.onDrag += delegate { slider.value = Mathf.Round(slider.value * 10f) / 10f; inputField.currentValue = slider.value; inputField.SetDisplayValue(inputField.currentValue.ToString()); if (value.onValueChanged != null) { value.onValueChanged(slider.value); } }; slider.onMove += delegate { slider.value = Mathf.Round(slider.value * 10f) / 10f; inputField.currentValue = slider.value; inputField.SetDisplayValue(inputField.currentValue.ToString()); if (value.onValueChanged != null) { value.onValueChanged(slider.value); } }; inputField.onEndEdit += delegate { float num = Mathf.Clamp(Mathf.Round(inputField.currentValue), inputField.minValue, inputField.maxValue); inputField.SetDisplayValue(num.ToString()); slider.value = Mathf.Round(num); if (value.onValueChanged != null) { value.onValueChanged(num); } }; component.GetReference <LocText>("UnitLabel").text = value.unitString; return(gameObject); }