]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Item HeldPrefix and Clothing EquippedPrefix toggler (#33054)
authorToken <56667933+TokenStyle@users.noreply.github.com>
Mon, 14 Apr 2025 22:50:21 +0000 (03:50 +0500)
committerGitHub <noreply@github.com>
Mon, 14 Apr 2025 22:50:21 +0000 (15:50 -0700)
* Item and clothes prefix toggler
Handles Item.HeldPrefix and ClothingComponent.EquippedPrefix respectively

* stunbaton and magboots sprites activations to Toggler yml

* review

---------

Co-authored-by: Milon <milonpl.git@proton.me>
Content.Server/Stunnable/Systems/StunbatonSystem.cs
Content.Shared/Clothing/Components/ToggleClothingPrefixComponent.cs [new file with mode: 0644]
Content.Shared/Clothing/EntitySystems/ToggleClothingPrefixSystem.cs [new file with mode: 0644]
Content.Shared/Clothing/MagbootsSystem.cs
Content.Shared/Item/ItemToggle/Components/ItemTogglePrefixComponent.cs [new file with mode: 0644]
Content.Shared/Item/ItemToggle/ItemTogglePrefixSystem.cs [new file with mode: 0644]
Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
Resources/Prototypes/Entities/Objects/Weapons/security.yml

index 1e2494203abf035ec1fb3645d76ad89ed325f5a7..02d2382f5d17875e8a34c3ceed516a2f18c81148 100644 (file)
@@ -28,7 +28,6 @@ namespace Content.Server.Stunnable.Systems
             SubscribeLocalEvent<StunbatonComponent, SolutionContainerChangedEvent>(OnSolutionChange);
             SubscribeLocalEvent<StunbatonComponent, StaminaDamageOnHitAttemptEvent>(OnStaminaHitAttempt);
             SubscribeLocalEvent<StunbatonComponent, ItemToggleActivateAttemptEvent>(TryTurnOn);
-            SubscribeLocalEvent<StunbatonComponent, ItemToggledEvent>(ToggleDone);
             SubscribeLocalEvent<StunbatonComponent, ChargeChangedEvent>(OnChargeChanged);
         }
 
@@ -55,11 +54,6 @@ namespace Content.Server.Stunnable.Systems
             }
         }
 
-        private void ToggleDone(Entity<StunbatonComponent> entity, ref ItemToggledEvent args)
-        {
-            _item.SetHeldPrefix(entity.Owner, args.Activated ? "on" : "off");
-        }
-
         private void TryTurnOn(Entity<StunbatonComponent> entity, ref ItemToggleActivateAttemptEvent args)
         {
             if (!TryComp<BatteryComponent>(entity, out var battery) || battery.CurrentCharge < entity.Comp.EnergyPerUse)
diff --git a/Content.Shared/Clothing/Components/ToggleClothingPrefixComponent.cs b/Content.Shared/Clothing/Components/ToggleClothingPrefixComponent.cs
new file mode 100644 (file)
index 0000000..23f4a62
--- /dev/null
@@ -0,0 +1,22 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Clothing.Components;
+
+/// <summary>
+/// Handles the changes to ClothingComponent.EquippedPrefix when toggled.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ToggleClothingPrefixComponent : Component
+{
+    /// <summary>
+    /// Clothing's EquippedPrefix when activated.
+    /// </summary>
+    [DataField]
+    public string? PrefixOn = "on";
+
+    /// <summary>
+    /// Clothing's EquippedPrefix when deactivated.
+    /// </summary>
+    [DataField]
+    public string? PrefixOff;
+}
diff --git a/Content.Shared/Clothing/EntitySystems/ToggleClothingPrefixSystem.cs b/Content.Shared/Clothing/EntitySystems/ToggleClothingPrefixSystem.cs
new file mode 100644 (file)
index 0000000..129db30
--- /dev/null
@@ -0,0 +1,25 @@
+using Content.Shared.Clothing.Components;
+using Content.Shared.Item.ItemToggle.Components;
+
+namespace Content.Shared.Clothing.EntitySystems;
+
+/// <summary>
+/// On toggle handles the changes to ItemComponent.HeldPrefix. <see cref="ToggleClothingPrefixComponent"/>.
+/// </summary>
+public sealed class ToggleClothingPrefixSystem : EntitySystem
+{
+    [Dependency] private readonly ClothingSystem _clothing = default!;
+
+    /// <inheritdoc/>
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<ToggleClothingPrefixComponent, ItemToggledEvent>(OnToggled);
+    }
+
+    private void OnToggled(Entity<ToggleClothingPrefixComponent> ent, ref ItemToggledEvent args)
+    {
+        _clothing.SetEquippedPrefix(ent, args.Activated ? ent.Comp.PrefixOn : ent.Comp.PrefixOff);
+    }
+}
index d41f27fefb07f3b382becdd5aa3494cd882ee415..de39fd9dca050191948a65efa31bf156e49020ef 100644 (file)
@@ -42,10 +42,6 @@ public sealed class SharedMagbootsSystem : EntitySystem
         {
             UpdateMagbootEffects(container.Owner, ent, args.Activated);
         }
