From 00a79e55de0488ff0e3311b8d2916c49401ca46f Mon Sep 17 00:00:00 2001 From: Jens Becker Date: Wed, 17 Jun 2026 17:41:28 +0200 Subject: [PATCH] Stuff --- assets/sfx/tube_connect.wav | Bin 0 -> 21766 bytes assets/sfx/tube_connect.wav.import | 24 +++++++ assets/sfx/tube_connect_2.wav | Bin 0 -> 25748 bytes assets/sfx/tube_connect_2.wav.import | 24 +++++++ assets/sfx/tube_disconnect.wav | Bin 0 -> 23076 bytes assets/sfx/tube_disconnect.wav.import | 24 +++++++ default_bus_layout.tres | 9 +++ project.godot | 8 +++ src/Gameplay/BuildGhost.cs | 68 ++++++++++++++++-- src/Gameplay/BuildGhost.tscn | 63 ++++++++++++++-- .../{TubeManager.cs => NoduleManager.cs} | 17 ++--- ...ubeManager.cs.uid => NoduleManager.cs.uid} | 0 src/Gameplay/Nodules/Nodule.cs | 22 +++--- src/Gameplay/Nodules/Nodule.tscn | 2 + src/Gameplay/Tube.cs | 2 +- 15 files changed, 228 insertions(+), 35 deletions(-) create mode 100644 assets/sfx/tube_connect.wav create mode 100644 assets/sfx/tube_connect.wav.import create mode 100644 assets/sfx/tube_connect_2.wav create mode 100644 assets/sfx/tube_connect_2.wav.import create mode 100644 assets/sfx/tube_disconnect.wav create mode 100644 assets/sfx/tube_disconnect.wav.import create mode 100644 default_bus_layout.tres rename src/Gameplay/{TubeManager.cs => NoduleManager.cs} (84%) rename src/Gameplay/{TubeManager.cs.uid => NoduleManager.cs.uid} (100%) diff --git a/assets/sfx/tube_connect.wav b/assets/sfx/tube_connect.wav new file mode 100644 index 0000000000000000000000000000000000000000..d879b836bc91af5dfa536169c9828c995d2eb3c6 GIT binary patch literal 21766 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ⅅAKHyLa7LBP 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 OnBuild; private Tube? _tube; + private readonly Dictionary _connectedTubes = []; public override void _Ready() { - _tube = Instantiator.Instantiate(); - _tube.Position = Position / 2; // TODO WHYYY???? - GetParent()?.AddChild(_tube); + TubeConnectionArea.AreaEntered += TubeConnectionAreaOnAreaEntered; + TubeConnectionArea.AreaExited += TubeConnectionAreaOnAreaExited; + } + + private void TubeConnectionAreaOnAreaEntered(Area2D area) + { + if (area.GetParent() is Nodule nodule) + { + CreateGhostTube(nodule, area.GlobalPosition); + ConnectTubePlayer.Play(); + } + } + + private void TubeConnectionAreaOnAreaExited(Area2D area) + { + if (area.GetParent() is Nodule nodule) + { + var tube = _connectedTubes.GetValueOrDefault(nodule); + if (tube == null) + return; + + _connectedTubes.Remove(nodule); + tube.QueueFree(); + DisconnectTubePlayer.Play(); + } + } + + private void CreateGhostTube(Nodule connectedNodule, Vector2 pos) + { + var tube = Instantiator.Instantiate(); + tube.Position = pos / 2; // TODO WHYYY???? + _connectedTubes.Add(connectedNodule, tube); + GetParent()?.AddChild(tube); } public override void _Process(double delta) { GlobalPosition = GetGlobalMousePosition(); - _tube?.SetTarget(GlobalPosition); + foreach (var (_, tube) in _connectedTubes) + { + tube.SetTarget(GlobalPosition); + } + } + + public override void _UnhandledKeyInput(InputEvent @event) + { + using (@event) + { + if (@event is InputEventKey { Keycode: Key.Escape, Pressed: true }) + { + NoduleManager.Instance.Building = false; + QueueFree(); + } + } } public override void _UnhandledInput(InputEvent @event) @@ -27,9 +74,20 @@ public partial class BuildGhost : Node2D { if (@event is InputEventMouseButton { Pressed: false, ButtonIndex: MouseButton.Left }) { + NoduleManager.Instance.Building = false; OnBuild?.Invoke(GlobalPosition); - _tube?.QueueFree(); + var nodule = Instantiator.Instantiate(); + + nodule.Position = Position; + GetParent()?.AddChild(nodule); + + foreach (var (_, tube) in _connectedTubes) + { + tube.QueueFree(); + } + + _connectedTubes.Clear(); QueueFree(); GetViewport().SetInputAsHandled(); diff --git a/src/Gameplay/BuildGhost.tscn b/src/Gameplay/BuildGhost.tscn index 39ed100..788dc5e 100644 --- a/src/Gameplay/BuildGhost.tscn +++ b/src/Gameplay/BuildGhost.tscn @@ -1,12 +1,65 @@ [gd_scene format=3 uid="uid://c3n70a52kk34f"] [ext_resource type="Script" uid="uid://ck5yw760bu8sb" path="res://src/Gameplay/BuildGhost.cs" id="1_ahcoi"] -[ext_resource type="Texture2D" uid="uid://ddduid7esr36f" path="res://assets/icon.svg" id="2_uo42j"] +[ext_resource type="Texture2D" uid="uid://cecg47efx7gw8" path="res://assets/Sprite-0001.png" id="2_uo42j"] +[ext_resource type="AudioStream" uid="uid://mj8wvuwfc6o7" path="res://assets/sfx/tube_disconnect.wav" id="3_nxaxp"] +[ext_resource type="AudioStream" uid="uid://bxxi7grsubvgm" path="res://assets/sfx/tube_connect.wav" id="3_quiac"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_uo42j"] +atlas = ExtResource("2_uo42j") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_nxaxp"] +atlas = ExtResource("2_uo42j") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_quiac"] +atlas = ExtResource("2_uo42j") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_vecmk"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_uo42j") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_nxaxp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_quiac") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_uo42j"] +radius = 96.38 [node name="BuildGhost" type="Node2D" unique_id=150653292] script = ExtResource("1_ahcoi") -[node name="Sprite2D" type="Sprite2D" parent="." unique_id=218448453] -modulate = Color(0.32941177, 0.29411766, 0.2901961, 0.5764706) -scale = Vector2(0.3, 0.3) -texture = ExtResource("2_uo42j") +[node name="Sprite2D" type="AnimatedSprite2D" parent="." unique_id=260566565] +self_modulate = Color(0.1752002, 0.36830294, 0.26058322, 0.50980395) +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_vecmk") + +[node name="TubeConnectionArea" type="Area2D" parent="." unique_id=2116427547] +unique_name_in_owner = true +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="TubeConnectionArea" unique_id=1558952717] +shape = SubResource("CircleShape2D_uo42j") +debug_color = Color(0.38922516, 0.6054754, 0.25354394, 0.41960785) + +[node name="ConnectTubePlayer" type="AudioStreamPlayer" parent="." unique_id=111889028] +unique_name_in_owner = true +stream = ExtResource("3_quiac") +bus = &"SoundFX" + +[node name="DisconnectTubePlayer" type="AudioStreamPlayer" parent="." unique_id=1165411609] +unique_name_in_owner = true +stream = ExtResource("3_nxaxp") +bus = &"SoundFX" diff --git a/src/Gameplay/TubeManager.cs b/src/Gameplay/NoduleManager.cs similarity index 84% rename from src/Gameplay/TubeManager.cs rename to src/Gameplay/NoduleManager.cs index 8fdbf98..fc317fd 100644 --- a/src/Gameplay/TubeManager.cs +++ b/src/Gameplay/NoduleManager.cs @@ -4,22 +4,17 @@ using Slimepire.Gameplay.Nodules; namespace Slimepire.Gameplay; [Singleton] -public partial class TubeManager +public partial class NoduleManager { - private Nodule? _root; + public bool Building { get; set; } - private List _nodules = []; - private HashSet _connections = []; - private Dictionary _tubeConnections = new(); - private List _tubes = []; + private readonly List _nodules = []; + private readonly HashSet _connections = []; + private readonly Dictionary _tubeConnections = new(); + private readonly List _tubes = []; public void RegisterNodule(Nodule nodule) { - if (nodule.IsRoot) - { - _root = nodule; - } - _nodules.Add(nodule); UpdateNoduleConnections(); diff --git a/src/Gameplay/TubeManager.cs.uid b/src/Gameplay/NoduleManager.cs.uid similarity index 100% rename from src/Gameplay/TubeManager.cs.uid rename to src/Gameplay/NoduleManager.cs.uid diff --git a/src/Gameplay/Nodules/Nodule.cs b/src/Gameplay/Nodules/Nodule.cs index 29dc86c..c886af2 100644 --- a/src/Gameplay/Nodules/Nodule.cs +++ b/src/Gameplay/Nodules/Nodule.cs @@ -5,11 +5,6 @@ namespace Slimepire.Gameplay.Nodules; [SceneTree] public partial class Nodule : Node2D { - [Export] - public bool IsRoot; - - private BuildGhost? _ghost; - private bool _mouseInsideClickArea; private bool _clickedInside; @@ -26,7 +21,7 @@ public partial class Nodule : Node2D TubeConnectionArea.AreaEntered += TubeConnectionAreaOnAreaEntered; TubeConnectionArea.AreaExited += TubeConnectionAreaOnAreaExited; - TubeManager.Instance.RegisterNodule(this); + NoduleManager.Instance.RegisterNodule(this); } private void TubeConnectionAreaOnAreaEntered(Area2D area) @@ -34,7 +29,7 @@ public partial class Nodule : Node2D if (area.GetParent() is Nodule nodule) { Connections.Add(nodule); - TubeManager.Instance.Update(); + NoduleManager.Instance.Update(); } } @@ -68,23 +63,24 @@ public partial class Nodule : Node2D _mouseInsideClickArea = false; // ghost == null check probably unnecessary - if (_clickedInside && _ghost == null) + if (_clickedInside && !NoduleManager.Instance.Building) { + NoduleManager.Instance.Building = true; _clickedInside = false; _isExpanding = true; - _ghost = Instantiator.Instantiate(); - _ghost.Position = Position; - _ghost.OnBuild += OnBuildComplete; + var ghost = Instantiator.Instantiate(); + ghost.Position = Position; + // ghost.OnBuild += OnBuildComplete; - GetParent()?.AddChild(_ghost); + GetParent()?.AddChild(ghost); } } private void OnBuildComplete(Vector2 pos) { + NoduleManager.Instance.Building = false; _isExpanding = false; - _ghost = null; var nodule = Instantiator.Instantiate(); diff --git a/src/Gameplay/Nodules/Nodule.tscn b/src/Gameplay/Nodules/Nodule.tscn index 39b6bab..58db5d9 100644 --- a/src/Gameplay/Nodules/Nodule.tscn +++ b/src/Gameplay/Nodules/Nodule.tscn @@ -58,6 +58,8 @@ frame_progress = 0.9100785 [node name="TubeConnectionArea" type="Area2D" parent="." unique_id=339547035] unique_name_in_owner = true +collision_layer = 2 +collision_mask = 2 [node name="CollisionShape2D" type="CollisionShape2D" parent="TubeConnectionArea" unique_id=234655540] shape = SubResource("CircleShape2D_x44k2") diff --git a/src/Gameplay/Tube.cs b/src/Gameplay/Tube.cs index 06ba6fc..1dcb5b7 100644 --- a/src/Gameplay/Tube.cs +++ b/src/Gameplay/Tube.cs @@ -11,7 +11,7 @@ public partial class Tube : Node2D private void GenerateTube() { - float maxLength = 200; + float maxLength = 180; // Generate 5 points from origin to Target var diff = Target.Position - Position;