From 5e357e1a96410fb60dbeff89a1ce975e9843ce7f Mon Sep 17 00:00:00 2001 From: Marco Date: Wed, 10 Sep 2025 11:08:47 +0200 Subject: [PATCH] Interface default functions --- .../EntityScripts/Triggers/ITargetable.cs | 42 +++++++++++++++++ .../EntityScripts/Triggers/ITargetable.cs.uid | 1 + .../EntityScripts/Triggers/TriggerArea.cs | 46 +++++++++++-------- Scripts/Activables/3D/Teleporter3D.cs | 11 +++-- 4 files changed, 75 insertions(+), 25 deletions(-) create mode 100644 3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs create mode 100644 3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs.uid diff --git a/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs b/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs new file mode 100644 index 00000000..6d4ddb8d --- /dev/null +++ b/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs @@ -0,0 +1,42 @@ +using System; +using Cirno.Scripts; +using Godot; +using Godot.Collections; + +namespace Cirno._3D.TrenchBroom.EntityScripts.Triggers; + +public interface ITargetable +{ + string TargetName { get; set; } + + void ApplyTargetProperties(Dictionary props) + { + TargetName = props["targetname"].AsString(); + } +} + +public interface ITargeting +{ + string Target { get; set; } + + void ApplyTargetingProperties(Dictionary props) + { + Target = props["target"].AsString(); + } +} + +public interface IActivationType +{ + ActivationType ActivationType { get; set; } + void ApplyActivationTypeProperties(Dictionary props) + { + if (props.TryGetValue("activationtype", out var type)) + { + var t = Enum.TryParse(type.AsString(), true, out ActivationType activationType); + if (t) + { + ActivationType = activationType; + } + } + } +} \ No newline at end of file diff --git a/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs.uid b/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs.uid new file mode 100644 index 00000000..ae3a5809 --- /dev/null +++ b/3D/TrenchBroom/EntityScripts/Triggers/ITargetable.cs.uid @@ -0,0 +1 @@ +uid://cdvucuir4p2hy diff --git a/3D/TrenchBroom/EntityScripts/Triggers/TriggerArea.cs b/3D/TrenchBroom/EntityScripts/Triggers/TriggerArea.cs index 12aa3587..325af06f 100644 --- a/3D/TrenchBroom/EntityScripts/Triggers/TriggerArea.cs +++ b/3D/TrenchBroom/EntityScripts/Triggers/TriggerArea.cs @@ -1,21 +1,22 @@ using Godot; using System; +using Cirno._3D.TrenchBroom.EntityScripts.Triggers; using Cirno.Scripts; using Cirno.Scripts.Components.FSM._3DPlayer; using Cirno.Scripts.Utils; using Godot.Collections; [Tool] -public partial class TriggerArea : Area3D +public partial class TriggerArea : Area3D, ITargetable, ITargeting, IActivationType { - [Export] public string Target { get; private set; } + [Export] public string Target { get; set; } [Export] public string TargetFunc { get; private set; } - [Export] public string TargetName { get; private set; } + [Export] public string TargetName { get; set; } [Export] public int MinActivations { get; private set; } = 0; [Export] public int MaxActivations { get; private set; } = 1; - [Export] public ActivationType ActivationType { get; private set; } = ActivationType.Toggle; + [Export] public ActivationType ActivationType { get; set; } = ActivationType.Toggle; public enum TriggerStates { @@ -31,28 +32,33 @@ public partial class TriggerArea : Area3D private int _activations = 0; - public void _func_godot_apply_properties(Dictionary props) + public void _func_godot_apply_properties(Dictionary props) { - Target = props["target"]; - TargetFunc = props["targetfunc"]; - TargetName = props["targetname"]; - if (props.TryGetValue("activationtype", out var type)) - { - var t = Enum.TryParse(type, true, out ActivationType activationType); - if (t) - { - ActivationType = activationType; - } - } + + ((ITargetable)this).ApplyTargetProperties(props); + ((ITargeting)this).ApplyTargetingProperties(props); + //Target = props["target"]; + TargetFunc = props["targetfunc"].AsString(); + //TargetName = props["targetname"]; + // if (props.TryGetValue("activationtype", out var type)) + // { + // var t = Enum.TryParse(type.AsString(), true, out ActivationType activationType); + // if (t) + // { + // ActivationType = activationType; + // } + // } + ((IActivationType)this).ApplyActivationTypeProperties(props); + - if (int.TryParse(props["minactivations"], out var minActivations)) + if (props.TryGetValue("minactivations", out var minActivations)) { - MinActivations = minActivations; + MinActivations = minActivations.AsInt32(); } - if (int.TryParse(props["maxactivations"], out var maxActivations)) + if (props.TryGetValue("maxactivations", out var maxActivations)) { - MaxActivations = maxActivations; + MaxActivations = maxActivations.AsInt32(); } } diff --git a/Scripts/Activables/3D/Teleporter3D.cs b/Scripts/Activables/3D/Teleporter3D.cs index c3d56a6b..5c062209 100644 --- a/Scripts/Activables/3D/Teleporter3D.cs +++ b/Scripts/Activables/3D/Teleporter3D.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; +using Cirno._3D.TrenchBroom.EntityScripts.Triggers; using Cirno.Scripts.Components.FSM; using Cirno.Scripts.Components.FSM._3DPlayer; using Godot; @@ -11,7 +12,7 @@ using GTweensGodot.Extensions; namespace Cirno.Scripts.Activables._3D; [Tool] -public partial class Teleporter3D : StaticBody3D, IActivable +public partial class Teleporter3D : StaticBody3D, IActivable, ITargetable { [Export] public bool IsEnabled { get; set; } @@ -34,12 +35,12 @@ public partial class Teleporter3D : StaticBody3D, IActivable [Export] public StringName DefaultAnimationName { get; private set; } = "Default"; - public void _func_godot_apply_properties(Dictionary props) + public void _func_godot_apply_properties(Dictionary props) { - TargetGroup = props["target"]; + TargetGroup = props["target"].AsString(); - TargetName = props["targetname"]; - IsEnabled = bool.Parse(props["enabled"]); + TargetName = props["targetname"].AsString(); + IsEnabled = props["enabled"].AsBool(); } private void PlayAnimation(StringName name)