Add next level command and refactor player retrieval in GameManager; update scene files for consistency

This commit is contained in:
2025-08-26 23:23:02 +02:00
parent 6c733d3159
commit afca70e6c6
5 changed files with 43 additions and 14 deletions

View File

@@ -149,4 +149,10 @@ public partial class ConsoleManager : Node
LimboConsole.Info("All skills have been deactivated."); LimboConsole.Info("All skills have been deactivated.");
} }
[ConsoleCommand("next_level", "Advances the game to the next level.")]
private void GoToNextLevelCommand()
{
_gameManager.OnLevelComplete();
}
} }

View File

@@ -11,9 +11,13 @@ public partial class GameManager : Node
{ {
[Export] public Array<PackedScene> LevelScenes { get; set; } = []; [Export] public Array<PackedScene> LevelScenes { get; set; } = [];
public PlayerController Player { get; set; } public PlayerController Player {
get => GetPlayer();
private set => _player = value;
}
private List<Node> _sceneNodes = []; private List<Node> _sceneNodes = [];
private PlayerController _player;
[Export] [Export]
public Dictionary PlayerState { get; set; } = new() public Dictionary PlayerState { get; set; } = new()
@@ -227,14 +231,14 @@ public partial class GameManager : Node
public PlayerController GetPlayer() public PlayerController GetPlayer()
{ {
if (Player != null) return Player; if (_player != null) return _player;
foreach (var node in _sceneNodes) foreach (var node in _sceneNodes)
{ {
if (node is not PlayerController player) continue; if (node is not PlayerController player) continue;
Player = player; _player = player;
return Player; return _player;
} }
GD.PrintErr("PlayerController not found in the scene tree."); GD.PrintErr("PlayerController not found in the scene tree.");

View File

@@ -54,14 +54,11 @@ VisibilityNotifier = NodePath("../VisibleOnScreenNotifier2D")
[node name="LaunchComponent" type="Node2D" parent="."] [node name="LaunchComponent" type="Node2D" parent="."]
script = ExtResource("7_67bn4") script = ExtResource("7_67bn4")
Speed = 200.0 Speed = 200.0
metadata/_custom_type_script = "uid://873un8agkyja"
[node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")] [node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
script = ExtResource("8_5ybdf") script = ExtResource("8_5ybdf")
LaunchComponent = NodePath("../LaunchComponent") LaunchComponent = NodePath("../LaunchComponent")
metadata/_custom_type_script = "uid://cvcnfrr1udco5"
[node name="ProjectileInitComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")] [node name="ProjectileInitComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
script = ExtResource("9_b1kpf") script = ExtResource("9_b1kpf")
LaunchComponent = NodePath("../LaunchComponent") LaunchComponent = NodePath("../LaunchComponent")
metadata/_custom_type_script = "uid://bgty7040ams6s"

View File

@@ -1,9 +1,10 @@
[gd_scene load_steps=10 format=3 uid="uid://bcmx07k12gcsc"] [gd_scene load_steps=11 format=3 uid="uid://bcmx07k12gcsc"]
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_xusxl"] [ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_xusxl"]
[ext_resource type="Script" uid="uid://cfw8nbrarex0i" path="res://scripts/components/BulletComponent.cs" id="2_xvjl0"] [ext_resource type="Script" uid="uid://cfw8nbrarex0i" path="res://scripts/components/BulletComponent.cs" id="2_xvjl0"]
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="3_22hnt"] [ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="3_22hnt"]
[ext_resource type="Script" uid="uid://xjq33vj0rol0" path="res://scripts/components/EffectInflictorComponent.cs" id="4_22hnt"] [ext_resource type="Script" uid="uid://xjq33vj0rol0" path="res://scripts/components/EffectInflictorComponent.cs" id="4_22hnt"]
[ext_resource type="Resource" uid="uid://02l4nbnf2aft" path="res://resources/status_effect/ice.tres" id="4_xvjl0"]
[ext_resource type="Script" uid="uid://cs6u3sh68f43j" path="res://scripts/components/OutOfScreenComponent.cs" id="5_xvjl0"] [ext_resource type="Script" uid="uid://cs6u3sh68f43j" path="res://scripts/components/OutOfScreenComponent.cs" id="5_xvjl0"]
[ext_resource type="Script" uid="uid://c7p06t0eax8am" path="res://scripts/components/StraightMotionComponent.cs" id="6_6nrp8"] [ext_resource type="Script" uid="uid://c7p06t0eax8am" path="res://scripts/components/StraightMotionComponent.cs" id="6_6nrp8"]
[ext_resource type="Script" uid="uid://cbexrnnj47f87" path="res://scripts/components/LaunchComponent.cs" id="7_oml3k"] [ext_resource type="Script" uid="uid://cbexrnnj47f87" path="res://scripts/components/LaunchComponent.cs" id="7_oml3k"]
@@ -36,9 +37,11 @@ scale = Vector2(0.8, 0.5)
[node name="Timer" type="Timer" parent="."] [node name="Timer" type="Timer" parent="."]
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")] [node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area", "DamageTimer")]
script = ExtResource("3_22hnt") script = ExtResource("3_22hnt")
Area = NodePath("..") Area = NodePath("..")
StatusEffectData = ExtResource("4_xvjl0")
DamageTimer = NodePath("../Timer")
[node name="EffectInflictorComponent" type="Node" parent="." node_paths=PackedStringArray("Damage")] [node name="EffectInflictorComponent" type="Node" parent="." node_paths=PackedStringArray("Damage")]
script = ExtResource("4_22hnt") script = ExtResource("4_22hnt")
@@ -51,14 +54,11 @@ VisibilityNotifier = NodePath("../VisibleOnScreenNotifier2D")
[node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")] [node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
script = ExtResource("6_6nrp8") script = ExtResource("6_6nrp8")
LaunchComponent = NodePath("../LaunchComponent") LaunchComponent = NodePath("../LaunchComponent")
metadata/_custom_type_script = "uid://cvcnfrr1udco5"
[node name="LaunchComponent" type="Node2D" parent="."] [node name="LaunchComponent" type="Node2D" parent="."]
script = ExtResource("7_oml3k") script = ExtResource("7_oml3k")
Speed = 170.0 Speed = 170.0
metadata/_custom_type_script = "uid://873un8agkyja"
[node name="ProjectileInitComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")] [node name="ProjectileInitComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
script = ExtResource("8_22hnt") script = ExtResource("8_22hnt")
LaunchComponent = NodePath("../LaunchComponent") LaunchComponent = NodePath("../LaunchComponent")
metadata/_custom_type_script = "uid://bgty7040ams6s"

View File

@@ -29,7 +29,7 @@ public partial class MagneticSkillComponent : Node, ISkill
private void OnBodyEntered(Node2D body) private void OnBodyEntered(Node2D body)
{ {
if (!HasComponentInChildren(body, "Collectable")) return; if (!HasComponentInChildren(body, "CollectableComponent")) return;
if (_collectablesToPickUp.Contains(body)) return; if (_collectablesToPickUp.Contains(body)) return;
_collectablesToPickUp.Add(body); _collectablesToPickUp.Add(body);
@@ -37,7 +37,7 @@ public partial class MagneticSkillComponent : Node, ISkill
private void OnAreaEntered(Area2D area) private void OnAreaEntered(Area2D area)
{ {
if (!HasComponentInChildren(area, "Collectable")) return; if (!HasComponentInChildren(area, "CollectableComponent")) return;
if (_collectablesToPickUp.Contains(area)) return; if (_collectablesToPickUp.Contains(area)) return;
_collectablesToPickUp.Add(area); _collectablesToPickUp.Add(area);
@@ -77,16 +77,38 @@ public partial class MagneticSkillComponent : Node, ISkill
{ {
GD.PushWarning("MagneticSkillComponent: Owner is not a Node2D."); GD.PushWarning("MagneticSkillComponent: Owner is not a Node2D.");
} }
if (MagneticArea == null)
{
if (owner is Area2D area2D) MagneticArea = area2D;
else
{
MagneticArea = owner.GetNodeOrNull<Area2D>("MagneticArea");
if (MagneticArea == null)
{
GD.PushError("MagneticSkillComponent: MagneticArea is not set.");
return;
}
}
}
} }
public void Activate() public void Activate()
{ {
if (MagneticArea == null)
{
GD.PushError("MagneticSkillComponent: MagneticArea is not set.");
return;
}
MagneticArea.BodyEntered += OnBodyEntered; MagneticArea.BodyEntered += OnBodyEntered;
MagneticArea.AreaEntered += OnAreaEntered; MagneticArea.AreaEntered += OnAreaEntered;
} }
public void Deactivate() public void Deactivate()
{ {
if (MagneticArea == null) return;
MagneticArea.BodyEntered -= OnBodyEntered; MagneticArea.BodyEntered -= OnBodyEntered;
MagneticArea.AreaEntered -= OnAreaEntered; MagneticArea.AreaEntered -= OnAreaEntered;
} }