Files
fracturepoint/Assets/Scripts/LevelScripts/LevelManager.cs
2026-01-19 10:41:03 -07:00

76 lines
3.0 KiB
C#

using Godot;
using System;
public partial class LevelManager : Node
{
Node2D StartNode;
Node2D EndNode;
Node2D Player;
string EndType = "nothing";
public override void _Ready()
{
GetTree().Root.GetNode<CommonData>("CommonData").CurrentHealth = GetTree().Root.GetNode<CommonData>("CommonData").MaxHealth;
StartNode = GetParent().GetNode<Node2D>("StartNode");
EndNode = GetParent().GetNode<Node2D>("EndNode");
Player = GetParent().GetNode<Node2D>("Player");
// Play into animation
GetParent().GetNode("ScreenAnimations").GetNode("LevelStartAssets").GetNode<AnimationPlayer>("LevelStart").CurrentAnimation = "default";
GetParent().GetNode("ScreenAnimations").GetNode<Node2D>("LevelStartAssets").Reparent(GetTree().Root.GetNode("Camera").GetNode("Camera2D"));
GetTree().Root.GetNode("Camera").GetNode("Camera2D").GetNode<Node2D>("LevelStartAssets").GlobalPosition = GetTree().Root.GetNode("Camera").GetNode<Node2D>("Camera2D").GlobalPosition;
GetTree().Root.GetNode("Camera").GetNode("Camera2D").GetNode<Node2D>("LevelStartAssets").Visible = true;
}
public override void _Process(double delta)
{
// Manage conditions to end the level
if (EndType == "nothing")
{
// Death
if (GetTree().Root.GetNode<CommonData>("CommonData").CurrentHealth <= 0)
{
EndManager("Death");
EndType = "Death";
}
// Success
if (GetParent().HasNode("Player") && Player.GlobalPosition.DistanceTo(EndNode.GlobalPosition) <= 16)
{
EndManager("Success");
EndType = "Success";
}
}
}
public void EndManager(string EndType)
{
switch (EndType)
{
case "Death": // Player Died
//Player.QueueFree();
// Go back to main menu (Replace with proper ending screen and then send back to main menu)
GetNode<ChangeMenuInitiator>("ChangeMenuInitiator").ChangeMenu("FAST", "MainMenu", GetParent());
break;
case "Success": // Success
// Remove the player to stop checking
//Player.QueueFree();
// Add level completed to the hash set
GetTree().Root.GetNode<CommonData>("CommonData").LevelsCompleted.Add(GetParent().Name);
// Play exit animation
GetParent().GetNode("ScreenAnimations").GetNode("LevelCompleteAssets").GetNode<AnimationPlayer>("LevelComplete").CurrentAnimation = "default";
GetParent().GetNode("ScreenAnimations").GetNode<Node2D>("LevelCompleteAssets").Reparent(GetTree().Root.GetNode("Camera").GetNode("Camera2D"));
GetTree().Root.GetNode("Camera").GetNode("Camera2D").GetNode<Node2D>("LevelCompleteAssets").GlobalPosition = GetTree().Root.GetNode("Camera").GetNode<Node2D>("Camera2D").GlobalPosition;
GetTree().Root.GetNode("Camera").GetNode("Camera2D").GetNode<Node2D>("LevelCompleteAssets").Visible = true;
// Go to exit cutscene after exit animation is complete
var LevelName = (string)GetParent().Name;
var LevelNumber = LevelName.Split("Level");
GetNode<ChangeMenuInitiator>("ChangeMenuInitiator").ChangeMenu("SLOW", $"Cutscenes/ExitCutscene{LevelNumber[0]}", GetParent());
break;
default:
break;
}
}
}