]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Head bandana ingestion blocking fix (#28910)
authorStalen <33173619+stalengd@users.noreply.github.com>
Fri, 9 Aug 2024 06:17:51 +0000 (09:17 +0300)
committerGitHub <noreply@github.com>
Fri, 9 Aug 2024 06:17:51 +0000 (16:17 +1000)
Content.Shared/Clothing/Components/MaskComponent.cs
Content.Shared/Clothing/EntitySystems/MaskSystem.cs
Resources/Prototypes/Entities/Clothing/Head/bandanas.yml
Resources/Prototypes/Entities/Clothing/Masks/bandanas.yml

index 5430417a8cdf2e378da209e3cc172416e52dc103..41b2b797f5d87fc0cb426b3e4588b5224c5a025a 100644 (file)
@@ -22,4 +22,16 @@ public sealed partial class MaskComponent : Component
 
     [DataField, AutoNetworkedField]
     public string EquippedPrefix = "toggled";
+
+    /// <summary>
+    /// When <see langword="true"/> will function normally, otherwise will not react to events
+    /// </summary>
+    [DataField("enabled"), AutoNetworkedField]
+    public bool IsEnabled = true;
+
+    /// <summary>
+    /// When <see langword="true"/> will disable <see cref="IsEnabled"/> when folded
+    /// </summary>
+    [DataField, AutoNetworkedField]
+    public bool DisableOnFolded;
 }
index 2a4383279a5ec27c13816939d594f6a9e981423e..fd0b7e782bfffdcc5bbef4553ca6c6c48a072ed9 100644 (file)
@@ -35,7 +35,7 @@ public sealed class MaskSystem : EntitySystem
     private void OnToggleMask(Entity<MaskComponent> ent, ref ToggleMaskEvent args)
     {
         var (uid, mask) = ent;
-        if (mask.ToggleActionEntity == null || !_timing.IsFirstTimePredicted)
+        if (mask.ToggleActionEntity == null || !_timing.IsFirstTimePredicted || !mask.IsEnabled)
             return;
 
         if (!_inventorySystem.TryGetSlotEntity(args.Performer, "mask", out var existing) || !uid.Equals(existing))
@@ -53,7 +53,7 @@ public sealed class MaskSystem : EntitySystem
     // set to untoggled when unequipped, so it isn't left in a 'pulled down' state
     private void OnGotUnequipped(EntityUid uid, MaskComponent mask, GotUnequippedEvent args)
     {
-        if (!mask.IsToggled)
+        if (!mask.IsToggled || !mask.IsEnabled)
             return;
 
         mask.IsToggled = false;
@@ -78,6 +78,8 @@ public sealed class MaskSystem : EntitySystem
 
     private void OnFolded(Entity<MaskComponent> ent, ref FoldedEvent args)
     {
+        if (ent.Comp.DisableOnFolded)
+            ent.Comp.IsEnabled = !args.IsFolded;
         ent.Comp.IsToggled = args.IsFolded;
 
         ToggleMaskComponents(ent.Owner, ent.Comp, ent.Owner);
index da56194f71562e590286b9c5d20ae59de24d4bfe..007cba3f220e6cf821d338365d0e4a7bee03d754 100644 (file)
@@ -7,6 +7,8 @@
     folded: true
   - type: Mask
     isToggled: true
+    enabled: false
+    disableOnFolded: true
   - type: IngestionBlocker
     enabled: false
   - type: IdentityBlocker
index 8021030095335c53880c6ab71aa4ff5e58578a74..bb5d6f2d2fda18decebd00f7aedb8b941048753c 100644 (file)
@@ -15,6 +15,7 @@
     unfoldedHideLayers:
     - Snout
   - type: Mask
+    disableOnFolded: true
   - type: IngestionBlocker
   - type: IdentityBlocker
     coverage: MOUTH