using System; using GameOff.Player; using UnityEngine; namespace GameOff.Core { public class PlayerMain : MonoBehaviour { public static PlayerMain Instance { get; private set; } public event EventHandler 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(); } 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(); } } }