using System; using System.Collections.Generic; using UILib; using UnityEngine; using XUtliPoolLib; namespace XMainClient.UI { internal class EmblemEquipView : DlgHandlerBase { protected override string FileName { get { return "ItemNew/EmblemOperateFrame"; } } public XEmblemDocument _doc; public XSmeltDocument _smeltDoc; public static int Emblem_Slot_Count = XBagDocument.BodyPosition(EmblemPosition.EMBLEM_END); public GameObject[] m_EmblemBg = new GameObject[EmblemEquipView.Emblem_Slot_Count]; public IXUISprite[] m_EmblemSlots = new IXUISprite[EmblemEquipView.Emblem_Slot_Count]; public IXUISprite[] m_EmblemSlotCovers = new IXUISprite[EmblemEquipView.Emblem_Slot_Count]; public IXUISprite[] m_EmblemP = new IXUISprite[EmblemEquipView.Emblem_Slot_Count]; public IXUISprite[] m_EmblemSlotBgs = new IXUISprite[EmblemEquipView.Emblem_Slot_Count]; public XUIPool m_EmblemPool = new XUIPool(XSingleton.singleton.m_uiTool); private XEmbleAttrView embleAttrView; private Transform TotalAttriPanel; private IXUITweenTool m_BuySlotTween; private SpriteClickEventHandler m_finalHandle = null; private ulong m_slottingSlot = 0UL; private static int GetSlotIndex(EquipPosition pos) { int num = XBagDocument.BodyPosition(pos); bool flag = num >= XEmblemDocument.Position_TotalStart && num < XEmblemDocument.Position_TotalEnd; int result; if (flag) { result = num - XEmblemDocument.Position_TotalStart; } else { result = -1; } return result; } protected override void Init() { base.Init(); this.TotalAttriPanel = base.PanelObject.transform.Find("TotalAttriPanel"); IXUIButton ixuibutton = base.PanelObject.transform.Find("Panel/Btn").GetComponent("XUIButton") as IXUIButton; ixuibutton.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnClickEmblemAccess)); IXUIButton ixuibutton2 = base.PanelObject.transform.Find("Panel/AttriBtn").GetComponent("XUIButton") as IXUIButton; ixuibutton2.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnClickAttriBtn)); this.m_EmblemPool.SetupPool(base.PanelObject.transform.Find("Panel/Frame/Emblems").gameObject, base.PanelObject.transform.Find("Panel/Frame/Emblems/EmblemTpl").gameObject, (uint)EmblemEquipView.Emblem_Slot_Count, false); for (int i = 0; i < EmblemEquipView.Emblem_Slot_Count; i++) { Transform transform = base.PanelObject.transform.Find("Panel/Frame/Emblems/Emblem" + i); GameObject gameObject = this.m_EmblemPool.FetchGameObject(false); this.m_EmblemBg[i] = gameObject; gameObject.transform.localPosition = transform.localPosition; gameObject.transform.localScale = transform.localScale; this.m_EmblemSlots[i] = (gameObject.transform.Find("Icon").GetComponent("XUISprite") as IXUISprite); this.m_EmblemP[i] = (gameObject.transform.Find("P").GetComponent("XUISprite") as IXUISprite); this.m_EmblemSlotCovers[i] = (gameObject.transform.Find("Cover").GetComponent("XUISprite") as IXUISprite); this.m_EmblemSlotCovers[i].ID = (ulong)((long)i); this.m_EmblemSlotCovers[i].RegisterSpriteClickEventHandler(new SpriteClickEventHandler(this.OnSlotCoverClicked)); this.m_EmblemSlotBgs[i] = (gameObject.transform.Find("Bg").GetComponent("XUISprite") as IXUISprite); this.m_EmblemSlotBgs[i].RegisterSpriteClickEventHandler(new SpriteClickEventHandler(this.OnSlotBgClicked)); } this.m_BuySlotTween = (base.PanelObject.transform.Find("Panel/Frame/Emblems/Light").GetComponent("XUIPlayTween") as IXUITweenTool); this.m_BuySlotTween.gameObject.SetActive(false); DlgHandlerBase.EnsureCreate>(ref this.embleAttrView, this.TotalAttriPanel, false, this); this._doc = XDocuments.GetSpecificDocument(XEmblemDocument.uuID); this._doc._EquipHandler = this; this._smeltDoc = XSmeltDocument.Doc; } protected override void OnShow() { base.OnShow(); this.ShowEquipments(); this.m_BuySlotTween.gameObject.SetActive(false); } public override void StackRefresh() { base.StackRefresh(); this.ShowEquipments(); } public override void OnUnload() { DlgHandlerBase.EnsureUnload>(ref this.embleAttrView); this._doc._EquipHandler = null; base.OnUnload(); } public void ShowEquipments() { this._doc.UpdateEquipLockState(XSingleton.singleton.XPlayerData.Level); this._doc.UpdateEquipSlottingState(); XBodyBag emblemBag = XSingleton.singleton.Doc.XBagDoc.EmblemBag; EmblemSlotStatus[] equipLock = this._doc.EquipLock; for (int i = XEmblemDocument.Position_TotalStart; i < XEmblemDocument.Position_TotalEnd; i++) { this.SetSlot(i, emblemBag[i], equipLock[i - XEmblemDocument.Position_TotalStart]); } } public void SetSlot(int slot, XItem item, EmblemSlotStatus slotStatus = null) { int num = slot - XEmblemDocument.Position_TotalStart; bool flag = slotStatus != null && slotStatus.IsLock; if (flag) { XSingleton.singleton.DrawItem(this.m_EmblemBg[num], null); this.m_EmblemSlots[num].RegisterSpriteClickEventHandler(null); this.m_EmblemBg[num].transform.Find("RedPoint").gameObject.SetActive(false); this.m_EmblemSlotCovers[num].SetVisible(true); this.m_EmblemP[num].gameObject.SetActive(!slotStatus.LevelIsdOpen); } else { bool flag2 = item == null || item.itemID == 0 || (ulong)item.type != (ulong)((long)XFastEnumIntEqualityComparer.ToInt(ItemType.EMBLEM)); if (flag2) { XSingleton.singleton.DrawItem(this.m_EmblemBg[num], null); this.m_EmblemSlotCovers[num].SetVisible(false); this.m_EmblemP[num].SetVisible(false); this.m_EmblemSlots[num].RegisterSpriteClickEventHandler(null); this.m_EmblemBg[num].transform.Find("RedPoint").gameObject.SetActive(false); } else { this.m_EmblemSlotCovers[num].SetVisible(false); this.m_EmblemP[num].SetVisible(false); XItemDrawerMgr.Param.bHideBinding = true; XSingleton.singleton.DrawItem(this.m_EmblemBg[num], item); bool flag3 = this.m_finalHandle == null; if (flag3) { this.m_EmblemSlots[num].RegisterSpriteClickEventHandler(new SpriteClickEventHandler(CharacterEquipHandler.OnItemClicked)); } this.m_EmblemSlots[num].ID = item.uid; bool active = XSingleton.singleton.IsSystemOpened(XSysDefine.XSys_Item_Smelting) && this._smeltDoc.IsHadRedDot(item); this.m_EmblemBg[num].transform.Find("RedPoint").gameObject.SetActive(active); } } } public void RegisterItemClickEvents(SpriteClickEventHandler handle = null) { this.m_finalHandle = handle; bool flag = this.m_finalHandle == null; if (flag) { for (int i = 0; i < EmblemEquipView.Emblem_Slot_Count; i++) { this.m_EmblemSlots[i].RegisterSpriteClickEventHandler(new SpriteClickEventHandler(CharacterEquipHandler.OnItemClicked)); } } else { for (int j = 0; j < EmblemEquipView.Emblem_Slot_Count; j++) { this.m_EmblemSlots[j].RegisterSpriteClickEventHandler(this.m_finalHandle); } } } public void OnSlotBgClicked(IXUISprite iSp) { XSingleton.singleton.ShowSystemTip(XStringDefineProxy.GetString("EMBLEM_SLOT_NO_SELECT"), "fece00"); } public bool OnClickEmblemAccess(IXUIButton btn) { XSingleton.singleton.OpenSystem(XSysDefine.XSys_EquipCreate_EmblemSet, 0UL); return true; } public bool OnClickAttriBtn(IXUIButton btn) { this.embleAttrView.SetBaseData(XSingleton.singleton.Doc.XBagDoc.EmblemBag); this.embleAttrView.SetVisible(true); return true; } public void OnSlotCoverClicked(IXUISprite iSp) { EmblemSlotStatus[] equipLock = this._doc.EquipLock; checked { bool flag = equipLock[(int)((IntPtr)iSp.ID)] == null; if (!flag) { this.m_slottingSlot = iSp.ID; bool isLock = equipLock[(int)((IntPtr)iSp.ID)].IsLock; if (isLock) { List emblemSlotUnlockLevel = this._doc.emblemSlotUnlockLevel; int num = unchecked((int)iSp.ID); bool flag2 = !equipLock[(int)((IntPtr)iSp.ID)].LevelIsdOpen; if (flag2) { bool flag3 = num < XEmblemDocument.Position_AttrEnd; string @string; if (flag3) { @string = XStringDefineProxy.GetString("EMBLEM_ATTR"); } else { @string = XStringDefineProxy.GetString("EMBLEM_SKILL"); } XSingleton.singleton.ShowSystemTip(@string + XStringDefineProxy.GetString("EMBLEM_SLOT_OPEN_AT_LEVEL", new object[] { emblemSlotUnlockLevel[num] }), "ff0000"); } else { bool flag4 = !equipLock[(int)((IntPtr)iSp.ID)].HadSlotting; if (flag4) { int num2 = this._doc.IsCanSlotting(equipLock[(int)((IntPtr)iSp.ID)].Slot); bool flag5 = num2 == 0; if (flag5) { XSingleton.singleton.ShowModalDialog(string.Format(XStringDefineProxy.GetString("SlotThisEmblemNeedMoney"), this._doc.SlottingNeedMoney(equipLock[(int)((IntPtr)iSp.ID)].Slot)), XStringDefineProxy.GetString("COMMON_OK"), XStringDefineProxy.GetString("COMMON_CANCEL"), new ButtonClickEventHandler(this.EmblemSlotting)); } else { bool flag6 = num2 == 1; if (flag6) { XSingleton.singleton.ShowSystemTip(XStringDefineProxy.GetString("NeedUnlockLastSlotting"), "fece00"); } } } } } } } } public void PlayBuySlotFx(int index) { bool flag = index >= this.m_EmblemBg.Length; if (!flag) { this.m_BuySlotTween.gameObject.transform.localPosition = this.m_EmblemBg[index].transform.localPosition; this.m_BuySlotTween.PlayTween(true, -1f); XSingleton.singleton.PlayUISound("Audio/UI/UI_winfavor", true, AudioChannel.Action); } } private bool EmblemSlotting(IXUIButton btn) { this._doc.ReqEmbleSlotting(this.m_slottingSlot); XSingleton.singleton.CloseModalDlg(); return true; } public static void OnItemClicked(IXUISprite iSp) { XItem itemByUID = XSingleton.singleton.Doc.XBagDoc.GetItemByUID(iSp.ID); bool flag = itemByUID != null; if (flag) { bool flag2 = XSingleton.singleton.Doc.XBagDoc.EmblemBag.HasItem(itemByUID.uid); if (flag2) { XSingleton.singleton.ShowTooltipDialog(itemByUID, null, iSp, true, 0u); } else { XSingleton.singleton.ShowTooltipDialogWithSearchingCompare(itemByUID, iSp, true, 0u); } } } } }