diff --git a/assets/root_nodule.aseprite b/assets/root_nodule.aseprite new file mode 100644 index 0000000..220efb7 Binary files /dev/null and b/assets/root_nodule.aseprite differ diff --git a/assets/root_nodule.png b/assets/root_nodule.png new file mode 100644 index 0000000..91d3d1e Binary files /dev/null and b/assets/root_nodule.png differ diff --git a/assets/root_nodule.png.import b/assets/root_nodule.png.import new file mode 100644 index 0000000..135fadb --- /dev/null +++ b/assets/root_nodule.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tomd3kojw0qy" +path="res://.godot/imported/root_nodule.png-981ed6f2ff13b8d32aab753225ea9d2d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/root_nodule.png" +dest_files=["res://.godot/imported/root_nodule.png-981ed6f2ff13b8d32aab753225ea9d2d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/Core/EnergyManager.cs b/src/Core/EnergyManager.cs index 2efd8ce..b071941 100644 --- a/src/Core/EnergyManager.cs +++ b/src/Core/EnergyManager.cs @@ -1,5 +1,5 @@ using Godot; -using Slimepire.Gameplay.Nodules.Components; +using Slimepire.Gameplay.Components; namespace Slimepire.Core; diff --git a/src/Data/EnergyStorageNodule.tres b/src/Data/EnergyStorageNodule.tres index 25ee8bf..88e4a89 100644 --- a/src/Data/EnergyStorageNodule.tres +++ b/src/Data/EnergyStorageNodule.tres @@ -1,8 +1,8 @@ [gd_resource type="Resource" script_class="NoduleResource" format=3 uid="uid://0d8vif4ejtp1"] [ext_resource type="Texture2D" uid="uid://ds1idectpqbnh" path="res://assets/energy_storage_nodule.png" id="1_237jx"] -[ext_resource type="PackedScene" uid="uid://by6iw05ovnhq8" path="res://src/Gameplay/Nodules/Components/EnergyStorage.tscn" id="1_dusyu"] -[ext_resource type="Script" uid="uid://bnf6qmk64i2wj" path="res://src/Data/NoduleResource.cs" id="2_dusyu"] +[ext_resource type="PackedScene" uid="uid://by6iw05ovnhq8" path="res://src/Gameplay/Components/EnergyStorage.tscn" id="1_dusyu"] +[ext_resource type="Script" uid="uid://bnf6qmk64i2wj" path="res://src/Data/NoduleStats.cs" id="2_dusyu"] [sub_resource type="AtlasTexture" id="AtlasTexture_dusyu"] atlas = ExtResource("1_237jx") diff --git a/src/Data/NoduleResource.cs b/src/Data/NoduleStats.cs similarity index 81% rename from src/Data/NoduleResource.cs rename to src/Data/NoduleStats.cs index 398df17..4772207 100644 --- a/src/Data/NoduleResource.cs +++ b/src/Data/NoduleStats.cs @@ -3,7 +3,7 @@ using Godot; namespace Slimepire.Data; [GlobalClass] -public partial class NoduleResource : Resource +public partial class NoduleStats : Resource { [Export] public SpriteFrames SpriteFrames; diff --git a/src/Data/NoduleResource.cs.uid b/src/Data/NoduleStats.cs.uid similarity index 100% rename from src/Data/NoduleResource.cs.uid rename to src/Data/NoduleStats.cs.uid diff --git a/src/Data/SimpleNodule.tres b/src/Data/SimpleNodule.tres index 510d4ac..e9ac29c 100644 --- a/src/Data/SimpleNodule.tres +++ b/src/Data/SimpleNodule.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" script_class="NoduleResource" format=3 uid="uid://5gk0giodp6g"] +[gd_resource type="Resource" script_class="NoduleStats" format=3 uid="uid://5gk0giodp6g"] [ext_resource type="Texture2D" uid="uid://cecg47efx7gw8" path="res://assets/simple_nodule.png" id="1_j6wbi"] -[ext_resource type="Script" uid="uid://bnf6qmk64i2wj" path="res://src/Data/NoduleResource.cs" id="1_otepm"] +[ext_resource type="Script" uid="uid://bnf6qmk64i2wj" path="res://src/Data/NoduleStats.cs" id="1_otepm"] [sub_resource type="AtlasTexture" id="AtlasTexture_j6wbi"] atlas = ExtResource("1_j6wbi") @@ -37,5 +37,4 @@ script = ExtResource("1_otepm") SpriteFrames = SubResource("SpriteFrames_x44k2") Color = Color(0.2642648, 0.46582836, 0.36528692, 1) NoduleName = "Simple Nodule" -NoduleType = 1 metadata/_custom_type_script = "uid://bnf6qmk64i2wj" diff --git a/src/Gameplay/BuildGhost.cs b/src/Gameplay/BuildGhost.cs index 62ab3f4..a663055 100644 --- a/src/Gameplay/BuildGhost.cs +++ b/src/Gameplay/BuildGhost.cs @@ -1,6 +1,6 @@ using Godot; -using Slimepire.Gameplay.Nodules; -using Slimepire.Gameplay.Nodules.Components; +using Slimepire.Gameplay.Components; +using Nodule = Slimepire.Gameplay.Nodules.BasicNodule.Nodule; namespace Slimepire.Gameplay; @@ -15,8 +15,9 @@ public partial class BuildGhost : Node2D public override void _Ready() { - _tubeConnectionArea.ConnectionAdded += ConnectionAdded; - _tubeConnectionArea.ConnectionRemoved += ConnectionRemoved; + // fix: after refactor + // _tubeConnectionArea.ConnectionAdded += ConnectionAdded; + // _tubeConnectionArea.ConnectionRemoved += ConnectionRemoved; } private void ConnectionAdded(Nodule nodule) @@ -79,9 +80,6 @@ public partial class BuildGhost : Node2D var nodule = Instantiator.Instantiate(); nodule.Position = Position; - // nodule.NoduleResource = GD.Load( - // GameResources.SimpleNoduleTres.ResourcePath - // ); GetParent()?.AddChild(nodule); diff --git a/src/Gameplay/BuildGhost.tscn b/src/Gameplay/BuildGhost.tscn index b351d08..7fc3157 100644 --- a/src/Gameplay/BuildGhost.tscn +++ b/src/Gameplay/BuildGhost.tscn @@ -2,7 +2,7 @@ [ext_resource type="Script" uid="uid://ck5yw760bu8sb" path="res://src/Gameplay/BuildGhost.cs" id="1_ahcoi"] [ext_resource type="Texture2D" uid="uid://cecg47efx7gw8" path="res://assets/simple_nodule.png" id="2_uo42j"] -[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Nodules/Components/TubeConnectionArea.tscn" id="2_vecmk"] +[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Components/TubeConnectionArea.tscn" id="2_vecmk"] [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"] diff --git a/src/Gameplay/Nodules/Components/EnergyProducer.cs b/src/Gameplay/Components/EnergyProducer.cs similarity index 92% rename from src/Gameplay/Nodules/Components/EnergyProducer.cs rename to src/Gameplay/Components/EnergyProducer.cs index d3e90df..00080ee 100644 --- a/src/Gameplay/Nodules/Components/EnergyProducer.cs +++ b/src/Gameplay/Components/EnergyProducer.cs @@ -1,7 +1,7 @@ using Godot; using Slimepire.Core; -namespace Slimepire.Gameplay.Nodules.Components; +namespace Slimepire.Gameplay.Components; public partial class EnergyProducer : Node { diff --git a/src/Gameplay/Nodules/Components/EnergyProducer.cs.uid b/src/Gameplay/Components/EnergyProducer.cs.uid similarity index 100% rename from src/Gameplay/Nodules/Components/EnergyProducer.cs.uid rename to src/Gameplay/Components/EnergyProducer.cs.uid diff --git a/src/Gameplay/Nodules/Components/EnergyProducer.tscn b/src/Gameplay/Components/EnergyProducer.tscn similarity index 75% rename from src/Gameplay/Nodules/Components/EnergyProducer.tscn rename to src/Gameplay/Components/EnergyProducer.tscn index 01bd7e1..ed98467 100644 --- a/src/Gameplay/Nodules/Components/EnergyProducer.tscn +++ b/src/Gameplay/Components/EnergyProducer.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://t0gdf172f65v"] -[ext_resource type="Script" uid="uid://bku1vey63ew65" path="res://src/Gameplay/Nodules/Components/EnergyProducer.cs" id="1_4q7h4"] +[ext_resource type="Script" uid="uid://bku1vey63ew65" path="res://src/Gameplay/Components/EnergyProducer.cs" id="1_4q7h4"] [node name="EnergyProducer" type="Node" unique_id=1184182162] script = ExtResource("1_4q7h4") diff --git a/src/Gameplay/Nodules/Components/EnergyStorage.cs b/src/Gameplay/Components/EnergyStorage.cs similarity index 91% rename from src/Gameplay/Nodules/Components/EnergyStorage.cs rename to src/Gameplay/Components/EnergyStorage.cs index 0b9fcaf..1268b2d 100644 --- a/src/Gameplay/Nodules/Components/EnergyStorage.cs +++ b/src/Gameplay/Components/EnergyStorage.cs @@ -1,7 +1,7 @@ using Godot; using Slimepire.Core; -namespace Slimepire.Gameplay.Nodules.Components; +namespace Slimepire.Gameplay.Components; public partial class EnergyStorage : Node { diff --git a/src/Gameplay/Nodules/Components/EnergyStorage.cs.uid b/src/Gameplay/Components/EnergyStorage.cs.uid similarity index 100% rename from src/Gameplay/Nodules/Components/EnergyStorage.cs.uid rename to src/Gameplay/Components/EnergyStorage.cs.uid diff --git a/src/Gameplay/Nodules/Components/EnergyStorage.tscn b/src/Gameplay/Components/EnergyStorage.tscn similarity index 75% rename from src/Gameplay/Nodules/Components/EnergyStorage.tscn rename to src/Gameplay/Components/EnergyStorage.tscn index fcc34a6..86690ad 100644 --- a/src/Gameplay/Nodules/Components/EnergyStorage.tscn +++ b/src/Gameplay/Components/EnergyStorage.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://by6iw05ovnhq8"] -[ext_resource type="Script" uid="uid://dgkeo1wsicv13" path="res://src/Gameplay/Nodules/Components/EnergyStorage.cs" id="1_vetx7"] +[ext_resource type="Script" uid="uid://dgkeo1wsicv13" path="res://src/Gameplay/Components/EnergyStorage.cs" id="1_vetx7"] [node name="EnergyStorage" type="Node" unique_id=1765924301] script = ExtResource("1_vetx7") diff --git a/src/Gameplay/Nodules/Components/GrowArea.cs b/src/Gameplay/Components/GrowArea.cs similarity index 95% rename from src/Gameplay/Nodules/Components/GrowArea.cs rename to src/Gameplay/Components/GrowArea.cs index dc3908b..af2a7bf 100644 --- a/src/Gameplay/Nodules/Components/GrowArea.cs +++ b/src/Gameplay/Components/GrowArea.cs @@ -1,7 +1,6 @@ using Godot; -using Slimepire.Core; -namespace Slimepire.Gameplay.Nodules.Components; +namespace Slimepire.Gameplay.Components; [SceneTree] public partial class GrowArea : Area2D diff --git a/src/Gameplay/Nodules/Components/GrowArea.cs.uid b/src/Gameplay/Components/GrowArea.cs.uid similarity index 100% rename from src/Gameplay/Nodules/Components/GrowArea.cs.uid rename to src/Gameplay/Components/GrowArea.cs.uid diff --git a/src/Gameplay/Components/GrowArea.tscn b/src/Gameplay/Components/GrowArea.tscn new file mode 100644 index 0000000..64ace0e --- /dev/null +++ b/src/Gameplay/Components/GrowArea.tscn @@ -0,0 +1,7 @@ +[gd_scene format=3 uid="uid://3x5pqm4t5cbl"] + +[ext_resource type="Script" uid="uid://cfxb8wmnt7ej7" path="res://src/Gameplay/Components/GrowArea.cs" id="1_a3tcn"] + +[node name="GrowArea" type="Area2D" unique_id=979341496] +monitorable = false +script = ExtResource("1_a3tcn") diff --git a/src/Gameplay/Nodules/Components/TubeConnectionArea.cs b/src/Gameplay/Components/TubeConnectionArea.cs similarity index 50% rename from src/Gameplay/Nodules/Components/TubeConnectionArea.cs rename to src/Gameplay/Components/TubeConnectionArea.cs index 8e5c905..61cb753 100644 --- a/src/Gameplay/Nodules/Components/TubeConnectionArea.cs +++ b/src/Gameplay/Components/TubeConnectionArea.cs @@ -1,11 +1,12 @@ using Godot; +using Slimepire.Gameplay.Nodules.BasicNodule; -namespace Slimepire.Gameplay.Nodules.Components; +namespace Slimepire.Gameplay.Components; +[SceneTree] public partial class TubeConnectionArea : Area2D { - public Action ConnectionAdded { get; set; } - public Action ConnectionRemoved { get; set; } + public List Connections { get; } = []; public override void _Ready() { @@ -15,17 +16,19 @@ public partial class TubeConnectionArea : Area2D private void TubeConnectionAreaOnAreaEntered(Area2D area) { - if (area.GetParent() is Nodule nodule) + if (area.GetParent() is INodule nodule) { - ConnectionAdded?.Invoke(nodule); + Connections.Add(nodule); + NoduleManager.Instance.Update(); } } private void TubeConnectionAreaOnAreaExited(Area2D area) { - if (area.GetParent() is Nodule nodule) + if (area.GetParent() is INodule nodule) { - ConnectionRemoved?.Invoke(nodule); + Connections.Remove(nodule); + NoduleManager.Instance.Update(); } } } diff --git a/src/Gameplay/Nodules/Components/TubeConnectionArea.cs.uid b/src/Gameplay/Components/TubeConnectionArea.cs.uid similarity index 100% rename from src/Gameplay/Nodules/Components/TubeConnectionArea.cs.uid rename to src/Gameplay/Components/TubeConnectionArea.cs.uid diff --git a/src/Gameplay/Nodules/Components/TubeConnectionArea.tscn b/src/Gameplay/Components/TubeConnectionArea.tscn similarity index 88% rename from src/Gameplay/Nodules/Components/TubeConnectionArea.tscn rename to src/Gameplay/Components/TubeConnectionArea.tscn index 7bfd952..d6bf353 100644 --- a/src/Gameplay/Nodules/Components/TubeConnectionArea.tscn +++ b/src/Gameplay/Components/TubeConnectionArea.tscn @@ -1,6 +1,6 @@ [gd_scene format=3 uid="uid://bjesfu1mfx8l5"] -[ext_resource type="Script" uid="uid://bcw8vylpb533h" path="res://src/Gameplay/Nodules/Components/TubeConnectionArea.cs" id="1_uhdst"] +[ext_resource type="Script" uid="uid://bcw8vylpb533h" path="res://src/Gameplay/Components/TubeConnectionArea.cs" id="1_uhdst"] [sub_resource type="CircleShape2D" id="CircleShape2D_x44k2"] radius = 96.38 diff --git a/src/Gameplay/NoduleManager.cs b/src/Gameplay/NoduleManager.cs index 2ddc889..8153c1a 100644 --- a/src/Gameplay/NoduleManager.cs +++ b/src/Gameplay/NoduleManager.cs @@ -1,5 +1,5 @@ using Godot; -using Slimepire.Gameplay.Nodules; +using Slimepire.Gameplay.Nodules.BasicNodule; namespace Slimepire.Gameplay; @@ -9,16 +9,16 @@ public partial class NoduleManager public bool Building { get; set; } private AStar2D _aStar = new(); - private readonly List _nodules = []; + private readonly Dictionary _nodules = []; private readonly HashSet _connections = []; // GFX private readonly Dictionary _tubeConnections = new(); - public void RegisterNodule(Nodule nodule) + public void RegisterNodule(INodule nodule, Node2D node) { - _nodules.Add(nodule); - _aStar.AddPoint(nodule.Id, nodule.Position); + _nodules.Add(nodule, node); + _aStar.AddPoint(nodule.GetId(), node.Position); UpdateNoduleConnections(); UpdateTubesAndAstar(); @@ -32,11 +32,11 @@ public partial class NoduleManager private void UpdateNoduleConnections() { - foreach (var n in _nodules) + foreach (var (inodule, _) in _nodules) { - foreach (var c in n.Connections) + foreach (var c in inodule.TubeConnectionArea.Connections) { - _connections.Add(new NoduleConnection(n, c)); + _connections.Add(new NoduleConnection(inodule, c)); } } } @@ -49,22 +49,24 @@ public partial class NoduleManager { var tube = Instantiator.Instantiate(); _tubeConnections.Add(c, tube); - c.A.AddChild(tube); - tube.SetTarget(c.B.Position); + // TODO: Alles sehr ugly ... + tube.SetTarget(_nodules[c.B].Position); + + c.A.AttachTube(tube); // TODO: refactor this out of gfx stuff - _aStar.ConnectPoints(c.A.Id, c.B.Id); + _aStar.ConnectPoints(c.A.GetId(), c.B.GetId()); } } } private record NoduleConnection { - public Nodule A { get; init; } - public Nodule B { get; init; } + public INodule A { get; init; } + public INodule B { get; init; } - public NoduleConnection(Nodule a, Nodule b) + public NoduleConnection(INodule a, INodule b) { if (a.GetHashCode() <= b.GetHashCode()) { diff --git a/src/Gameplay/Nodules/BasicNodule/INodule.cs b/src/Gameplay/Nodules/BasicNodule/INodule.cs new file mode 100644 index 0000000..02fb9d0 --- /dev/null +++ b/src/Gameplay/Nodules/BasicNodule/INodule.cs @@ -0,0 +1,12 @@ +using Slimepire.Gameplay.Components; + +namespace Slimepire.Gameplay.Nodules.BasicNodule; + +public interface INodule +{ + TubeConnectionArea TubeConnectionArea { get; } + + void AttachTube(Tube tube); + + long GetId(); +} diff --git a/src/Gameplay/Nodules/BasicNodule/INodule.cs.uid b/src/Gameplay/Nodules/BasicNodule/INodule.cs.uid new file mode 100644 index 0000000..258cfdb --- /dev/null +++ b/src/Gameplay/Nodules/BasicNodule/INodule.cs.uid @@ -0,0 +1 @@ +uid://cy683somg41jj diff --git a/src/Gameplay/Nodules/BasicNodule/Nodule.cs b/src/Gameplay/Nodules/BasicNodule/Nodule.cs new file mode 100644 index 0000000..ce4740e --- /dev/null +++ b/src/Gameplay/Nodules/BasicNodule/Nodule.cs @@ -0,0 +1,33 @@ +using Godot; +using Slimepire.Gameplay.Components; + +namespace Slimepire.Gameplay.Nodules.BasicNodule; + +[SceneTree] +public partial class Nodule : Node2D, INodule +{ + [Export] + private TubeConnectionArea _tubeConnectionArea; + + public TubeConnectionArea TubeConnectionArea => _tubeConnectionArea; + + public void AttachTube(Tube tube) + { + AddChild(tube); + } + + public long GetId() + { + return (long)GetInstanceId(); + } + + public override void _Ready() + { + Gfx.Play(); + + Gfx.SelfModulate = Colors.DarkOliveGreen; + + // TODO: uiuiuiui + NoduleManager.Instance.RegisterNodule(this, this); + } +} diff --git a/src/Gameplay/Nodules/Nodule.cs.uid b/src/Gameplay/Nodules/BasicNodule/Nodule.cs.uid similarity index 100% rename from src/Gameplay/Nodules/Nodule.cs.uid rename to src/Gameplay/Nodules/BasicNodule/Nodule.cs.uid diff --git a/src/Gameplay/Nodules/Nodule.tscn b/src/Gameplay/Nodules/BasicNodule/Nodule.tscn similarity index 84% rename from src/Gameplay/Nodules/Nodule.tscn rename to src/Gameplay/Nodules/BasicNodule/Nodule.tscn index bf62c9a..f786e55 100644 --- a/src/Gameplay/Nodules/Nodule.tscn +++ b/src/Gameplay/Nodules/BasicNodule/Nodule.tscn @@ -1,9 +1,12 @@ [gd_scene format=3 uid="uid://cnl6t8o4mh0j3"] -[ext_resource type="Script" uid="uid://cmpl0if164dba" path="res://src/Gameplay/Nodules/Nodule.cs" id="1_yembh"] +[ext_resource type="Script" uid="uid://cmpl0if164dba" path="res://src/Gameplay/Nodules/BasicNodule/Nodule.cs" id="1_yembh"] [ext_resource type="Texture2D" uid="uid://cecg47efx7gw8" path="res://assets/simple_nodule.png" id="2_7qt20"] -[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Nodules/Components/TubeConnectionArea.tscn" id="2_inlcu"] -[ext_resource type="PackedScene" uid="uid://3x5pqm4t5cbl" path="res://src/Gameplay/Nodules/Components/GrowArea.tscn" id="2_x44k2"] +[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Components/TubeConnectionArea.tscn" id="2_inlcu"] +[ext_resource type="PackedScene" uid="uid://3x5pqm4t5cbl" path="res://src/Gameplay/Components/GrowArea.tscn" id="2_x44k2"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_t72h2"] +radius = 17.029387 [sub_resource type="AtlasTexture" id="AtlasTexture_7qt20"] atlas = ExtResource("2_7qt20") @@ -50,6 +53,9 @@ _tubeConnectionArea = NodePath("TubeConnectionArea") [node name="GrowArea" parent="." unique_id=979341496 instance=ExtResource("2_x44k2")] +[node name="CollisionShape2D" type="CollisionShape2D" parent="GrowArea" unique_id=282097141] +shape = SubResource("CircleShape2D_t72h2") + [node name="Gfx" type="AnimatedSprite2D" parent="." unique_id=190397869] unique_name_in_owner = true texture_filter = 1 diff --git a/src/Gameplay/Nodules/Components/GrowArea.tscn b/src/Gameplay/Nodules/Components/GrowArea.tscn deleted file mode 100644 index ad90577..0000000 --- a/src/Gameplay/Nodules/Components/GrowArea.tscn +++ /dev/null @@ -1,13 +0,0 @@ -[gd_scene format=3 uid="uid://3x5pqm4t5cbl"] - -[ext_resource type="Script" uid="uid://cfxb8wmnt7ej7" path="res://src/Gameplay/Nodules/Components/GrowArea.cs" id="1_a3tcn"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_7qt20"] -radius = 15.0 - -[node name="GrowArea" type="Area2D" unique_id=979341496] -monitorable = false -script = ExtResource("1_a3tcn") - -[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1616623898] -shape = SubResource("CircleShape2D_7qt20") diff --git a/src/Gameplay/Nodules/Nodule.cs b/src/Gameplay/Nodules/Nodule.cs deleted file mode 100644 index b543ad1..0000000 --- a/src/Gameplay/Nodules/Nodule.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Godot; -using Slimepire.Gameplay.Nodules.Components; - -namespace Slimepire.Gameplay.Nodules; - -[SceneTree] -public partial class Nodule : Node2D -{ - public long Id { get; set; } = BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0); - - public List Connections { get; } = []; - - [Export] - private TubeConnectionArea _tubeConnectionArea; - - public override void _Ready() - { - Gfx.SelfModulate = Colors.DarkOliveGreen; - Gfx.Play(); - - _tubeConnectionArea.ConnectionAdded += ConnectionAdded; - _tubeConnectionArea.ConnectionRemoved += ConnectionRemoved; - - NoduleManager.Instance.RegisterNodule(this); - } - - private void ConnectionAdded(Nodule nodule) - { - Connections.Add(nodule); - NoduleManager.Instance.Update(); - } - - private void ConnectionRemoved(Nodule nodule) - { - Connections.Remove(nodule); - NoduleManager.Instance.Update(); - } -} diff --git a/src/Gameplay/Nodules/RootNodule/RootNodule.tscn b/src/Gameplay/Nodules/RootNodule/RootNodule.tscn new file mode 100644 index 0000000..a0e0c89 --- /dev/null +++ b/src/Gameplay/Nodules/RootNodule/RootNodule.tscn @@ -0,0 +1,56 @@ +[gd_scene format=3 uid="uid://j15868gtem0y"] + +[ext_resource type="PackedScene" uid="uid://bjesfu1mfx8l5" path="res://src/Gameplay/Components/TubeConnectionArea.tscn" id="1_b03xe"] +[ext_resource type="PackedScene" uid="uid://3x5pqm4t5cbl" path="res://src/Gameplay/Components/GrowArea.tscn" id="2_tg6hi"] +[ext_resource type="Texture2D" uid="uid://tomd3kojw0qy" path="res://assets/root_nodule.png" id="3_b03xe"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_t72h2"] +radius = 27.018513 + +[sub_resource type="SpriteFrames" id="SpriteFrames_cy5pc"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("3_b03xe") +}], +"loop": 1, +"name": &"default", +"speed": 2.0 +}] + +[sub_resource type="LabelSettings" id="LabelSettings_cdcnu"] +font_size = 12 +outline_size = 3 +outline_color = Color(0, 0, 0, 1) +shadow_size = 3 +shadow_color = Color(0, 0, 0, 1) + +[node name="RootNodule" type="Node2D" unique_id=1797926942] + +[node name="TubeConnectionArea" parent="." unique_id=1821668398 instance=ExtResource("1_b03xe")] + +[node name="GrowArea" parent="." unique_id=979341496 instance=ExtResource("2_tg6hi")] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="GrowArea" unique_id=1962902431] +shape = SubResource("CircleShape2D_t72h2") + +[node name="Gfx" type="AnimatedSprite2D" parent="." unique_id=705500036] +unique_name_in_owner = true +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_cy5pc") +autoplay = "default" + +[node name="EnergyLabel" type="Label" parent="." unique_id=1654733583] +unique_name_in_owner = true +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -20.0 +offset_top = 14.0 +offset_right = 20.0 +offset_bottom = 31.0 +grow_horizontal = 2 +text = "5" +label_settings = SubResource("LabelSettings_cdcnu") +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/src/Levels/DemoLevel.tscn b/src/Levels/DemoLevel.tscn index 90ac54e..a564c0f 100644 --- a/src/Levels/DemoLevel.tscn +++ b/src/Levels/DemoLevel.tscn @@ -2,7 +2,7 @@ [ext_resource type="Script" uid="uid://c8l12dlpexosv" path="res://src/Levels/DemoLevel.cs" id="1_l2cn0"] [ext_resource type="Script" uid="uid://cdgi3y0sm3rt1" path="res://src/Gameplay/Camera.cs" id="2_mxa1b"] -[ext_resource type="PackedScene" uid="uid://cnl6t8o4mh0j3" path="res://src/Gameplay/Nodules/Nodule.tscn" id="3_qhkhc"] +[ext_resource type="PackedScene" uid="uid://cnl6t8o4mh0j3" path="res://src/Gameplay/Nodules/BasicNodule/Nodule.tscn" id="3_qhkhc"] [sub_resource type="LabelSettings" id="LabelSettings_l2cn0"] font_size = 107