public void Initialize(QuickSlotPanel parentPanel) { SlotPanel = parentPanel; currentMode = QuickSlotMode.UseItem; myButton = GetComponent <Button>(); Refresh(); }
public static bool Prefix(QuickSlotPanel __instance) { var self = __instance; UIElement _base = self as UIElement; // UIElement.Update() fix: if ((bool)At.GetValue(typeof(UIElement), _base, "m_hideWanted") && _base.IsDisplayed) { At.Call(_base, "OnHide", null); } // get private fields var m_active = (bool)At.GetValue(typeof(QuickSlotPanel), self, "m_active"); var m_initialized = (bool)At.GetValue(typeof(QuickSlotPanel), self, "m_initialized"); var m_quickSlotDisplays = At.GetValue(typeof(QuickSlotPanel), self, "m_quickSlotDisplays") as QuickSlotDisplay[]; var m_lastCharacter = At.GetValue(typeof(QuickSlotPanel), self, "m_lastCharacter") as Character; // check init if ((_base.LocalCharacter == null || m_lastCharacter != _base.LocalCharacter) && m_initialized) { m_initialized = false; At.SetValue(m_initialized, typeof(QuickSlotPanel), self, "m_initialized"); } // normal update when initialized if (m_initialized) { if (self.UpdateInputVisibility) { for (int i = 0; i < m_quickSlotDisplays.Count(); i++) { m_quickSlotDisplays[i].SetInputTargetAlpha((!m_active) ? 0f : 1f); } } } // custom initialize setup else if (_base.LocalCharacter != null) { At.SetValue(_base.LocalCharacter, typeof(QuickSlotPanel), self, "m_lastCharacter"); At.SetValue(true, typeof(QuickSlotPanel), self, "m_initialized"); // set quickslot display refs (orig function) for (int j = 0; j < m_quickSlotDisplays.Length; j++) { int refSlotID = m_quickSlotDisplays[j].RefSlotID; m_quickSlotDisplays[j].SetQuickSlot(_base.LocalCharacter.QuickSlotMngr.GetQuickSlot(refSlotID)); } // if its a keyboard quickslot, set up the custom display stuff if (_base.name == "Keyboard" && _base.transform.parent.name == "QuickSlot") { ExtendedQuickslots.SetupKeyboardQuickslotDisplay(_base, m_quickSlotDisplays); } } return(false); }
public static bool Prefix(QuickSlotPanel __instance, ref bool ___m_hideWanted, ref Character ___m_lastCharacter, ref bool ___m_initialized, QuickSlotDisplay[] ___m_quickSlotDisplays, bool ___m_active) { var self = __instance; if (___m_hideWanted && self.IsDisplayed) { At.Invoke(self, "OnHide"); } // check init if ((self.LocalCharacter == null || ___m_lastCharacter != self.LocalCharacter) && ___m_initialized) { At.SetField(self, "m_initialized", false); } // normal update when initialized if (___m_initialized) { if (self.UpdateInputVisibility) { for (int i = 0; i < ___m_quickSlotDisplays.Count(); i++) { At.Invoke(___m_quickSlotDisplays[i], "SetInputTargetAlpha", new object[] { (!___m_active) ? 0f : 1f }); } } } // custom initialize setup else if (self.LocalCharacter != null) { ___m_lastCharacter = self.LocalCharacter; ___m_initialized = true; // set quickslot display refs (orig function) for (int j = 0; j < ___m_quickSlotDisplays.Length; j++) { int refSlotID = ___m_quickSlotDisplays[j].RefSlotID; ___m_quickSlotDisplays[j].SetQuickSlot(self.LocalCharacter.QuickSlotMngr.GetQuickSlot(refSlotID)); } // if its a keyboard quickslot, set up the custom display stuff if (self.name == "Keyboard" && self.transform.parent.name == "QuickSlot") { SetupKeyboardQuickslotDisplay(self, ___m_quickSlotDisplays); } } return(false); }
public static bool UpdatePrefix(QuickSlotPanel __instance, ref Character ___m_lastCharacter, ref bool ___m_initialized, ref QuickSlotDisplay[] ___m_quickSlotDisplays, ref bool ___m_active) { UIElement instanceBase = __instance as UIElement; UIElementUpdate(__instance, new object[] { }); if ((instanceBase.LocalCharacter == null || ___m_lastCharacter != instanceBase.LocalCharacter) && ___m_initialized) { ___m_initialized = false; } if (___m_initialized) { if (__instance.UpdateInputVisibility) { for (int i = 0; i < ___m_quickSlotDisplays.Length; i++) { ___m_quickSlotDisplays[i].SetInputTargetAlpha((float)((!___m_active) ? 0 : 1)); } } } else if (instanceBase.LocalCharacter != null) { for (int j = 0; j < ___m_quickSlotDisplays.Length; j++) { int refSlotID = ___m_quickSlotDisplays[j].RefSlotID; ___m_quickSlotDisplays[j].SetQuickSlot(instanceBase.LocalCharacter.QuickSlotMngr.GetQuickSlot(refSlotID)); } ___m_lastCharacter = instanceBase.LocalCharacter; ___m_initialized = true; // We want to find a specific QuickSlotPanel instance, since there are multiple if (instanceBase.name == "Keyboard" && instanceBase.transform.parent.name == "QuickSlot") { // Find our default StabilityDisplay_Simple object StabilityDisplay_Simple stabilityDisplay = UnityEngine.Object.FindObjectOfType <StabilityDisplay_Simple>(); // Streamline the stability display so it's not so far from the bottom of the screen. // This also means the hotbar gets placed closer to the bottom of the screen, but // still with neat spacing. stabilityDisplay.transform.position = new Vector3(stabilityDisplay.transform.position.x, stabilityDisplay.transform.position.y / 3f, stabilityDisplay.transform.position.z); // Get the screen coords of its corners Vector3[] stabilityDisplayCorners = new Vector3[4]; stabilityDisplay.RectTransform.GetWorldCorners(stabilityDisplayCorners); // We want to set the QuickSlotPanel to be above the stability display, with equal space above the // stability display as there is below it, to make it look nice and neat. float newY = stabilityDisplayCorners[1].y + stabilityDisplayCorners[0].y; instanceBase.transform.parent.position = new Vector3(instanceBase.transform.parent.position.x, newY, instanceBase.transform.parent.position.z); // Logic to center the panel so the look and feel is more consistent with normal games if (ExtendedQuickslots.centerBar) { Vector3[] v0 = new Vector3[4]; Vector3[] v1 = new Vector3[4]; ___m_quickSlotDisplays[0].RectTransform.GetWorldCorners(v0); ___m_quickSlotDisplays[1].RectTransform.GetWorldCorners(v1); // The width of each icon var qsdWidth = v0[2].x - v0[1].x; // The width of the space between each icon var qsdSpacer = v1[0].x - v0[2].x; // Total space per icon/spacer pair var elemWidth = qsdWidth + qsdSpacer; // How long our bar really is var realWidth = elemWidth * ___m_quickSlotDisplays.Length; // Re-center it based on actual content instanceBase.transform.parent.position = new Vector3(realWidth / 2.0f + elemWidth / 2.0f, instanceBase.transform.parent.position.y, instanceBase.transform.parent.position.z); } } } return(false); }