using System; using System.Collections.Generic; using Animancer; using Logic; using Logic.Action; using Logic.Audio; using Logic.CrashSight; using Logic.Multilingual; using RuntimeData; using TH1_Core.Events; using TH1_Core.Managers; using TH1_Logic.Core; using TH1_Logic.Net; using TH1_Logic.Steam; using TH1_UI.Components; using TH1_UI.HintUI; using TH1Renderer; using TH1Resource; using TMPro; using UI.HintUI; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace TH1_UI.View.Bottom { public class UIBottomBottomBarView : Base.View { //public Button closeButton; public ViDelegateAssisstant.Dele OnBtnCloseClick; public ViDelegateAssisstant.Dele OnBtnQuitClick; public Button TechButton; public Button HeroButton; public Button NextButton; public Button TabButton; public GameObject HeroButtonIconHint; public GameObject HeroButtonTextHint; public Image HeroButtonAvatar; public Button SettingButton; public Button QuitButton; public Button SLButton; public Button RankingButton; public UIBottomBottomBarQuitPanelMono QuitPanel; public int _tabUnitCount = 0; protected override void OnInit() { base.OnInit(); //closeButton.onClick.RemoveAllListeners(); //closeButton.onClick.AddListener(() => { OnBtnCloseClick.Invoke(); }); //CheckPanel.InitStart(RefreshStatus); if (QuitPanel != null) { QuitPanel.OnInit(); QuitPanel.OnQuitConfirm += OnQuitConfirmed; } } public bool CheckHasTabUnit(out GridData grid) { grid = null; if (Main.MapData == null) return false; bool ret = false; GridData firstGrid = null; int tt = 0; foreach (var u in Main.MapData.UnitMap.UnitList) { if (u.Player(Main.MapData) == Main.MapData.PlayerMap.SelfPlayerData && //u.Renderer(Main.MapData).isGlow()) (u.Renderer(Main.MapData)?.isGlow() ?? false)) { grid = u.Grid(Main.MapData); if (firstGrid == null) firstGrid = grid; ret = true; if(tt < _tabUnitCount) tt++; else { tt++; _tabUnitCount = tt; return ret; } } } if (ret) { grid = firstGrid; _tabUnitCount = 1; } return ret; } public void SetTabButtonVisible(bool visible) { if(visible) ShowButton(TabButton); else HideButton(TabButton); } //通常一局只会set一次,每次都是完全清空,然后绑定新的一个对局的按钮 public void SetContent() { if (QuitPanel != null) QuitPanel.gameObject.SetActive(false); QuitButton.onClick.RemoveAllListeners(); QuitButton.onClick.AddListener(OnQuitButtonClicked); SettingButton.onClick.RemoveAllListeners(); SettingButton.onClick.AddListener(OnSettingButtonClicked); TechButton.onClick.RemoveAllListeners(); TechButton.onClick.AddListener(OnTechButtonClicked); NextButton.onClick.RemoveAllListeners(); NextButton.onClick.AddListener(OnNextButtonClicked); HeroButton.onClick.RemoveAllListeners(); HeroButton.onClick.AddListener(OnHeroButtonClicked); SLButton.onClick.RemoveAllListeners(); SLButton.gameObject.SetActive(false); if (Main.MapData.Net.Mode == NetMode.Single) { SLButton.gameObject.SetActive(true); SLButton.onClick.AddListener(OnSLButtonClicked); } RankingButton.onClick.RemoveAllListeners(); RankingButton.onClick.AddListener(OnRankingButtonClicked); TabButton.onClick.RemoveAllListeners(); TabButton.onClick.AddListener(OnTabButtonClicked); UpdateHeroButtonAvatar(); // 初始检查 TabButton 是否显示 SetTabButtonVisible(CheckHasTabUnit(out var _)); } private void OnQuitButtonClicked() { if (QuitPanel != null) { QuitPanel.Open(); } else { OnQuitConfirmed(); } } private void OnQuitConfirmed() { OnBtnCloseClick.Invoke(); OnBtnQuitClick.Invoke(); } private void OnSettingButtonClicked() { EventManager.Publish(new ShowUITopSetting(){}); } private void OnTechButtonClicked() { //if (Main.MapData.CurPlayer != Main.MapData.PlayerMap.SelfPlayerData) return; EventManager.Publish(new ShowUIInfoTechTree(){}); Main.Instance.MapInteractionLogic.CancelAllHighlight(); } private void OnHeroButtonClicked() { //if (Main.MapData.CurPlayer != Main.MapData.PlayerMap.SelfPlayerData) return; EventManager.Publish(new ShowUIInfoHero(){}); } private void OnNextButtonClicked() { if (Main.MapData.CurPlayer != Main.MapData.PlayerMap.SelfPlayerData) return; Main.Instance.MapInteractionLogic.CancelAllHighlight(); EventManager.Publish(new HideUIInfoGridInfo(){}); if (Main.MapData.Net.Mode == NetMode.Multi && !LobbyManager.Instance.Lobby.IsLobbyOwner()) { GameNetSender.Instance.TurnEndConfirm(); } // 单机或者是房主直接切 else Main.PlayerLogic.EndPlayerTurn(Main.MapData, Main.MapData.PlayerMap.SelfPlayerId); } private void OnSLButtonClicked() { if (Main.MapData == null) return; if (!Main.MapData.CurPlayer.IsSelfPlayer()) return; if (Main.MapData.Net.Mode != NetMode.Single) return; Main.Instance.GameLogic.ChangeState(GameState.Menu); //TODO 这里的时间控制要处理 //播放loading EventManager.Publish(new ShowUIOutsideLoading()); //重置游戏 Timer.Instance.TimerRegister(this, () => { Main.Instance.ResumeMatch(); }, 0.3f,"MainUI_ShowLoadingAndRusume"); //关闭loading Timer.Instance.TimerRegister(this,()=> { EventManager.Publish(new HideUIOutsideLoading()); },1f,"MainUI_ShowLoadingAndRusume2"); } private void OnRankingButtonClicked() { EventManager.Publish(new ShowUIBottomRanking()); } private void OnTabButtonClicked() { SetTabButtonVisible(CheckHasTabUnit(out var grid)); if (grid == null) return; Main.Instance.MapInteractionLogic.OnTileClicked(Main.MapData,grid); } public void CloseView() { AudioManager.Instance.StopMusic(); } public void UpdateHeroButtonAvatar() { if (Main.MapData?.PlayerMap?.SelfPlayerData?.PlayerHeroData == null) return; bool newHero = Main.MapData.PlayerMap.SelfPlayerData.PlayerHeroData.GetHeroButtonHint(); HeroButtonTextHint.SetActive(newHero); HeroButtonIconHint.SetActive(newHero); HeroButtonAvatar.sprite = Main.MapData.PlayerMap.SelfPlayerData.PlayerHeroData.GetHeroButtonSprite(); } public void ExecuteButtonClick(Button button) { var pointer = new PointerEventData(EventSystem.current); var go = button.gameObject; ExecuteEvents.Execute(go, pointer, ExecuteEvents.pointerDownHandler); ExecuteEvents.Execute(go, pointer, ExecuteEvents.pointerUpHandler); button.onClick.Invoke(); } public void HideBottomBarNextTurn() { //HideButton(TechButton); //HideButton(HeroButton); HideButton(NextButton); } public void HideBottomBarTabUnit() { //HideButton(TechButton); //HideButton(HeroButton); HideButton(TabButton); } public void ShowBottomBarTabUnit() { //HideButton(TechButton); //HideButton(HeroButton); ShowButton(TabButton); } public void ShowBottomBarNextTurn() { //ShowButton(TechButton); ShowButton(NextButton); //ShowButton(HeroButton); } public void SetTechButtonVisible(bool visible) { if(visible)ShowButton(TechButton); else HideButton(TechButton); } public void SetHeroButtonVisible(bool visible) { if(visible)ShowButton(HeroButton); else HideButton(HeroButton); } private void HideButton(Button t) { var cpn = t.GetComponent(); if (cpn == null) { t.gameObject.SetActive(false); return; } var state = cpn.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeOut); state.Events.OnEnd = () => { t.gameObject.SetActive(false); }; } private void ShowButton(Button t) { t.gameObject.SetActive(true); var cpn = t.GetComponent(); if (cpn == null) return; cpn.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeIn); } } }