diff --git a/Babushka.sln.DotSettings.user b/Babushka.sln.DotSettings.user
index d333d51..f9b5097 100644
--- a/Babushka.sln.DotSettings.user
+++ b/Babushka.sln.DotSettings.user
@@ -18,22 +18,11 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- ForceIncluded
- <SessionState ContinuousTestingMode="0" IsActive="True" Name="Tests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
- <TestAncestor>
- <TestId>NUnit3x::A6EF2269-9E64-40D4-BA0A-33CB234E2503::net9.0::BabushkaTest.Tests</TestId>
- </TestAncestor>
-</SessionState>
+
\ No newline at end of file
diff --git a/prefabs/Interactables/trash_object.tscn b/prefabs/Interactables/trash_object.tscn
index 0a9b58f..94c639d 100644
--- a/prefabs/Interactables/trash_object.tscn
+++ b/prefabs/Interactables/trash_object.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Texture2D" uid="uid://bylgmr0skwtrs" path="res://art/farm/farming/farmobjekte/broken tools atlas.png" id="1_k4ca3"]
[ext_resource type="PackedScene" uid="uid://cqc72e4hq6bcd" path="res://prefabs/interactions/interaction_area_2d.tscn" id="2_gcgfd"]
-[ext_resource type="Script" uid="uid://c2cgj153m05sp" path="res://scripts/CSharp/Common/Interactables/TrashObject.cs" id="2_u7jgg"]
+[ext_resource type="Script" uid="uid://d3n8kwva4pxx5" path="res://scripts/CSharp/GameEntity/EntityNodes/TrashEntityNode.cs" id="2_u7jgg"]
[ext_resource type="AudioStream" uid="uid://be6g8b3v3u1ai" path="res://audio/sfx/Kitchen/SFX_Cooking_Knife_PickUp_01.wav" id="3_ktmp7"]
[ext_resource type="AudioStream" uid="uid://cgjsajsdrrn0j" path="res://audio/sfx/Kitchen/SFX_Cooking_Knife_PutDown_01.wav" id="4_ic616"]
[ext_resource type="AudioStream" uid="uid://br4drgupled6c" path="res://audio/sfx/Kitchen/SFX_Cooking_Pot_01.wav" id="5_dx175"]
diff --git a/project.godot b/project.godot
index 33b6217..ef0cf21 100644
--- a/project.godot
+++ b/project.godot
@@ -11,7 +11,7 @@ config_version=5
[application]
config/name="Babushka"
-run/main_scene="uid://bopv10dqm1knc"
+run/main_scene="uid://66pmq4efjip8"
config/features=PackedStringArray("4.5", "C#", "Forward Plus")
run/max_fps=120
boot_splash/fullsize=false
diff --git a/scripts/CSharp/Common/Interactables/TrashObject.cs b/scripts/CSharp/Common/Interactables/TrashObject.cs
index b594db9..6d6229e 100644
--- a/scripts/CSharp/Common/Interactables/TrashObject.cs
+++ b/scripts/CSharp/Common/Interactables/TrashObject.cs
@@ -5,7 +5,7 @@ using Godot.Collections;
///
/// Simple collectible scene objects with saveable state.
///
-public partial class TrashObject : Sprite2D, ISaveable
+public partial class TrashObject : Sprite2D, ISaveable // deprecated
{
private bool _collected;
diff --git a/scripts/CSharp/GameEntity/Entities/PositionalEntity.cs b/scripts/CSharp/GameEntity/Entities/PositionalEntity.cs
index 98bc6b8..8deb49b 100644
--- a/scripts/CSharp/GameEntity/Entities/PositionalEntity.cs
+++ b/scripts/CSharp/GameEntity/Entities/PositionalEntity.cs
@@ -28,5 +28,8 @@ public abstract class PositionalEntity : Entity
// Deals with Instantiation of the node
public abstract void InstantiateEntityNode(Node2D parent);
+
+ // Deals with Removal of the node before the whole scene is unloaded
+ public abstract void RemoveEntityNode();
}
\ No newline at end of file
diff --git a/scripts/CSharp/GameEntity/Entities/TrashEntity.cs b/scripts/CSharp/GameEntity/Entities/TrashEntity.cs
index 718db9c..46e2d44 100644
--- a/scripts/CSharp/GameEntity/Entities/TrashEntity.cs
+++ b/scripts/CSharp/GameEntity/Entities/TrashEntity.cs
@@ -1,3 +1,4 @@
+using Babushka.scripts.CSharp.GameEntity.EntityNodes;
using Babushka.scripts.CSharp.GameEntity.Management;
using Godot;
@@ -8,16 +9,26 @@ public class TrashEntity : PositionalEntity
public override string EntityType => OWN_TYPE_NAME;
public const string OWN_TYPE_NAME = "TrashEntity";
private EntityNodeCreator _creator;
-
+ private TrashEntityNode? _entityNode;
+
public TrashEntity()
{
}
-
+
public override void InstantiateEntityNode(Node2D parent)
{
- if(_creator == null) _creator = EntityManager.Instance.NodeCreator;
+ if (_creator == null) _creator = EntityManager.Instance.NodeCreator;
var entityNode = _creator.InstantiateNode(EntityType);
parent.AddChild(entityNode);
entityNode.GlobalPosition = position;
+ var trashEntityNode = (TrashEntityNode)entityNode;
+ trashEntityNode.Initialize(this);
+ _entityNode = trashEntityNode;
+ }
+
+ public override void RemoveEntityNode()
+ {
+ if(_entityNode.IsValid())
+ _entityNode!.QueueFree();
}
}
\ No newline at end of file
diff --git a/scripts/CSharp/GameEntity/EntityNodes/TrashEntityNode.cs b/scripts/CSharp/GameEntity/EntityNodes/TrashEntityNode.cs
index b546ea4..2aa0dc4 100644
--- a/scripts/CSharp/GameEntity/EntityNodes/TrashEntityNode.cs
+++ b/scripts/CSharp/GameEntity/EntityNodes/TrashEntityNode.cs
@@ -1,4 +1,5 @@
using Babushka.scripts.CSharp.GameEntity.Entities;
+using Babushka.scripts.CSharp.GameEntity.Management;
using Godot;
namespace Babushka.scripts.CSharp.GameEntity.EntityNodes;
@@ -9,8 +10,11 @@ public partial class TrashEntityNode : Node2D
public void Initialize(TrashEntity trashEntity)
{
- _trashEntity = trashEntity;
+ _trashEntity = trashEntity;
+ }
+
+ public void Collect()
+ {
+ EntityManager.Instance.RemoveEntity(_trashEntity);
}
-
-
}
\ No newline at end of file
diff --git a/scripts/CSharp/GameEntity/Management/EntityManager.cs b/scripts/CSharp/GameEntity/Management/EntityManager.cs
index 3e14b1a..749b4c4 100644
--- a/scripts/CSharp/GameEntity/Management/EntityManager.cs
+++ b/scripts/CSharp/GameEntity/Management/EntityManager.cs
@@ -154,4 +154,12 @@ public partial class EntityManager : Node
#endregion
+ public void RemoveEntity(Entity entity)
+ {
+ _allEntities.Remove(entity);
+ if (entity is PositionalEntity positionalEntity)
+ {
+ positionalEntity.RemoveEntityNode();
+ }
+ }
}
\ No newline at end of file
diff --git a/scripts/CSharp/GameEntity/Management/EntityManagerUtil.cs b/scripts/CSharp/GameEntity/Management/EntityManagerUtil.cs
index d39d89b..688b21f 100644
--- a/scripts/CSharp/GameEntity/Management/EntityManagerUtil.cs
+++ b/scripts/CSharp/GameEntity/Management/EntityManagerUtil.cs
@@ -1,4 +1,5 @@
-using PositionalEntity = Babushka.scripts.CSharp.GameEntity.Entities.PositionalEntity;
+using Godot;
+using PositionalEntity = Babushka.scripts.CSharp.GameEntity.Entities.PositionalEntity;
namespace Babushka.scripts.CSharp.GameEntity.Management;
@@ -11,4 +12,11 @@ public static class EntityManagerUtil
self.AddEntity(entity);
}
+
+ public static bool IsValid(this T? node) where T : GodotObject
+ {
+ return node != null
+ && GodotObject.IsInstanceValid(node)
+ && !node.IsQueuedForDeletion();
+ }
}
\ No newline at end of file