TH1/Unity/Assets/Scripts/TH1_UI/View/Bottom/UIBottomBottomBarView.cs
2026-01-23 23:31:02 +08:00

217 lines
5.9 KiB
C#

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 Button TechButton;
public Button HeroButton;
public Button NextButton;
public GameObject HeroButtonIconHint;
public GameObject HeroButtonTextHint;
public Image HeroButtonAvatar;
public Button SettingButton;
public Button QuitButton;
public Button SLButton;
public Button RankingButton;
protected override void OnInit()
{
base.OnInit();
//closeButton.onClick.RemoveAllListeners();
//closeButton.onClick.AddListener(() => { OnBtnCloseClick.Invoke(); });
//CheckPanel.InitStart(RefreshStatus);
}
//通常一局只会set一次,每次都是完全清空,然后绑定新的一个对局的按钮
public void SetContent()
{
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);
UpdateHeroButtonAvatar();
}
private void OnQuitButtonClicked()
{
if(Main.MapData?.Net.Mode == NetMode.Multi)
LobbyManager.Instance.Lobby?.LeaveLobby();
MapRenderer.Instance.OnGameClosed();
OnBtnCloseClick.Invoke();
//UIManager.Instance.GameUI.MainUI.NeedShow = true;
EventManager.Publish(new ShowUIOutsideMenu());
Main.Instance.GameLogic.ChangeState(GameState.Menu);
}
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());
}
public void CloseView()
{
AudioManager.Instance.StopMusic();
}
public void UpdateHeroButtonAvatar()
{
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 ShowBottomBarNextTurn()
{
ShowButton(TechButton);
ShowButton(NextButton);
ShowButton(HeroButton);
}
public void BottomBarQuit()
{
QuitButton.onClick.Invoke();
}
private void HideButton(Button t)
{
var cpn = t.GetComponent<AnimancerComponent>();
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<AnimancerComponent>();
if (cpn == null) return;
cpn.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeIn);
}
}
}