public static void InitPrefix(ProfessionDetailPanel __instance, ProfessionType type) { //We don't add this panel for Soldier or NoJob if (type != ProfessionType.Soldier && type != ProfessionType.NoJob) { //Checks if we already initialized the Specialization Panel. If so, do nothing SpecializationPanel p = __instance.GetComponentInChildren <SpecializationPanel>(true); if (p != null) { return; } //Get the parent of the original panel GameObject parent = __instance.specializationTogglePanel.transform.parent.gameObject; //Create our own panel GameObject newSpecPanel = GameObject.Instantiate(ModHandler.mods.gameObjects["SpecializationPanelModded"], parent.transform); p = newSpecPanel.GetComponent <SpecializationPanel>(); p.Init(type, AbsoluteProfessionPrioritiesMod.GetSpecializationDescriptors()[type].Values.ToList()); //For the collapse button to work, we need to add our panel to the accordion //We also remove the original panel from it AccordionPanel aPanel = __instance.GetComponent <AccordionPanel>(); aPanel.accordionObjects.Add(newSpecPanel); aPanel.accordionObjects.Remove(__instance.specializationTogglePanel.gameObject); //Removing the original panel from the UI would cause bugs so instead we just disable it __instance.specializationTogglePanel.gameObject.SetActive(false); } }
public void Init(SpecializationPanel parent, SpecializationDescriptor spec, int maxValue) { this.ParentPanel = parent; this.SpecializationName = spec.Name; canAutoManage = spec.CanAutoManageSubSpecializations; this.AutoPriorityToggle.gameObject.SetActive(spec.CanAutoManageSubSpecializations); if (spec.CanAutoManageSubSpecializations) { this.AutoPriorityText.gameObject.SetActive(false); this.AutoPriorityText.gameObject.AddComponent <TooltipHoverable>().Init("", Localization.GetText($"Specialization_{spec.Profession}_{spec.Name}_AutoManageTooltip")); this.AutoPriorityText.gameObject.SetActive(true); } this.SpecializationToggle.MaxValue = maxValue; this.SpecializationToggle.ToggleText.text = spec.GetDisplayName(); if (spec.SubSpecializations.Count == 0) { SubExpandButton.gameObject.SetActive(false); SubCollapseButton.gameObject.SetActive(false); AutoPriorityToggle.gameObject.SetActive(false); } else { foreach (var sub in spec.SubSpecializations.Values) { OrderableToggle subToggle = GameObject.Instantiate(this.SubSpecializationToggleTemplate.gameObject).GetComponent <OrderableToggle>(); subToggle.transform.SetParent(this.SubSpecializationsContainer.transform); subToggle.name = sub.Name; subToggle.ToggleText.text = sub.GetDisplayName(); subToggle.MaxValue = spec.SubSpecializations.Count - 1; subToggle.gameObject.SetActive(true); subToggle.UpButton.onClick.AddListener(() => SubSpecializationToggle_ButtonUpClicked(subToggle)); subToggle.DownButton.onClick.AddListener(() => SubSpecializationToggle_ButtonDownClicked(subToggle)); subToggle.Toggle.onValueChanged.AddListener((x) => SubSpecializationToggle_ToggleValueChanged(subToggle)); subToggle.OrderInput.onValueChanged.AddListener((x) => SubSpecializationToggle_InputValueChanged(subToggle)); this.SubSpecToggles.Add(sub.Name, subToggle); } OrderSubSpecializations(); } this.SpecializationToggle.OrderInput.onValueChanged.AddListener((x) => SpecializationToggle_InputValueChanged()); this.SpecializationToggle.Toggle.onValueChanged.AddListener((x) => SpecializationToggle_ToggleValueChanged()); this.SubCollapseButton.onClick.AddListener(SpecializationToggle_CollapseButtonClicked); this.SubExpandButton.onClick.AddListener(SpecializationToggle_ExpandButtonClicked); this.AutoPriorityToggle.onValueChanged.AddListener(this.AutoManageToggle_ValueChanged); this.DistanceInput.onValueChanged.AddListener((x) => this.DistanceInput_ValueChanged()); }
public static void SetHumanPostFix(ProfessionDetailPanel __instance, HumanAI human) { //Get our new panel SpecializationPanel p = __instance.GetComponentInChildren <SpecializationPanel>(true); //If it exists (depends on the stage of the lifecycle of the UI) //If it does, call SetHuman on our panel if (p != null) { p.SetHuman(human); } }