Nodule refactor
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user