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(OnUIEvent); EventBus.Subscribe(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(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; } } }