From 9c8ec486fc0318dad317cbde2eebd5aa172aad49 Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 5 Feb 2025 13:38:36 +0100 Subject: [PATCH] Made gamemanager resilient to not having components --- Scenes/Maps/BossTestArena.tscn | 6 ++++ Scripts/GameManager.cs | 50 ++++++++++++++++++++-------------- 2 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 Scenes/Maps/BossTestArena.tscn diff --git a/Scenes/Maps/BossTestArena.tscn b/Scenes/Maps/BossTestArena.tscn new file mode 100644 index 00000000..746b37af --- /dev/null +++ b/Scenes/Maps/BossTestArena.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://bu5fvatj2j08j"] + +[ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_paetl"] + +[node name="BossTestArena" type="Node2D"] +script = ExtResource("1_paetl") diff --git a/Scripts/GameManager.cs b/Scripts/GameManager.cs index 2300a70a..fde89439 100644 --- a/Scripts/GameManager.cs +++ b/Scripts/GameManager.cs @@ -30,10 +30,14 @@ public partial class GameManager : Node2D // Called when the node enters the scene tree for the first time. public override void _Ready() { - _hud = GetNode("HUD"); - _cameraTarget = GetNode("CameraTarget"); - - _inventoryManager = GetNode("InventoryManager"); + _hud = GetNodeOrNull("HUD"); + if (_hud == null) GD.Print("No HUD in scene."); + + _cameraTarget = GetNodeOrNull("CameraTarget"); + if (_cameraTarget == null) GD.Print("No camera target in scene."); + + _inventoryManager = GetNodeOrNull("InventoryManager"); + if (_inventoryManager == null) GD.Print("No inventory manager in scene."); //_alarmManager = GetNode("AlarmManager"); @@ -44,15 +48,18 @@ public partial class GameManager : Node2D SpawnPlayer(); } - _player.HealthChanged += (newHealth, maxHealth) => _hud.UpdateHealth(newHealth, maxHealth); - - _player.InteractableAreaEntered += (interactable) => _hud.UpdateInteractable(interactable); - - _inventoryManager.ItemAdded += (item) => _hud.AddInventoryItem(item); - _inventoryManager.ItemRemoved += (item) => _hud.RemoveInventoryItem(item); - - //_player.Connect(nameof(_player.HealthChanged), _hud, nameof(_hud.UpdateHealth)); + if (_inventoryManager != null && _hud != null) + { + _inventoryManager.ItemAdded += (item) => _hud.AddInventoryItem(item); + _inventoryManager.ItemRemoved += (item) => _hud.RemoveInventoryItem(item); + } + + if (_player != null && _hud != null) + { + _player.HealthChanged += (newHealth, maxHealth) => _hud.UpdateHealth(newHealth, maxHealth); + _player.InteractableAreaEntered += (interactable) => _hud.UpdateInteractable(interactable); + } } // Called every frame. 'delta' is the elapsed time since the previous frame. @@ -62,16 +69,17 @@ public partial class GameManager : Node2D public void SpawnPlayer() { - if (_player == null) + if (_player != null) return; + //_player = this.CreateChild(PlayerTemplate, PlayerSpawnMarker.Position ); + _player = PlayerTemplate.Instantiate(); + + this.CallDeferred("add_child", _player); + _player.Transform = this.GlobalTransform; + + _player.GlobalPosition = PlayerSpawnMarker.Position; + + if (_cameraTarget != null) { - //_player = this.CreateChild(PlayerTemplate, PlayerSpawnMarker.Position ); - _player = PlayerTemplate.Instantiate(); - - this.CallDeferred("add_child", _player); - _player.Transform = this.GlobalTransform; - - _player.GlobalPosition = PlayerSpawnMarker.Position; - _cameraTarget.Reparent(_player, true); _cameraTarget.GlobalPosition = _player.Position; }