217 lines
5.9 KiB
C#
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);
|
|
}
|
|
}
|
|
|
|
}
|