TH1/Unity/Assets/Scripts/TH1_UI/Controller/Bottom/UIBottomBottomBarController.cs
2026-05-13 20:46:36 +08:00

206 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 文件位置建议: Assets/Scripts/TH1_UI/Controller/UIAnnounceMajorEventController.cs
using Logic;
using RuntimeData;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Core;
using TH1_Logic.MatchConfig;
using TH1_Logic.Net;
using TH1_UI.Controller.Base;
using TH1_UI.View.Bottom;
using TH1Renderer;
using UnityEngine;
// 确保这里引用了View脚本的命名空间
namespace TH1_UI.Controller.Bottom
{
public class UIBottomBottomBarController : ViewController<UIBottomBottomBarView> // 泛型参数是对应的View脚本
{
/// <summary>
/// ✅ 【新增】一个空的构造函数,以满足 ViewControllerManager._CreateView 的 new() 泛型约束。
/// </summary>
public UIBottomBottomBarController() { }
protected override void RegisterEventCallback()
{
base.RegisterEventCallback();
if (WindowScript != null)
{
WindowScript.OnBtnCloseClick += _OnBtnCloseClick;
WindowScript.OnBtnQuitClick += _OnBtnQuitClick;
}
}
protected override void UnregisterEventCallback()
{
if (WindowScript != null)
{
WindowScript.OnBtnCloseClick = null;
}
base.UnregisterEventCallback();
}
public void TryTabUnit()
{
if(WindowScript.TabButton.gameObject.activeSelf)
WindowScript.TabButton.onClick.Invoke();
}
public override void OnMatchStart()
{
//比赛开始时,如果当前是自己的回合
Open();
if (Main.MapData.CurPlayer == Main.MapData.PlayerMap.SelfPlayerData)
{
ShowBottomBarTabUnit();
ShowBottomBarNextTurn();
}
else
{
HideBottomBarNextTurn();
HideBottomBarTabUnit();
}
}
public void OnTurnStart()
{
}
protected override void OnOpen()
{
base.OnOpen();
WindowScript.SetContent();
// 检查暂存的参数是否存在且类型正确
/*if (_openParameter is ShowUIBottomBottomBar evt)
{
// 使用接收到的数据设置UI内容
if (WindowScript != null)
{
WindowScript.SetContent();
}
}
else
{
// 如果没有参数或参数类型不符,可以提供默认内容或打印警告
Debug.LogWarning("[UIInfoTechTree] Opened without valid parameters.");
if (WindowScript != null)
{
//WindowScript.SetContent("警告", "内容未提供");
}
}*/
}
public override bool Close()
{
WindowScript.CloseView();
return base.Close();
}
public void ShowBottomBarNextTurn()
{
WindowScript.ShowBottomBarNextTurn();
}
public void HideBottomBarNextTurn()
{
WindowScript.HideBottomBarNextTurn();
}
public void ShowBottomBarTabUnit()
{
WindowScript.ShowBottomBarTabUnit();
}
public void HideBottomBarTabUnit()
{
WindowScript.HideBottomBarTabUnit();
}
public void BottomBarQuit()
{
_OnBtnCloseClick();
_OnBtnQuitClick();
}
//用于刷新heroButton的视觉
public void UpdateHeroAvatar()
{
WindowScript.UpdateHeroButtonAvatar();
}
public void ExecuteTechButtonClick()
{
WindowScript.ExecuteButtonClick(WindowScript.TechButton);
}
public void ExecuteHeroButtonClick()
{
WindowScript.ExecuteButtonClick(WindowScript.HeroButton);
}
public void ExecuteNextButtonClick()
{
WindowScript.ExecuteButtonClick(WindowScript.NextButton);
}
public override void AfterMatchStart()
{
RefreshLimitEffects();
}
/// <summary>
/// 根据当前 MatchLimits 重新评估底栏按钮的显示状态。
/// 调用时机AfterMatchStart初始化+ OnMatchLimitsChanged 事件(任务解除限制时)。
/// 关键 bug 修复点:原本只在 AfterMatchStart 跑一次Tutor 任务解除 PlayerCannotNextTurn 后按钮不刷新,
/// 玩家无法点 NextTurn 进入下一回合(死锁)。改为统一入口后由事件驱动。
/// </summary>
public void RefreshLimitEffects()
{
if (Main.MapData == null) return;
if (WindowScript == null) return;
bool ShowTech = true;
bool ShowHero = true;
bool ShowTab = true;
bool ShowNextTurn = true;
if (Main.MapData.MatchSettlement.SettlementType == MatchSettlementType.Tutor)
{
if(Main.MapData.MapConfig.MatchLimits.Contains(MatchLimitType.PlayerCannotLearnTech))
ShowTech = false;
if(Main.MapData.MapConfig.MatchLimits.Contains(MatchLimitType.PlayerCannotSelectHero))
ShowHero = false;
ShowTab = false;
if(Main.MapData.MapConfig.MatchLimits.Contains(MatchLimitType.PlayerCannotNextTurn))
ShowNextTurn = false;
}
WindowScript.SetTechButtonVisible(ShowTech);
WindowScript.SetHeroButtonVisible(ShowHero);
WindowScript.SetTabButtonVisible(ShowTab);
WindowScript.SetNextTurnButtonVisible(ShowNextTurn);
}
void _OnBtnQuitClick()
{
if(Main.MapData?.Net.Mode == NetMode.Multi)
LobbyManager.Instance.Lobby?.LeaveLobby();
MapRenderer.Instance.OnMatchEnd();
UIManager.Instance.OnMatchEnd();
EventManager.Publish(new ShowUIOutsideMenu());
Main.Instance.GameLogic.ChangeState(GameState.Menu);
}
void _OnBtnCloseClick()
{
Close();
}
}
}