newlon/scripts/level/RuntimeLevelData.cs

98 lines
2.3 KiB
C#

using System;
using Godot;
namespace Newlon.Components.Level;
public partial class RuntimeLevelData : Node
{
public enum LevelStates
{
ChooseYourSeeds,
Pregame,
Game,
Win,
Loose
}
[Export]
public float SunCount { get; private set; } = 0;
[Export]
private LevelRunner levelRunner;
[Export]
private AnimationPlayer player;
[Signal]
public delegate void OnLevelStateChangedEventHandler(LevelStates state);
public static RuntimeLevelData Instance { get; private set; }
public static AdventureLevelResource LevelResource { get; set; }
private LevelStates _currentState = LevelStates.ChooseYourSeeds;
public override void _Ready()
{
Instance = this;
GetTree().Paused = true;
Engine.TimeScale = 1.0;
SetLevelState(LevelStates.ChooseYourSeeds);
}
#region Sun
public void AddSun(float amount)
{
SunCount += amount;
}
public void SpendSun(float amount)
{
SunCount -= amount;
}
public bool CheckSpendSun(float amount)
{
if (SunCount - amount < 0) return false;
return true;
}
#endregion
public void SetLevelState(LevelStates state)
{
EmitSignal(SignalName.OnLevelStateChanged, (int)state);
_currentState = state;
switch (_currentState)
{
case LevelStates.ChooseYourSeeds:
player.Play("CYS_Sequence");
break;
case LevelStates.Pregame:
player.Play("PG_Sequence");
break;
case LevelStates.Game:
GetTree().Paused = false;
levelRunner.SetLevelResource(LevelResource);
break;
case LevelStates.Win:
break;
case LevelStates.Loose:
break;
}
}
public LevelStates GetLevelState()
{
return _currentState;
}
public override void _ExitTree()
{
LevelController.Instance.EndLevel();
}
//private Array<PlantResource> _selectedPlants;
//private bool _selected;
//public Array<PlantResource> GetSelectedPlants();
//public bool TrySelectPlants(Array<PlantResource>);
//public void ResetSelection();
}