From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Scripts/XMainClient/UI/SpriteMainFrame.cs | 455 +++++++++++++++++++++ 1 file changed, 455 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/UI/SpriteMainFrame.cs (limited to 'Client/Assets/Scripts/XMainClient/UI/SpriteMainFrame.cs') diff --git a/Client/Assets/Scripts/XMainClient/UI/SpriteMainFrame.cs b/Client/Assets/Scripts/XMainClient/UI/SpriteMainFrame.cs new file mode 100644 index 00000000..2e67d90d --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/UI/SpriteMainFrame.cs @@ -0,0 +1,455 @@ +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(); + } + } + } +} -- cgit v1.1-26-g67d0