Files
test/Assets/PerfectWorld/Scripts/UI/HUDMainGamePlay.cs
T
2026-03-19 17:48:02 +07:00

156 lines
5.0 KiB
C#

using System;
using BrewMonster.Network;
using UnityEngine;
using UnityEngine.UI;
namespace BrewMonster
{
public class HUDMainGamePlay : MonoBehaviour
{
#region Fields
[SerializeField]private Button _escapeBtn;
[SerializeField]private Button _btnTask;
[SerializeField]private Button _btnInvntory;
[SerializeField]private Toggle _btnTeam;
[SerializeField]private Toggle _btnTaskTrace;
[SerializeField]private Transform _taskTraceParent;
[SerializeField]private Button _btnTeamList;
#endregion
private void OnEnable()
{
_escapeBtn.onClick.AddListener(OnEscapeClicked);
_btnTask.onClick.AddListener(OnTaskClicked);
_btnInvntory.onClick.AddListener(OnInventoryClicked);
_btnTeam.onValueChanged.AddListener(OnTeamClicked);
_btnTaskTrace.onValueChanged.AddListener(OnTaskTraceClicked);
_btnTeamList.onClick.AddListener(OnTeamListClicked);
EventBus.Unsubscribe<UIEvent>(OnUIEvent);
EventBus.Subscribe<UIEvent>(OnUIEvent);
}
private void OnDisable()
{
_escapeBtn.onClick.RemoveListener(OnEscapeClicked);
_btnTask.onClick.RemoveListener(OnTaskClicked);
_btnInvntory.onClick.RemoveListener(OnInventoryClicked);
_btnTeam.onValueChanged.RemoveListener(OnTeamClicked);
_btnTaskTrace.onValueChanged.RemoveListener(OnTaskTraceClicked);
_btnTeamList.onClick.RemoveListener(OnTeamListClicked);
EventBus.Unsubscribe<UIEvent>(OnUIEvent);
}
private void OnUIEvent(UIEvent uiEvent)
{
Debug.Log($"[HUDMainGamePlay] OnUIEvent: {uiEvent.EventType}");
switch(uiEvent.EventType)
{
case UIEventType.ShowTrace:
_btnTaskTrace.isOn = true;
break;
case UIEventType.HideTrace:
_btnTaskTrace.isOn = false;
break;
case UIEventType.ShowTeam:
_btnTeam.isOn = true;
break;
case UIEventType.HideTeam:
_btnTeam.isOn = false;
break;
}
}
private void OnTaskClicked()
{
CECUIManager.Instance.ShowUI("Win_Quest");
}
private void OnInventoryClicked()
{
CECUIManager.Instance.ShowUI("Win_Inventory");
}
private void OnTeamClicked(bool isOn)
{
if(isOn)
{
CECUIManager.Instance.ShowUI("Win_ArrangeTeam");
}
else
{
// Hide via stack logic when possible (CECUIManager is stack-driven)
if (string.Equals(CECUIManager.Instance.GetCurrentUI(), "Win_ArrangeTeam", StringComparison.Ordinal))
{
CECUIManager.Instance.HideCurrentUIInStack();
return;
}
// Fallback: if it isn't the current stacked UI, just hide that dialog instance
var dlg = CECUIManager.Instance.GetInGameUIMan()?.GetDialog("Win_ArrangeTeam");
dlg?.Show(false);
}
}
private void OnTaskTraceClicked(bool isOn)
{
if(isOn)
{
//get dialog from InGameUIManager
var taskTrace = CECUIManager.Instance.GetInGameUIMan()?.GetDialog("Win_QuestMinion");
if(taskTrace != null)
{
taskTrace.Show(true);
taskTrace.transform.SetParent(_taskTraceParent);
taskTrace.transform.localPosition = Vector3.zero;
return;
}
}
else
{
var UIManager = CECUIManager.Instance.GetInGameUIMan();
if(UIManager != null)
{
var dlg = UIManager.GetDialog("Win_QuestMinion");
if(dlg != null)
{
dlg.Show(false);
}
}
else
{
return;
}
}
}
private void OnTeamListClicked()
{
CECUIManager.Instance.ShowUI("Win_TeamMain");
}
private void OnEscapeClicked()
{
// Open the exit dialog , not directly exit the game
// return;
if(EC_Game.GetGameRun()?.GetHostPlayer() != null)
{
EC_Game.GetGameRun()?.GetHostPlayer().OnClickBtnEscape();
}
}
}
public enum UIEventType
{
ShowTrace,
HideTrace,
ShowTeam,
HideTeam,
}
public struct UIEvent
{
public UIEventType EventType;
public UIEvent(UIEventType eventType)
{
EventType = eventType;
}
}
}