GameOff2024/Assets/Scripts/Core/PlayerMain.cs
Samir Badi 8f1bc0fa57 Save
2024-11-08 12:30:00 -05:00

65 lines
1.6 KiB
C#

using System;
using GameOff.Player;
using UnityEngine;
namespace GameOff.Core
{
public class PlayerMain : MonoBehaviour
{
public static PlayerMain Instance { get; private set; }
public static void ClearStaticVariables()
{
Instance = null;
}
public event EventHandler<bool> OnStateUpdate;
private PlayerInputHandler _inputHandler;
private IState _currentState;
private PlayerClassState _classState;
private PlayerQuizState _quizState;
private void Awake()
{
if (Instance)
{
Debug.LogError($"PlayerMain already exist! {transform}");
Destroy(gameObject);
return;
}
Instance = this;
_inputHandler = GetComponent<PlayerInputHandler>();
}
private void Start()
{
_inputHandler.OnChangeState += InputHandler_OnChangeState;
_classState = new PlayerClassState();
_quizState = new PlayerQuizState();
_currentState = _classState;
}
private void Update()
{
_currentState.UpdateState();
}
private void InputHandler_OnChangeState(object sender, EventArgs e)
{
bool isQuiz = _currentState is PlayerQuizState;
ChangeState(isQuiz ? _classState: _quizState);
OnStateUpdate?.Invoke(this, !isQuiz);
}
private void ChangeState(IState next)
{
_currentState.ExitState();
_currentState = next;
_currentState.EnterState();
}
}
}