-
-        var prefix = args.Activated ? "on" : null;
-        _item.SetHeldPrefix(ent, prefix);
-        _clothing.SetEquippedPrefix(ent, prefix);
     }
 
     private void OnGotUnequipped(Entity<MagbootsComponent> ent, ref ClothingGotUnequippedEvent args)
diff --git a/Content.Shared/Item/ItemToggle/Components/ItemTogglePrefixComponent.cs b/Content.Shared/Item/ItemToggle/Components/ItemTogglePrefixComponent.cs
new file mode 100644 (file)
index 0000000..e75d56d
--- /dev/null
@@ -0,0 +1,22 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Item.ItemToggle.Components;
+
+/// <summary>
+/// Handles the changes to ItemComponent.HeldPrefix when toggled.
+/// </summary>
+[RegisterComponent, NetworkedComponent]
+public sealed partial class ItemTogglePrefixComponent : Component
+{
+    /// <summary>
+    /// Item's HeldPrefix when activated.
+    /// </summary>
+    [DataField]
+    public string? PrefixOn = "on";
+
+    /// <summary>
+    /// Item's HeldPrefix when deactivated.
+    /// </summary>
+    [DataField]
+    public string? PrefixOff;
+}
diff --git a/Content.Shared/Item/ItemToggle/ItemTogglePrefixSystem.cs b/Content.Shared/Item/ItemToggle/ItemTogglePrefixSystem.cs
new file mode 100644 (file)
index 0000000..b401fef
--- /dev/null
@@ -0,0 +1,24 @@
+using Content.Shared.Item.ItemToggle.Components;
+
+namespace Content.Shared.Item.ItemToggle;
+
+/// <summary>
+/// On toggle handles the changes to ItemComponent.HeldPrefix. <see cref="ItemTogglePrefixComponent"/>.
+/// </summary>
+public sealed class ItemTogglePrefixSystem : EntitySystem
+{
+    [Dependency] private readonly SharedItemSystem _item = default!;
+
+    /// <inheritdoc/>
+    public override void Initialize()
+    {
+        base.Initialize();
+
+        SubscribeLocalEvent<ItemTogglePrefixComponent, ItemToggledEvent>(OnToggled);
+    }
+
+    private void OnToggled(Entity<ItemTogglePrefixComponent> ent, ref ItemToggledEvent args)
+    {
+        _item.SetHeldPrefix(ent.Owner, args.Activated ? ent.Comp.PrefixOn : ent.Comp.PrefixOff);
+    }
+}
index 6610ae87ccf6b128f5f789906a741d1892aa9874..6f88dde59545580f2985b297a98b799b38dcac89 100644 (file)
   - type: ComponentToggler
     components:
     - type: NoSlip
+  - type: ItemTogglePrefix
+    prefixOn: on
+  - type: ToggleClothingPrefix
+    prefixOn: on
   - type: Magboots
   - type: ClothingSpeedModifier
     walkModifier: 0.85
index cb908acffaf0e477bd941e52bc929d771cf1b715..59889ce6492153ad46a2674fd5ae640e5af74710 100644 (file)
@@ -25,6 +25,9 @@
       path: /Audio/Machines/button.ogg
       params:
         variation: 0.250
+  - type: ItemTogglePrefix
+    prefixOn: on
+    prefixOff: off
   - type: ItemToggleMeleeWeapon
     activatedDamage:
       types: