using System.Collections; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; /// /// This class contains the function to call when play button is pressed /// public class StartGame : MonoBehaviour { [SerializeField] private GameSceneSO _locationsToLoad; [SerializeField] private SaveSystem _saveSystem = default; [SerializeField] private bool _showLoadScreen = default; [Header("Broadcasting on")] [SerializeField] private LoadEventChannelSO _loadLocation = default; [Header("Listening to")] [SerializeField] private VoidEventChannelSO _onNewGameButton = default; [SerializeField] private VoidEventChannelSO _onContinueButton = default; private bool _hasSaveData; private void Start() { _hasSaveData = _saveSystem.LoadSaveDataFromDisk(); _onNewGameButton.OnEventRaised += StartNewGame; _onContinueButton.OnEventRaised += ContinuePreviousGame; } private void OnDestroy() { _onNewGameButton.OnEventRaised -= StartNewGame; _onContinueButton.OnEventRaised -= ContinuePreviousGame; } private void StartNewGame() { _hasSaveData = false; _saveSystem. WriteEmptySaveFile(); _saveSystem.SetNewGameData(); _loadLocation.RaiseEvent(_locationsToLoad, _showLoadScreen); } private void ContinuePreviousGame() { StartCoroutine(LoadSaveGame()); } private void OnResetSaveDataPress() { _hasSaveData = false; } private IEnumerator LoadSaveGame() { yield return StartCoroutine(_saveSystem.LoadSavedInventory()); _saveSystem.LoadSavedQuestlineStatus(); var locationGuid = _saveSystem.saveData._locationId; var asyncOperationHandle = Addressables.LoadAssetAsync(locationGuid); yield return asyncOperationHandle; if (asyncOperationHandle.Status == AsyncOperationStatus.Succeeded) { LocationSO locationSO = asyncOperationHandle.Result; _loadLocation.RaiseEvent(locationSO, _showLoadScreen); } } }