using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; [RequireComponent(typeof(WorldCurver))] public class GameSession : MonoBehaviour,IResettable { public static GameSession Instance { get; private set; } [SerializeField] private Player currentPlayer; private WorldCurver curver; private IInputTranslator inputTranslator; private bool isSessionPaused = false; private bool isInputAlreadyRestricted = false; private void Awake() { Instance = this; Init(); curver = GetComponent(); } private void Start() { if (ApplicationUtil.platform == RuntimePlatform.Android || ApplicationUtil.platform == RuntimePlatform.IPhonePlayer) { //Application.targetFrameRate = 60; } } private void Update() { inputTranslator.Tick(); curver.Tick(); } private void Init() { if (ApplicationUtil.platform == RuntimePlatform.Android || ApplicationUtil.platform == RuntimePlatform.IPhonePlayer) { IBindingHolder touchHolder = new TouchBindingHolder(); inputTranslator = new InputTranslator(touchHolder); } else { IBindingHolder keyHolder = new KeyBindingHolder(); inputTranslator = new InputTranslator(keyHolder); } } public void AddCommandTranslator(ICommandTranslator translator) { inputTranslator.AddCommandTranslator(translator); } public void PauseSession(bool isPaused) { Time.timeScale = isPaused ? 0 : 1; if (!isSessionPaused && inputTranslator.IsTranslationResticted(InputConstants.InGameCommands)) { isInputAlreadyRestricted = true; isSessionPaused = isPaused; return; } if (!inputTranslator.IsTranslationResticted(InputConstants.InGameCommands)) { isInputAlreadyRestricted = false; } isSessionPaused = isPaused; if (isInputAlreadyRestricted) { return; } RestrictInputs(InputConstants.InGameCommands,isRestricted: isPaused); } public void RestrictInputs(List commands,bool isRestricted) { inputTranslator.RestictTranslation(commands, isRestricted); } public void RestartSession() { SceneManager.LoadScene("GameScene", LoadSceneMode.Single); ResetToDefault(); } public void GoToMainMenu() { SceneManager.LoadScene("MainMenu", LoadSceneMode.Single); ResetToDefault(); } public void ResetToDefault() { PauseSession(false); currentPlayer.ResetToDefault(); } }