using System; using System.Collections.Generic; using KKSG; using UILib; using UnityEngine; using XMainClient.UI.UICommon; using XUtliPoolLib; namespace XMainClient.UI { internal class SpriteMainFrame : DlgHandlerBase { protected override string FileName { get { return "GameSystem/SpriteSystem/SpriteMainFrame"; } } private XSpriteSystemDocument _doc; public IXUISprite m_StarUpBtn; private IXUISprite m_AwakeBtn; private GameObject m_FeedGo; private GameObject m_FoodList; private IXUIProgress m_Exp; private IXUILabel m_ExpNum; private IXUILabel m_Level; private Transform m_EffectParent; private GameObject m_FeedBtnRedPoint; private XUIPool m_FoodPool = new XUIPool(XSingleton.singleton.m_uiTool); public SpriteSelectHandler _SpriteSelectHandler; public XSpriteAvatarHandler _SpriteAvatarHandler; public XSpriteAttributeHandler _SpritePropertyHandler; public int CurrentClick = 10000; public IXUISprite m_CurrentClickSprite; private float _lastEffectTime = 0f; private float[] _lastFeedTime = new float[3]; private float[] _lastClickTime = new float[3]; private bool[] _feedState = new bool[3]; private IXUILabel[] m_FoodNum; private float _feedInterval; private float _feedStart; public bool AnimEnd = true; private int _animLevelTarget; private int _animCurrLevel; private float _AnimExpTarget; private float _animSpeed = 0.1f; private XFx _fxFirework; protected override void Init() { base.Init(); this._doc = XDocuments.GetSpecificDocument(XSpriteSystemDocument.uuID); this._feedInterval = float.Parse(XSingleton.singleton.GetValue("SpriteFeedIntervalTime")); this._feedStart = float.Parse(XSingleton.singleton.GetValue("SpriteFeedStartTime")); this.m_AwakeBtn = (base.PanelObject.transform.Find("Other/AwakeBtn").GetComponent("XUISprite") as IXUISprite); this.m_StarUpBtn = (base.PanelObject.transform.Find("Other/StarUpBtn").GetComponent("XUISprite") as IXUISprite); this.m_FeedGo = base.PanelObject.transform.Find("Other/FeedBtn").gameObject; this.m_FeedBtnRedPoint = this.m_FeedGo.transform.Find("RedPoint").gameObject; this.m_FoodList = base.PanelObject.transform.Find("Other/FoodList").gameObject; this.m_Exp = (base.PanelObject.transform.Find("Other/Exp/ProgressBar").GetComponent("XUIProgress") as IXUIProgress); this.m_ExpNum = (base.PanelObject.transform.Find("Other/Exp/Progress").GetComponent("XUILabel") as IXUILabel); this.m_Level = (base.PanelObject.transform.Find("Other/Level").GetComponent("XUILabel") as IXUILabel); this.m_EffectParent = base.PanelObject.transform.Find("Other/FeedEffect"); Transform transform = base.PanelObject.transform.Find("Other/FoodList/ItemTpl"); this.m_FoodPool.SetupPool(transform.parent.gameObject, transform.gameObject, 3u, false); IXUICheckBox ixuicheckBox = this.m_FeedGo.GetComponent("XUICheckBox") as IXUICheckBox; ixuicheckBox.RegisterOnCheckEventHandler(new CheckBoxOnCheckEventHandler(this.OnFeedBtnClick)); Vector3 tplPos = this.m_FoodPool.TplPos; this.m_FoodNum = new IXUILabel[(int)this._doc.FoodList.Count]; for (int i = 0; i < (int)this._doc.FoodList.Count; i++) { GameObject gameObject = this.m_FoodPool.FetchGameObject(false); gameObject.transform.localPosition = new Vector3(tplPos.x, tplPos.y + (float)(((int)this._doc.FoodList.Count - i - 1) * this.m_FoodPool.TplHeight)); IXUISprite ixuisprite = gameObject.GetComponent("XUISprite") as IXUISprite; ixuisprite.ID = (ulong)((long)i); ixuisprite.RegisterSpritePressEventHandler(new SpritePressEventHandler(this.OnFoodBtnPress)); XSingleton.singleton.normalItemDrawer.DrawItem(gameObject, this._doc.FoodList[i, 0], 2, false); this.m_FoodNum[i] = (ixuisprite.gameObject.transform.Find("Num").GetComponent("XUILabel") as IXUILabel); } DlgHandlerBase.EnsureCreate(ref this._SpritePropertyHandler, base.PanelObject.transform.Find("PropertyHandlerParent"), true, this); DlgHandlerBase.EnsureCreate(ref this._SpriteAvatarHandler, base.PanelObject.transform.Find("AvatarHandlerParent"), true, this); DlgHandlerBase.EnsureCreate(ref this._SpriteSelectHandler, base.PanelObject.transform.Find("SelectHandlerParent"), false, this); } protected override void OnShow() { base.OnShow(); this._SpriteAvatarHandler.SetVisible(true); this._SpriteAvatarHandler.HideAvatar(); this.m_Exp.value = 0f; this.m_ExpNum.SetText("0/0"); this.m_Level.SetText("Lv.0"); this.CurrentClick = 10000; this._SpriteSelectHandler.SetVisible(true); this._SpritePropertyHandler.SetSpriteAttributeInfo((this.CurrentClick < this._doc.SpriteList.Count) ? this._doc.SpriteList[this.CurrentClick] : null, XSingleton.singleton.XPlayerData, null); XWelfareDocument specificDocument = XDocuments.GetSpecificDocument(XWelfareDocument.uuID); this.RefreshFoodNum(); this.RefreshAwakeBtn(); } private void CheckLastAwakeFinished() { bool flag = this._doc._AwakeSpriteData != null; if (flag) { for (int i = 0; i < this._doc.SpriteList.Count; i++) { bool flag2 = this._doc.SpriteList[i].uid == this._doc._AwakeSpriteData.uid; if (flag2) { DlgBase.singleton.OpenWindows(SpriteWindow.Awake); DlgBase.singleton._AwakeWindow.SetSpritesInfo(this._doc.SpriteList[i], this._doc._AwakeSpriteData); this._doc._AwakeSpriteData = null; break; } } } } protected override void OnHide() { base.OnHide(); this._SpriteSelectHandler.SetVisible(false); this._SpriteAvatarHandler.SetVisible(false); this.CurrentClick = 10000; for (int i = 0; i < 3; i++) { this._feedState[i] = false; } bool flag = this._fxFirework != null; if (flag) { XSingleton.singleton.DestroyFx(this._fxFirework, true); this._fxFirework = null; } this.AnimEnd = true; } public override void OnUnload() { DlgHandlerBase.EnsureUnload(ref this._SpriteSelectHandler); DlgHandlerBase.EnsureUnload(ref this._SpritePropertyHandler); DlgHandlerBase.EnsureUnload(ref this._SpriteAvatarHandler); bool flag = this._fxFirework != null; if (flag) { XSingleton.singleton.DestroyFx(this._fxFirework, true); this._fxFirework = null; } base.OnUnload(); } public override void RegisterEvent() { base.RegisterEvent(); this.m_StarUpBtn.RegisterSpriteClickEventHandler(new SpriteClickEventHandler(this.OnStarUpBtnClick)); this.m_AwakeBtn.RegisterSpriteClickEventHandler(new SpriteClickEventHandler(this.OnAwakeBtnClick)); } private void LevelUp() { XSingleton.singleton.ShowSystemTip(XStringDefineProxy.GetString("SpriteLevelUpTips"), "fece00"); } private void RefreshFoodNum() { for (int i = 0; i < (int)this._doc.FoodList.Count; i++) { this.m_FoodNum[i].SetText(XBagDocument.BagDoc.GetItemCount(this._doc.FoodList[i, 0]).ToString()); } this.RefreshFeedBtnRedPoint(); } private void RefreshFeedBtnRedPoint() { this.m_FeedBtnRedPoint.SetActive(!this._doc.isSpriteFoodEmpty() && this.CurrentClick != 10000 && this._doc.isSpriteFight(this._doc.SpriteList[this.CurrentClick].uid) && this._doc.isSpriteNeed2Feed(this._doc.SpriteList[this.CurrentClick].uid, false)); } public void OnStarUpBtnClick(IXUISprite btn) { bool flag = this.CurrentClick == 10000; if (!flag) { DlgBase.singleton.OpenWindows(SpriteWindow.StarUp); } } public bool OnFeedBtnClick(IXUICheckBox icb) { this.m_FoodList.SetActive(icb.bChecked); return true; } public void RefreshAwakeBtn() { } private bool AwakeItemEnough(ref uint consumeCount) { bool flag = this.CurrentClick > this._doc.SpriteList.Count; bool result; if (flag) { result = false; } else { ulong itemCount = XSingleton.singleton.Doc.XBagDoc.GetItemCount(XSingleton.singleton.GetInt("SpriteAwakeItemID")); uint spriteQuality = this._doc._SpriteTable.GetBySpriteID(this._doc.SpriteList[this.CurrentClick].SpriteID).SpriteQuality; List stringList = XSingleton.singleton.GetStringList("SpriteAwakeConsume"); bool flag2 = (ulong)spriteQuality >= (ulong)((long)stringList.Count); if (flag2) { XSingleton.singleton.AddErrorLog("Sprite Quality Error", null, null, null, null, null); result = false; } else { consumeCount = uint.Parse(stringList[(int)spriteQuality]); bool flag3 = itemCount < (ulong)consumeCount; result = !flag3; } } return result; } public void OnAwakeBtnClick(IXUISprite btn) { bool flag = this.CurrentClick >= this._doc.SpriteList.Count; if (!flag) { int @int = XSingleton.singleton.GetInt("SpriteAwakeMinLevel"); bool flag2 = (ulong)XSingleton.singleton.XPlayerData.Level < (ulong)((long)@int); if (flag2) { XSingleton.singleton.ShowSystemTip(string.Format(XStringDefineProxy.GetString("SpriteAwakeLevelLimit"), @int), "fece00"); } else { uint num = 0u; bool flag3 = !this.AwakeItemEnough(ref num); if (flag3) { XSingleton.singleton.ShowSystemTip(XStringDefineProxy.GetString("SpriteAwake_Error", new object[] { num }), "fece00"); XSingleton.singleton.ShowItemAccess(XSingleton.singleton.GetInt("SpriteAwakeItemID"), null); } else { bool tempTip = DlgBase.singleton.GetTempTip(XTempTipDefine.OD_SPRITE_AWAKE); if (tempTip) { this._doc.ReqSpriteOperation(SpriteType.Sprite_Awake); } else { string mainLabel = string.Format("{0}\n{1}\n{2}", XStringDefineProxy.GetString("SpriteAwake_Title"), XStringDefineProxy.GetString("SpriteAwake_Tip"), XStringDefineProxy.GetString("SpriteAwake_Consume", new object[] { XLabelSymbolHelper.FormatSmallIcon(XSingleton.singleton.GetInt("SpriteAwakeItemID")), num })); string @string = XStringDefineProxy.GetString("COMMON_OK"); string string2 = XStringDefineProxy.GetString("COMMON_CANCEL"); DlgBase.singleton.SetVisible(true, true); DlgBase.singleton.SetSingleButtonMode(false); DlgBase.singleton.ShowNoTip(XTempTipDefine.OD_SPRITE_AWAKE); DlgBase.singleton.SetLabelsWithSymbols(mainLabel, @string, string2); DlgBase.singleton.SetModalCallback(new ButtonClickEventHandler(this.OnEnsureAwakeClick), null); } } } } } private bool OnEnsureAwakeClick(IXUIButton btn) { DlgBase.singleton.SetVisible(false, true); this._doc.ReqSpriteOperation(SpriteType.Sprite_Awake); return true; } public void OnServerReturn(ulong uid) { bool flag = !base.IsVisible(); if (!flag) { SpriteInfo spriteInfo = this._doc.SpriteList[this.CurrentClick]; bool flag2 = uid != spriteInfo.uid; if (!flag2) { this.AnimEnd = false; this._animLevelTarget = (int)spriteInfo.Level; uint spriteLevelUpExp = this._doc.GetSpriteLevelUpExp(this.CurrentClick); this._AnimExpTarget = spriteInfo.Exp * 1f / spriteLevelUpExp; this.RefreshFoodNum(); bool flag3 = this._doc.isSpriteFoodEmpty(); if (flag3) { this._SpriteSelectHandler.SetSpriteList(this._doc.SpriteList, false); } bool flag4 = Time.time - this._lastEffectTime > 3f; if (flag4) { this._lastEffectTime = Time.time; bool flag5 = this._fxFirework != null; if (flag5) { XSingleton.singleton.DestroyFx(this._fxFirework, true); } this._fxFirework = XSingleton.singleton.CreateAndPlay("Effects/FX_Particle/UIfx/UI_jl_weiyang", this.m_EffectParent, Vector3.zero, Vector3.one, 1f, true, 2f, true); } } } } public void SetAvatar() { this._SpriteAvatarHandler.SetSpriteInfoByIndex(this.CurrentClick, 0, false, false); } private void SetExp() { SpriteInfo spriteInfo = this._doc.SpriteList[this.CurrentClick]; uint spriteLevelUpExpByLevel = this._doc.GetSpriteLevelUpExpByLevel(this.CurrentClick, this._animCurrLevel); float num = this.m_Exp.value + this._animSpeed; bool flag = (this._animCurrLevel == this._animLevelTarget && num > this._AnimExpTarget) || this._animCurrLevel > this._animLevelTarget; if (flag) { this.AnimEnd = true; this._animCurrLevel = this._animLevelTarget; num = this._AnimExpTarget; this._SpriteSelectHandler.SetSpriteList(this._doc.SpriteList, false); } bool flag2 = num > 1f; if (flag2) { num = 0f; this._animCurrLevel++; XSingleton.singleton.AddLog(string.Format("Sprite level up to {0}", this._animCurrLevel), null, null, null, null, null, XDebugColor.XDebug_None); this.LevelUp(); } this.m_Exp.value = num; this.m_ExpNum.SetText(string.Format("{0}/{1}", spriteInfo.Exp, spriteLevelUpExpByLevel)); this.m_Level.SetText(string.Format("Lv.{0}", this._animCurrLevel)); } public void OnSpriteListClick(IXUISprite iSp) { bool flag = this.m_CurrentClickSprite != null; if (flag) { this.m_CurrentClickSprite.gameObject.transform.Find("Select").gameObject.SetActive(false); } bool flag2 = this.CurrentClick != (int)iSp.ID; if (flag2) { this.AnimEnd = true; } this.CurrentClick = (int)iSp.ID; this.m_CurrentClickSprite = iSp; this.m_CurrentClickSprite.gameObject.transform.Find("Select").gameObject.SetActive(true); SpriteInfo spriteInfo = this._doc.SpriteList[this.CurrentClick]; this.SetAvatar(); this.RefreshFeedBtnRedPoint(); this._SpritePropertyHandler.SetSpriteAttributeInfo(this._doc.SpriteList[this.CurrentClick], XSingleton.singleton.XPlayerData, null); uint spriteLevelUpExp = this._doc.GetSpriteLevelUpExp(this.CurrentClick); this.m_Exp.value = spriteInfo.Exp * 1f / spriteLevelUpExp; this.m_ExpNum.SetText(string.Format("{0}/{1}", spriteInfo.Exp, spriteLevelUpExp)); this.m_Level.SetText(string.Format("Lv.{0}", spriteInfo.Level)); this._animCurrLevel = (int)spriteInfo.Level; this.RefreshAwakeBtn(); } private bool OnFoodBtnPress(IXUISprite iSp, bool state) { this._feedState[(int)iSp.ID] = state; if (state) { this._lastClickTime[(int)iSp.ID] = Time.time; bool flag = !this._doc.QueryFeedSprite(this.CurrentClick, (uint)this._doc.FoodList[(int)iSp.ID, 0]); if (flag) { this._feedState[(int)iSp.ID] = false; } } return true; } public override void StackRefresh() { base.StackRefresh(); this.RefreshFoodNum(); this.SetAvatar(); } public override void OnUpdate() { base.OnUpdate(); for (int i = 0; i < 3; i++) { bool flag = this._feedState[i]; if (flag) { bool flag2 = Time.time - this._lastClickTime[i] > this._feedStart && Time.time - this._lastFeedTime[i] > this._feedInterval; if (flag2) { this._lastFeedTime[i] = Time.time; bool flag3 = !this._doc.QueryFeedSprite(this.CurrentClick, (uint)this._doc.FoodList[i, 0]); if (flag3) { this._feedState[i] = false; } } } } bool flag4 = !this.AnimEnd; if (flag4) { this.SetExp(); } } } }