314 lines
7.9 KiB
C#
314 lines
7.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 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<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);
|
|
}
|
|
}
|
|
|
|
}
|