206 lines
6.3 KiB
C#
206 lines
6.3 KiB
C#
// 文件位置建议: 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();
|
||
}
|
||
}
|
||
} |