69 lines
1.7 KiB
C#
69 lines
1.7 KiB
C#
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;
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="levelTileset">Scene that will be loaded</param>
|
|
/// <param name="levelResource">Execution of level</param>
|
|
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;
|
|
}
|
|
}
|