using Godot; using Newlon.Components.Level; namespace Newlon; // // Class that gives access to level data, pools and etc. // public partial class LevelController : Node { const string REWARD_SCENE_UID = "uid://cwck7e1tt057k"; public static LevelController Instance { get; private set; } public RewardResource Reward { get; private set; } private string pathToInitiator; private bool _isLevelRunning = false; public override void _EnterTree() { Instance = this; } public override void _ExitTree() { Instance = null; } /// /// /// /// Scene that will be loaded /// Execution of level public void StartLevel(PackedScene levelTileset, AdventureLevelResource levelResource) { if (_isLevelRunning) return; pathToInitiator = GetTree().CurrentScene.SceneFilePath; RuntimeLevelData.LevelResource = levelResource; GetTree().ChangeSceneToPacked(levelTileset); _isLevelRunning = true; } public void RestartLevel() { var resource = RuntimeLevelData.LevelResource; GetTree().ReloadCurrentScene(); RuntimeLevelData.LevelResource = resource; } public void EndLevel() { if (_isLevelRunning == false) return; RuntimeLevelData.LevelResource = null; _isLevelRunning = false; if (Reward != null) { GetTree().ChangeSceneToFile(REWARD_SCENE_UID); } else { ReturnToInitiator(); } } public void ReturnToInitiator() { if (pathToInitiator == null) return; GetTree().ChangeSceneToFile(pathToInitiator); pathToInitiator = null; } public void SetReward(RewardResource reward) { Reward = reward; } }