Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / UI / HUDManager.cs
using MyCollections.Managers;
using UnityEngine;

public class HUDManager : MonoBehaviour
{
    private GameStateManager gameStateManager;

    [SerializeField] private GameObject pauseMenuPanel;
    [SerializeField] private PlayerInventoryUI playerInventoryUI;

    [SerializeField] private HUDMode currentHUDMode;

    private void Awake()
    {
 
    }

    private void Start()
    {
        currentHUDMode = HUDMode.None;
        gameStateManager = GameStateManager.Instance;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(InputManager.GetKey(InputAction.PauseGame)))
        {
            TogglePauseGame();
        }

        if (Input.GetKeyDown(InputManager.GetKey(InputAction.Inventory)))
        {
            ToggleInventory();
        }
    }

    public void TogglePauseGame()
    {
        if (currentHUDMode != HUDMode.PauseGame)
        {
            SetHUDMode(HUDMode.PauseGame);
        }
        else
        {
            SetHUDMode(HUDMode.None);
        }
    }

    private void ToggleInventory()
    {
        if (currentHUDMode != HUDMode.Inventory)
        {
            SetHUDMode(HUDMode.Inventory);
        }
        else
        {
            SetHUDMode(HUDMode.None);
        }
    }

    public void SetHUDMode(HUDMode newMode)
    {
        // Ensure gameStateManager is assigned
        if (gameStateManager == null)
        {
            Debug.LogError("GameStateManager is not assigned.");
            return;
        }

        // Close currently active HUD elements
        CloseAllHUD();

        // Activate the selected HUD mode
        switch (newMode)
        {
            case HUDMode.None:
                gameStateManager.ResumeGame();
                Cursor.visible = false;
                break;

            case HUDMode.Inventory:
                if (playerInventoryUI == null)
                {
                    Debug.LogError("Inventory Panel is null in SetHUDMode.");
                    return;
                }
                playerInventoryUI.DisplayGrid(true);
                Cursor.visible = true;
                break;

            case HUDMode.PauseGame:
                gameStateManager.PauseGame();
                pauseMenuPanel.SetActive(true);
                Cursor.visible = true;
                break;
        }

        currentHUDMode = newMode;
    }

    private void CloseAllHUD()
    {
        // Deactivate all HUD panels
        pauseMenuPanel.SetActive(false);
        playerInventoryUI.DisplayGrid(false);
    }

    public void OnDestroy()
    {
        Cursor.visible = false;
    }

}

public enum HUDMode
{
    None,
    PauseGame,
    Inventory,
}