Nodule refactor

This commit is contained in:
2026-06-24 13:21:16 +02:00
parent 8f2912a174
commit ecea198766
20 changed files with 156 additions and 136 deletions

View File

@@ -1,13 +1,16 @@
using Godot;
using Slimepire.Gameplay.Components;
using Nodule = Slimepire.Gameplay.Nodules.BasicNodule.Nodule;
using Slimepire.Gameplay.Nodules;
namespace Slimepire.Gameplay;
[SceneTree]
public partial class BuildGhost : Node2D
{
private Tube? _tube;
private static readonly PackedScene NoduleScene = GD.Load<PackedScene>(
"res://src/Gameplay/Nodules/BasicNodule/BasicNodule.tscn"
);
private readonly Dictionary<Nodule, Tube> _connectedTubes = [];
[Export]
@@ -15,32 +18,37 @@ public partial class BuildGhost : Node2D
public override void _Ready()
{
// fix: after refactor
// _tubeConnectionArea.ConnectionAdded += ConnectionAdded;
// _tubeConnectionArea.ConnectionRemoved += ConnectionRemoved;
_tubeConnectionArea.AreaEntered += OnAreaEntered;
_tubeConnectionArea.AreaExited += OnAreaExited;
}
private void ConnectionAdded(Nodule nodule)
private void OnAreaEntered(Area2D area)
{
CreateGhostTube(nodule, nodule.GlobalPosition);
ConnectTubePlayer.Play();
if (area.GetParent() is Nodule nodule)
{
CreateGhostTube(nodule, nodule.GlobalPosition);
ConnectTubePlayer.Play();
}
}
private void ConnectionRemoved(Nodule nodule)
private void OnAreaExited(Area2D area)
{
var tube = _connectedTubes.GetValueOrDefault(nodule);
if (tube == null)
return;
if (area.GetParent() is Nodule nodule)
{
var tube = _connectedTubes.GetValueOrDefault(nodule);
if (tube == null)
return;
_connectedTubes.Remove(nodule);
tube.QueueFree();
DisconnectTubePlayer.Play();
_connectedTubes.Remove(nodule);
tube.QueueFree();
DisconnectTubePlayer.Play();
}
}
private void CreateGhostTube(Nodule connectedNodule, Vector2 pos)
{
var tube = Instantiator.Instantiate<Tube>();
tube.Position = pos / 2; // TODO WHYYY????
tube.Position = pos;
_connectedTubes.Add(connectedNodule, tube);
GetParent()?.AddChild(tube);
}
@@ -77,12 +85,9 @@ public partial class BuildGhost : Node2D
if (@event is InputEventMouseButton { Pressed: false, ButtonIndex: MouseButton.Left })
{
var nodule = Instantiator.Instantiate<Nodule>();
var nodule = NoduleScene.Instantiate<Nodule>();
nodule.Position = Position;
GetParent()?.AddChild(nodule);
CleanupBuildMode();
}
}