global game state manager
							parent
							
								
									3fe3cec651
								
							
						
					
					
						commit
						020337494a
					
				| 
						 | 
				
			
			@ -0,0 +1,34 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.Debug;
 | 
			
		||||
 | 
			
		||||
public partial class DebugConsole : Node
 | 
			
		||||
{
 | 
			
		||||
    public void SetProp(
 | 
			
		||||
        Utils.World world,
 | 
			
		||||
        string entityName,
 | 
			
		||||
        string property,
 | 
			
		||||
        string value)
 | 
			
		||||
    {
 | 
			
		||||
        var ent = world.CurrentMap.Entities.GetNodeOrNull(entityName);
 | 
			
		||||
        if (ent is not null)
 | 
			
		||||
        {
 | 
			
		||||
            ent.Set(property, value);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public string CallMethod(
 | 
			
		||||
        Utils.World world,
 | 
			
		||||
        string entityName,
 | 
			
		||||
        string method,
 | 
			
		||||
        string[] args)
 | 
			
		||||
    {
 | 
			
		||||
        var ent = world.CurrentMap.Entities.GetNodeOrNull(entityName);
 | 
			
		||||
        if (ent is not null)
 | 
			
		||||
        {
 | 
			
		||||
            var returnValue = ent.Call(method, args);
 | 
			
		||||
            return returnValue.ToString();
 | 
			
		||||
        }
 | 
			
		||||
        return "";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -58,4 +58,15 @@ alignment = 1
 | 
			
		|||
visible = false
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
 | 
			
		||||
[node name="DebugUI" type="CanvasLayer" parent="."]
 | 
			
		||||
layer = 2
 | 
			
		||||
 | 
			
		||||
[node name="Control" type="Control" parent="DebugUI"]
 | 
			
		||||
layout_mode = 3
 | 
			
		||||
anchors_preset = 15
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
 | 
			
		||||
[node name="MusicPlayer" type="AudioStreamPlayer" parent="."]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.State.Global;
 | 
			
		||||
 | 
			
		||||
public partial class GlobalState : Node
 | 
			
		||||
{
 | 
			
		||||
    public Utils.World World { get; set; }
 | 
			
		||||
 | 
			
		||||
    public Progression Progression { get; set; }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
using Godot;
 | 
			
		||||
using Godot.Collections;
 | 
			
		||||
 | 
			
		||||
namespace SupaLidlGame.State.Global;
 | 
			
		||||
 | 
			
		||||
public partial class Progression : Resource
 | 
			
		||||
{
 | 
			
		||||
    public Dictionary<PackedScene, bool> BossStatus { get; set; }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,18 @@
 | 
			
		|||
[gd_scene format=3 uid="uid://be8bc4eivsg4s"]
 | 
			
		||||
 | 
			
		||||
[node name="DebugUI" type="Control"]
 | 
			
		||||
layout_mode = 3
 | 
			
		||||
anchors_preset = 15
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
 | 
			
		||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
 | 
			
		||||
layout_mode = 1
 | 
			
		||||
anchors_preset = 12
 | 
			
		||||
anchor_top = 1.0
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -17,6 +17,9 @@ public partial class World : Node2D
 | 
			
		|||
    [Export]
 | 
			
		||||
    public Player CurrentPlayer { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public Boss CurrentBoss { get; set; }
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public UI.UIController UIController { get; set; }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +47,18 @@ public partial class World : Node2D
 | 
			
		|||
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        // check if world already exists
 | 
			
		||||
 | 
			
		||||
        var globalState = GetNode<State.Global.GlobalState>("/root/GlobalState");
 | 
			
		||||
        if (globalState.World is not null)
 | 
			
		||||
        {
 | 
			
		||||
            throw new System.InvalidOperationException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        globalState.World = this;
 | 
			
		||||
 | 
			
		||||
        Godot.RenderingServer.SetDefaultClearColor(Godot.Colors.Black);
 | 
			
		||||
 | 
			
		||||
        if (StartingArea is not null)
 | 
			
		||||
        {
 | 
			
		||||
            LoadScene(StartingArea);
 | 
			
		||||
| 
						 | 
				
			
			@ -74,11 +88,19 @@ public partial class World : Node2D
 | 
			
		|||
 | 
			
		||||
    public void RegisterBoss(Boss boss)
 | 
			
		||||
    {
 | 
			
		||||
        CurrentBoss = boss;
 | 
			
		||||
        UIController.BossBar.Boss = boss;
 | 
			
		||||
        MusicPlayer.Stream = boss.Music;
 | 
			
		||||
        MusicPlayer.Play();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void DeregisterBoss(Boss boss)
 | 
			
		||||
    {
 | 
			
		||||
        CurrentBoss = null;
 | 
			
		||||
        UIController.BossBar.Boss = null;
 | 
			
		||||
        MusicPlayer.Stop();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void LoadMap(Map map)
 | 
			
		||||
    {
 | 
			
		||||
        GD.Print("Loading map " + map.Name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,10 @@ run/main_scene="res://Scenes/Level.tscn"
 | 
			
		|||
config/features=PackedStringArray("4.1", "C#", "Forward Plus")
 | 
			
		||||
config/icon="res://icon.svg"
 | 
			
		||||
 | 
			
		||||
[autoload]
 | 
			
		||||
 | 
			
		||||
DebugConsole="*res://Debug/DebugConsole.cs"
 | 
			
		||||
 | 
			
		||||
[display]
 | 
			
		||||
 | 
			
		||||
window/size/viewport_width=640
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue