using Godot;
using Newlon.Components.Level;
using Newlon.Resources;
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;
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)
{
pathToInitiator = GetTree().CurrentScene.SceneFilePath;
RuntimeLevelData.LevelResource = levelResource;
GetTree().ChangeSceneToPacked(levelTileset);
}
public void RestartLevel()
{
var resource = RuntimeLevelData.LevelResource;
GetTree().ReloadCurrentScene();
RuntimeLevelData.LevelResource = resource;
}
public void EndLevel()
{
RuntimeLevelData.LevelResource = null;
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;
}
}