From c373ed4953c948523e98ebd50a17eae10b25d330 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Thu, 30 Oct 2025 02:46:16 +0100 Subject: [PATCH] Add CloseDoorActionResource and update LogicSequenceComponentResource for activation and deactivation actions --- Code/Factories/ComponentFactory.cs | 13 +++++++++++-- Code/Factories/TriggerActionFactory.cs | 1 + Code/Resources/CloseDoorActionResource.cs | 9 +++++++++ Code/Resources/CloseDoorActionResource.cs.uid | 1 + Code/Resources/LogicSequenceComponentResource.cs | 3 ++- Objects/green_door_button.tscn | 1 + Scenes/game_world.tscn | 14 +++++++++++--- 7 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 Code/Resources/CloseDoorActionResource.cs create mode 100644 Code/Resources/CloseDoorActionResource.cs.uid diff --git a/Code/Factories/ComponentFactory.cs b/Code/Factories/ComponentFactory.cs index 3d5a703..395f733 100644 --- a/Code/Factories/ComponentFactory.cs +++ b/Code/Factories/ComponentFactory.cs @@ -167,12 +167,21 @@ public class ComponentFactory IsOneTimeTrigger = resource.IsOneTimeTrigger, }; - foreach (var actionResource in resource.OnCompleteActions) + foreach (var actionResource in resource.OnActivateActions) { var action = _triggerActionFactory.Create(actionResource); if (action != null) { - component.OnCompleteActions.Add(action); + component.OnActivateActions.Add(action); + } + } + + foreach (var actionResource in resource.OnDeactivateActions) + { + var action = _triggerActionFactory.Create(actionResource); + if (action != null) + { + component.OnDeactivateActions.Add(action); } } diff --git a/Code/Factories/TriggerActionFactory.cs b/Code/Factories/TriggerActionFactory.cs index 78d7ec1..db981b1 100644 --- a/Code/Factories/TriggerActionFactory.cs +++ b/Code/Factories/TriggerActionFactory.cs @@ -15,6 +15,7 @@ public class TriggerActionFactory SpawnEntityActionResource spawn => new SpawnEntityAction(spawn.ArchetypeId, spawn.SpawnerWorldId), DebugMessageActionResource debug => new DebugMessageAction(debug.Message), OpenDoorActionResource open => new OpenDoorAction(open.TargetWorldId), + CloseDoorActionResource close => new CloseDoorAction(close.TargetWorldId), _ => throw new ArgumentOutOfRangeException(nameof(resource), $"TriggerAction type {resource.GetType().Name} not recognized") }; diff --git a/Code/Resources/CloseDoorActionResource.cs b/Code/Resources/CloseDoorActionResource.cs new file mode 100644 index 0000000..c248d95 --- /dev/null +++ b/Code/Resources/CloseDoorActionResource.cs @@ -0,0 +1,9 @@ +using Godot; + +namespace CryptonymThunder.Code.Resources; + +[GlobalClass] +public partial class CloseDoorActionResource : TriggerActionResource +{ + [Export] public string TargetWorldId { get; set; } = "door_to_close"; +} \ No newline at end of file diff --git a/Code/Resources/CloseDoorActionResource.cs.uid b/Code/Resources/CloseDoorActionResource.cs.uid new file mode 100644 index 0000000..78291cc --- /dev/null +++ b/Code/Resources/CloseDoorActionResource.cs.uid @@ -0,0 +1 @@ +uid://d3u3q5yhenegb diff --git a/Code/Resources/LogicSequenceComponentResource.cs b/Code/Resources/LogicSequenceComponentResource.cs index 869a8a6..633ff26 100644 --- a/Code/Resources/LogicSequenceComponentResource.cs +++ b/Code/Resources/LogicSequenceComponentResource.cs @@ -7,6 +7,7 @@ namespace CryptonymThunder.Code.Resources; public partial class LogicSequenceComponentResource : Resource { [Export] public Array RequiredChannels { get; set; } = []; - [Export] public Array OnCompleteActions { get; set; } = []; + [Export] public Array OnActivateActions { get; set; } = []; + [Export] public Array OnDeactivateActions { get; set; } = []; [Export] public bool IsOneTimeTrigger { get; set; } = true; } \ No newline at end of file diff --git a/Objects/green_door_button.tscn b/Objects/green_door_button.tscn index 00ad8fc..216b7fa 100644 --- a/Objects/green_door_button.tscn +++ b/Objects/green_door_button.tscn @@ -16,6 +16,7 @@ points = PackedVector3Array(-0.049999997, -0.04999998, -0.04999998, 0.049997684, [sub_resource type="Resource" id="Resource_nak1n"] script = ExtResource("3_8x8af") ChannelId = "green_door_button" +IsToggle = true Requirements = null metadata/_custom_type_script = "uid://cc1okvlx8p0tr" diff --git a/Scenes/game_world.tscn b/Scenes/game_world.tscn index 6476ede..46c9b1a 100644 --- a/Scenes/game_world.tscn +++ b/Scenes/game_world.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=32 format=4 uid="uid://bkvgcsb8d3v7p"] +[gd_scene load_steps=34 format=4 uid="uid://bkvgcsb8d3v7p"] [ext_resource type="Script" uid="uid://cfpm5p102f65x" path="res://Code/Presenters/GamePresenter.cs" id="1_qvgq0"] [ext_resource type="Resource" uid="uid://biev6ri5s8kyf" path="res://Resources/Entities/player.tres" id="2_alii3"] @@ -17,6 +17,7 @@ [ext_resource type="PackedScene" uid="uid://bjbsk8nhi5e4i" path="res://Objects/green_door_button.tscn" id="15_g7kif"] [ext_resource type="Script" uid="uid://dngi4w4ae8wyr" path="res://Code/Resources/OpenDoorActionResource.cs" id="16_vpkaq"] [ext_resource type="Script" uid="uid://c4csquqmqqqww" path="res://Code/Resources/LogicSequenceComponentResource.cs" id="17_df4ul"] +[ext_resource type="Script" uid="uid://d3u3q5yhenegb" path="res://Code/Resources/CloseDoorActionResource.cs" id="17_q0a86"] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ucfah"] data = PackedVector3Array(-4.282257, -0.5, 4.977783, -4.282257, -0.5, -4.977783, -4.282257, 0.5, -4.977783, 4.282257, -0.5, -4.977783, -4.282257, -0.5, -4.977783, -4.282257, -0.5, 4.977783, -4.282257, 0.5, -4.977783, -4.282257, -0.5, -4.977783, 4.282257, -0.5, -4.977783, -4.282257, 0.5, -4.977783, -4.282257, 0.5, 4.977783, -4.282257, -0.5, 4.977783, -4.282257, -0.5, 4.977783, -4.282257, 0.5, 4.977783, 4.282257, 0.5, 4.977783, 4.282257, 0.5, 4.977783, -4.282257, 0.5, 4.977783, -4.282257, 0.5, -4.977783, -4.282257, -0.5, 4.977783, 4.282257, -0.5, 4.977783, 4.282257, -0.5, -4.977783, 4.282257, 0.5, 4.977783, 4.282257, -0.5, 4.977783, -4.282257, -0.5, 4.977783, 4.282257, -0.5, -4.977783, 4.282257, -0.5, 4.977783, 4.282257, 0.5, 4.977783, 4.282257, -0.5, -4.977783, 4.282257, 0.5, -4.977783, -4.282257, 0.5, -4.977783, -4.282257, 0.5, -4.977783, 4.282257, 0.5, -4.977783, 4.282257, 0.5, 4.977783, 4.282257, 0.5, 4.977783, 4.282257, 0.5, -4.977783, 4.282257, -0.5, -4.977783) @@ -68,15 +69,22 @@ BaseValues = Dictionary[int, float]({ }) metadata/_custom_type_script = "uid://dc7wq2ij5kwj5" -[sub_resource type="Resource" id="Resource_df4ul"] +[sub_resource type="Resource" id="Resource_jfk60"] script = ExtResource("16_vpkaq") TargetWorldId = "green_door" metadata/_custom_type_script = "uid://dngi4w4ae8wyr" +[sub_resource type="Resource" id="Resource_up4u3"] +script = ExtResource("17_q0a86") +TargetWorldId = "green_door" +metadata/_custom_type_script = "uid://d3u3q5yhenegb" + [sub_resource type="Resource" id="Resource_3hp7m"] script = ExtResource("17_df4ul") RequiredChannels = Array[String](["green_door_button"]) -OnCompleteActions = Array[Resource]([SubResource("Resource_df4ul")]) +OnActivateActions = Array[Resource]([SubResource("Resource_jfk60")]) +OnDeactivateActions = Array[Resource]([SubResource("Resource_up4u3")]) +IsOneTimeTrigger = false metadata/_custom_type_script = "uid://c4csquqmqqqww" [node name="GameWorld" type="Node3D"]