using System; using System.Collections.Generic; using KKSG; using UILib; using UnityEngine; using XMainClient.UI.UICommon; using XUtliPoolLib; namespace XMainClient.UI { internal class GVGCombatHandlerBase : DlgHandlerBase { protected virtual bool InGVGTime { get { return false; } } protected virtual bool HasGVGJion { get { return false; } } protected virtual bool VisibelEnterBattle { get { return false; } } protected virtual CrossGvgRoomState RoomState { get { return CrossGvgRoomState.CGRS_Idle; } } protected virtual GuildArenaState TimeState { get { return GuildArenaState.GUILD_ARENA_END; } } private Transform m_CombatPanel; private Transform m_NaPanel; private List m_GuildCombat = new List(); private GVGCombatGuildDisplay m_GuildCup; private IXUILabel m_combatTips; private IXUISprite m_honorSprite; private IXUILabel m_naLabel; private IXUIButton m_enterBattle; protected IXUIButton m_showRank; protected IXUILabel m_RegistrationCount; protected IXUILabel m_helpLabel; protected uint FirstRoomSize = 4u; protected uint SecondRoomSize = 2u; protected uint TopRoomSize = 1u; protected virtual XGVGCombatGroupData GetCombatGroup(uint roomID) { return null; } protected virtual void SetupOtherInfo() { } protected virtual void EnterScene() { } public override void RefreshData() { base.RefreshData(); bool inGVGTime = this.InGVGTime; if (inGVGTime) { this.m_RegistrationCount.SetVisible(true); this.m_CombatPanel.gameObject.SetActive(true); this.m_NaPanel.gameObject.SetActive(false); this.RefreshMessage(); this.RefreshCombatHandle(); } else { this.m_RegistrationCount.SetVisible(false); this.m_CombatPanel.gameObject.SetActive(false); this.m_NaPanel.gameObject.SetActive(true); } this.SetupOtherInfo(); bool flag = this.HasGVGJion && this.VisibelEnterBattle; if (flag) { this.m_enterBattle.SetVisible(true); this.m_enterBattle.SetGrey(this.RoomState == CrossGvgRoomState.CGRS_Fighting); } else { this.m_enterBattle.SetVisible(false); } } protected override void Init() { base.Init(); this.m_CombatPanel = base.PanelObject.transform.Find("Combat"); this.m_NaPanel = base.PanelObject.transform.Find("NA"); this.m_naLabel = (base.PanelObject.transform.Find("NA/tip").GetComponent("XUILabel") as IXUILabel); this.m_naLabel.SetText(XStringDefineProxy.GetString("GUILD_ARENA_COMBAT_NA")); this.m_helpLabel = (base.PanelObject.transform.Find("txt_helpLabel").GetComponent("XUILabel") as IXUILabel); this.m_GuildCup = new GVGCombatGuildDisplay(); this.m_GuildCup.Setup(base.PanelObject.transform.Find("Combat/Cup")); this.m_combatTips = (base.PanelObject.transform.Find("Combat/txt_TimeLabel").GetComponent("XUILabel") as IXUILabel); this.m_honorSprite = (base.PanelObject.transform.Find("Combat/honor").GetComponent("XUISprite") as IXUISprite); this.m_enterBattle = (base.PanelObject.transform.Find("Combat/LetMeDie").GetComponent("XUIButton") as IXUIButton); this.m_enterBattle.SetVisible(false); this.m_showRank = (base.PanelObject.transform.Find("TopRankBtn").GetComponent("XUIButton") as IXUIButton); this.m_RegistrationCount = (base.PanelObject.transform.Find("Title/Period").GetComponent("XUILabel") as IXUILabel); this.m_RegistrationCount.SetVisible(false); this.InitCombatHandle(); } public override void RegisterEvent() { base.RegisterEvent(); this.m_enterBattle.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnEnterBattleClick)); this.m_showRank.RegisterClickEventHandler(new ButtonClickEventHandler(this.OnShowRankClick)); } private bool OnShowRankClick(IXUIButton btn) { DlgBase.singleton.SetVisibleWithAnimation(true, null); return true; } private bool OnEnterBattleClick(IXUIButton btn) { bool flag = this.RoomState != CrossGvgRoomState.CGRS_Fighting; bool result; if (flag) { XSingleton.singleton.ShowSystemTip(XStringDefineProxy.GetString("GUILD_ARENA_OUTTIME"), "fece00"); result = false; } else { this.EnterScene(); result = false; } return result; } protected override void OnShow() { base.OnShow(); this.RefreshData(); } public override void OnUnload() { this.UnLoadCombatHandle(ref this.m_GuildCombat); bool flag = this.m_GuildCup != null; if (flag) { this.m_GuildCup.Recycle(); this.m_GuildCup = null; } base.OnUnload(); } private void InitCombatHandle() { this.CreateCombatHandle(0, this.FirstRoomSize); this.CreateCombatHandle(1, this.SecondRoomSize); this.CreateCombatHandle(2, this.TopRoomSize); } private void UnLoadCombatHandle(ref List guildCombats) { bool flag = guildCombats == null; if (!flag) { int i = 0; int count = guildCombats.Count; while (i < count) { bool flag2 = guildCombats[i] != null; if (flag2) { guildCombats[i].Recycle(); guildCombats[i] = null; } i++; } guildCombats.Clear(); guildCombats = null; } } private void CreateCombatHandle(int combat, uint size) { int num = 0; while ((long)num < (long)((ulong)size)) { string text = string.Format("Combat/Battle/Battle_{0}_{1}", combat, num); GVGCombatInfoDisplay gvgcombatInfoDisplay = new GVGCombatInfoDisplay(); gvgcombatInfoDisplay.Setup(base.PanelObject.transform.Find(text)); gvgcombatInfoDisplay.Set(combat, num); this.m_GuildCombat.Add(gvgcombatInfoDisplay); num++; } } private void RefreshCombatHandle() { int i = 0; int count = this.m_GuildCombat.Count; while (i < count) { this.m_GuildCombat[i].SetGroup(this.GetCombatGroup(this.m_GuildCombat[i].RoomID)); i++; } XGVGCombatGroupData combatGroup = this.GetCombatGroup(7u); this.m_GuildCup.SetGuildMember((combatGroup != null && combatGroup.Winner != null) ? combatGroup.Winner : null, null, true); } private void RefreshMessage() { string text = string.Empty; switch (this.TimeState) { case GuildArenaState.GUILD_ARENA_NOT_BEGIN: case GuildArenaState.GUILD_ARENA_BEGIN: case GuildArenaState.GUILD_ARENA_BATTLE_ONE: text = XStringDefineProxy.GetString("GUILD_ARENA_MESSAGE1"); break; case GuildArenaState.GUILD_ARENA_BATTLE_TWO: text = XStringDefineProxy.GetString("GUILD_ARENA_MESSAGE2"); break; case GuildArenaState.GUILD_ARENA_BATTLE_FINAL: text = XStringDefineProxy.GetString("GUILD_ARENA_MESSAGE3"); break; default: text = string.Empty; break; } this.m_combatTips.SetText(text); } } }