TH1/Unity/Assets/Scripts/TH1_UI/View/Bottom/UIBottomBottomBarView.cs
2025-12-27 15:32:13 +08:00

156 lines
4.3 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;
public Transform NetInfo;
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.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;
Main.Instance.GameLogic.ChangeState(GameState.Menu);
}
private void OnSettingButtonClicked()
{
UIManager.Instance.SettingUI.NeedShow = !UIManager.Instance.SettingUI.NeedShow;
}
private void OnTechButtonClicked()
{
EventManager.Publish(new ShowUIInfoTechTree(){non = 0});
Main.Instance.MapInteractionLogic.CancelAllHighlight();
}
private void OnHeroButtonClicked()
{
EventManager.Publish(new ShowUIInfoHero(){non = 0});
}
private void OnNextButtonClicked()
{
Main.Instance.MapInteractionLogic.CancelAllHighlight();
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);
UIManager.Instance.GameUI.MainUI.ShowLoadingAndResumeGame(false);
}
private void OnRankingButtonClicked()
{
UIManager.Instance.RankingUI.NeedShow = !UIManager.Instance.RankingUI.NeedShow;
}
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();
}
}
}