]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Simplify DoAfterArgs behavior for movement and distance checks (#25226)
authornikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com>
Tue, 19 Mar 2024 10:09:00 +0000 (12:09 +0200)
committerGitHub <noreply@github.com>
Tue, 19 Mar 2024 10:09:00 +0000 (21:09 +1100)
* Merge BreakOnWeightlessMove and BreakOnMove. Provide different theshold for weightless movement.

* Adjust WeightlessMovementThresholds. Put a thing I forgot to put in the doafterargs.

* Make DoAfterArgs only use OnMove to determine whether to check for
movement and MoveThreshold to determine the threshold regardless of
weightlessness. Gave DistanceThreshold a default value which will always
be checked now.

* Fix issue introduced by merge.

* Use interaction system for determining whether a distance is within range

* Fix incorrect doafter args introduced by previous merge.
Forgor to commit these.

* Exorcise ghost.

The execution system should have been deleted when I merged previously.
For a reason I cannot comprehend it came back, but only the execution
system.

* Exorcise ghost Pt. 2

* Allow for movement check to be overriden in zero g and adjust doafter args where needed.

You can now override checking for movement in zero g with the BreakOnWeightlessMove bool. By default it will check.
The following doafters were made to ignore the movement check in zero g:
- Healing yourself with healing items,
- Removing embedded projectiles,
- Using tools like welders and crowbars

* Adjust distance for cuffing/uncuffing to work. Make injections not break on weightless movement.

* Fix evil incorrect and uneeded comments

75 files changed:
Content.Server/Access/Systems/AccessOverriderSystem.cs
Content.Server/Animals/Systems/UdderSystem.cs
Content.Server/Body/Systems/InternalsSystem.cs
Content.Server/Botany/Systems/BotanySwabSystem.cs
Content.Server/Chemistry/EntitySystems/InjectorSystem.cs
Content.Server/Communications/CommsHackerSystem.cs
Content.Server/Construction/ConstructionSystem.Initial.cs
Content.Server/Construction/ConstructionSystem.Interactions.cs
Content.Server/Construction/PartExchangerSystem.cs
Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs
Content.Server/Engineering/EntitySystems/DisassembleOnAltVerbSystem.cs
Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs
Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs
Content.Server/Fluids/EntitySystems/DrainSystem.cs
Content.Server/Fluids/EntitySystems/PuddleSystem.Spillable.cs
Content.Server/Forensics/Systems/ForensicPadSystem.cs
Content.Server/Forensics/Systems/ForensicScannerSystem.cs
Content.Server/Forensics/Systems/ForensicsSystem.cs
Content.Server/Guardian/GuardianSystem.cs
Content.Server/Implants/ImplanterSystem.cs
Content.Server/Kitchen/EntitySystems/KitchenSpikeSystem.cs
Content.Server/Kitchen/EntitySystems/SharpSystem.cs
Content.Server/Light/EntitySystems/PoweredLightSystem.cs
Content.Server/Magic/MagicSystem.cs
Content.Server/MagicMirror/MagicMirrorSystem.cs
Content.Server/Mech/Equipment/EntitySystems/MechGrabberSystem.cs
Content.Server/Mech/Systems/MechEquipmentSystem.cs
Content.Server/Mech/Systems/MechSystem.cs
Content.Server/Medical/BiomassReclaimer/BiomassReclaimerSystem.cs
Content.Server/Medical/CryoPodSystem.cs
Content.Server/Medical/DefibrillatorSystem.cs
Content.Server/Medical/HealingSystem.cs
Content.Server/Medical/HealthAnalyzerSystem.cs
Content.Server/Medical/Stethoscope/StethoscopeSystem.cs
Content.Server/Ninja/Systems/BatteryDrainerSystem.cs
Content.Server/Nuke/NukeSystem.cs
Content.Server/Nutrition/EntitySystems/DrinkSystem.cs
Content.Server/Nutrition/EntitySystems/FoodSystem.cs
Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs
Content.Server/Power/Generator/PortableGeneratorSystem.cs
Content.Server/Resist/EscapeInventorySystem.cs
Content.Server/Resist/ResistLockerSystem.cs
Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs
Content.Server/SprayPainter/SprayPainterSystem.cs
Content.Server/Sticky/Systems/StickySystem.cs
Content.Server/Strip/StrippableSystem.cs
Content.Server/Teleportation/HandTeleporterSystem.cs
Content.Server/Wires/WiresSystem.cs
Content.Shared/Burial/BurialSystem.cs
Content.Shared/Climbing/Systems/BonkSystem.cs
Content.Shared/Climbing/Systems/ClimbSystem.cs
Content.Shared/Clothing/EntitySystems/ToggleableClothingSystem.cs
Content.Shared/Cuffs/SharedCuffableSystem.cs
Content.Shared/Devour/SharedDevourSystem.cs
Content.Shared/DoAfter/DoAfter.cs
Content.Shared/DoAfter/DoAfterArgs.cs
Content.Shared/DoAfter/SharedDoAfterSystem.Update.cs
Content.Shared/DoAfter/SharedDoAfterSystem.cs
Content.Shared/Inventory/InventorySystem.Equip.cs
Content.Shared/Lock/LockSystem.cs
Content.Shared/Mech/EntitySystems/SharedMechSystem.cs
Content.Shared/Projectiles/SharedProjectileSystem.cs
Content.Shared/Prying/Systems/PryingSystem.cs
Content.Shared/RCD/Systems/RCDSystem.cs
Content.Shared/RatKing/SharedRatKingSystem.cs
Content.Shared/Research/Systems/SharedResearchStealerSystem.cs
Content.Shared/Salvage/Fulton/SharedFultonSystem.cs
Content.Shared/Sericulture/SericultureSystem.cs
Content.Shared/Species/Systems/ReformSystem.cs
Content.Shared/SprayPainter/SharedSprayPainterSystem.cs
Content.Shared/Storage/EntitySystems/DumpableSystem.cs
Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
Content.Shared/Tools/Systems/SharedToolSystem.cs
Content.Shared/VendingMachines/SharedVendingMachineSystem.Restock.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs

index 10d7fd0f7a7f6004364bad097c726574a056b274..684312c7c11ab50f01a8031fcc91e244f1db7a75 100644 (file)
@@ -55,8 +55,7 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.DoAfter, new AccessOverriderDoAfterEvent(), uid, target: args.Target, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             NeedHand = true,
         };
index ef43c2c89d0e8d7de39fd93a6d58c39dea290948..b7856e904230297825b36f3cb580b86474d8dba7 100644 (file)
@@ -15,7 +15,7 @@ using Robust.Shared.Timing;
 namespace Content.Server.Animals.Systems;
 
 /// <summary>
-///     Gives ability to produce milkable reagents, produces endless if the 
+///     Gives ability to produce milkable reagents, produces endless if the
 ///     owner has no HungerComponent
 /// </summary>
 internal sealed class UdderSystem : EntitySystem
@@ -76,9 +76,8 @@ internal sealed class UdderSystem : EntitySystem
 
         var doargs = new DoAfterArgs(EntityManager, userUid, 5, new MilkingDoAfterEvent(), udder, udder, used: containerUid)
         {
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
             MovementThreshold = 1.0f,
         };
 
index 007cbdf08483a37ce10467951e83394cdc6de224..004dae99b97cadb08a4decc98d5116abca0bd735 100644 (file)
@@ -109,9 +109,8 @@ public sealed class InternalsSystem : EntitySystem
 
         _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, delay, new InternalsDoAfterEvent(), target, target: target)
         {
-            BreakOnUserMove = true,
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
+            BreakOnMove =  true,
             MovementThreshold = 0.1f,
         });
     }
index 8f300c94486151251974a90ad89e5a5e6fdae122..f6190bae4ea24c4391801e2e98b4957968449237 100644 (file)
@@ -47,8 +47,7 @@ public sealed class BotanySwabSystem : EntitySystem
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, swab.SwabDelay, new BotanySwabDoAfterEvent(), uid, target: args.Target, used: uid)
         {
             Broadcast = true,
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             NeedHand = true
         });
     }
index e718e14683b55a6173bde3ab15a99163ccf9805a..85d4ade3a4a7c687407c12b2af49815e173ccf10 100644 (file)
@@ -205,9 +205,9 @@ public sealed class InjectorSystem : SharedInjectorSystem
 
         DoAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, actualDelay, new InjectorDoAfterEvent(), injector.Owner, target: target, used: injector.Owner)
         {
-            BreakOnUserMove = true,
+            BreakOnMove = true,
+            BreakOnWeightlessMove = false,
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
             NeedHand = true,
             BreakOnHandChange = true,
             MovementThreshold = 0.1f,
index 1248d214003c8596bec211d252c03dc0f5396f58..44b3aa28bdf8412c55c4071d1347be52725a1858 100644 (file)
@@ -45,7 +45,7 @@ public sealed class CommsHackerSystem : SharedCommsHackerSystem
         var doAfterArgs = new DoAfterArgs(EntityManager, uid, comp.Delay, new TerrorDoAfterEvent(), target: target, used: uid, eventTarget: uid)
         {
             BreakOnDamage = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             MovementThreshold = 0.5f,
             CancelDuplicate = false
         };
index e0bdf096296f6d7d44810954807e93d3f5eb7fc3..298036650013f3d1471d375acfea84b7aaebb9ef 100644 (file)
@@ -250,8 +250,7 @@ namespace Content.Server.Construction
             var doAfterArgs = new DoAfterArgs(EntityManager, user, doAfterTime, new AwaitedDoAfterEvent(), null)
             {
                 BreakOnDamage = true,
-                BreakOnTargetMove = false,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = false,
                 // allow simultaneously starting several construction jobs using the same stack of materials.
                 CancelDuplicate = false,
index 946aaa0d3ee21d0f5f286f6b980392bf05053c3b..59a5fd6af512a5a67a0084ce37e37b7bbc1d7494 100644 (file)
@@ -288,8 +288,7 @@ namespace Content.Server.Construction
                         var doAfterEventArgs = new DoAfterArgs(EntityManager, interactUsing.User, step.DoAfter, doAfterEv, uid, uid, interactUsing.Used)
                         {
                             BreakOnDamage = false,
-                            BreakOnTargetMove = true,
-                            BreakOnUserMove = true,
+                            BreakOnMove = true,
                             NeedHand = true
                         };
 
index ee5edcbd0a03ec475542d1198a93902716cfba8c..174dd1d2faa9d3d04ae413054c970821098fc0e9 100644 (file)
@@ -174,7 +174,7 @@ public sealed class PartExchangerSystem : EntitySystem
         _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.ExchangeDuration, new ExchangerDoAfterEvent(), uid, target: args.Target, used: uid)
         {
             BreakOnDamage = true,
-            BreakOnUserMove = true
+            BreakOnMove = true
         });
     }
 }
index 6938792315ce67c54eab89e73a7da7de993085d2..df375de69511c29946f0a85903923b3f75006994 100644 (file)
@@ -512,8 +512,7 @@ public sealed class DisposalUnitSystem : SharedDisposalUnitSystem
         var doAfterArgs = new DoAfterArgs(EntityManager, userId.Value, delay, new DisposalDoAfterEvent(), unitId, target: toInsertId, used: unitId)
         {
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             NeedHand = false
         };
 
index 08bf68c4d290c4babce9453f3e2d0d4d20f65e47..61b6f3d93d2f260f4bdfbbaa0bcbc1f6f87bd675 100644 (file)
@@ -45,7 +45,7 @@ namespace Content.Server.Engineering.EntitySystems
             {
                 var doAfterArgs = new DoAfterArgs(EntityManager, user, component.DoAfterTime, new AwaitedDoAfterEvent(), null)
                 {
-                    BreakOnUserMove = true,
+                    BreakOnMove = true,
                 };
                 var result = await doAfterSystem.WaitDoAfter(doAfterArgs);
 
index 61c4937a271a35d30d753c16313d62ddf56d20ef..57999ae48ce2e0640fb13528c3b098ce9ff89ff5 100644 (file)
@@ -47,7 +47,7 @@ namespace Content.Server.Engineering.EntitySystems
             {
                 var doAfterArgs = new DoAfterArgs(EntityManager, args.User, component.DoAfterTime, new AwaitedDoAfterEvent(), null)
                 {
-                    BreakOnUserMove = true,
+                    BreakOnMove = true,
                 };
                 var result = await _doAfterSystem.WaitDoAfter(doAfterArgs);
 
index 169daca07aca1d1b7b03a1a14eb80e21ddbb5a3e..12c701866c6141c8c4f6ff7ef51d2bf8256530f8 100644 (file)
@@ -118,8 +118,7 @@ public sealed partial class EnsnareableSystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, user, freeTime, new EnsnareableDoAfterEvent(), target, target: target, used: ensnare)
         {
-            BreakOnUserMove = breakOnMove,
-            BreakOnTargetMove = breakOnMove,
+            BreakOnMove = breakOnMove,
             BreakOnDamage = false,
             NeedHand = true,
             BlockDuplicate = true,
index 19cb650db7cb9fae213c88c66dbed8e488c8c843..b8fa04b872e052ba40accdead99a35f293411114 100644 (file)
@@ -239,9 +239,8 @@ public sealed class DrainSystem : SharedDrainSystem
 
         var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.UnclogDuration, new DrainDoAfterEvent(), entity, args.Target, args.Used)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             BreakOnHandChange = true
         };
 
index 3cd6d06aebd246df83821a9f9c66caf1fada0c02..efaca271d3bb6d657a71ddb3ad835ef5061f6cbc 100644 (file)
@@ -203,9 +203,8 @@ public sealed partial class PuddleSystem
             {
                 _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, entity.Comp.SpillDelay ?? 0, new SpillDoAfterEvent(), entity.Owner, target: entity.Owner)
                 {
-                    BreakOnTargetMove = true,
-                    BreakOnUserMove = true,
                     BreakOnDamage = true,
+                    BreakOnMove = true,
                     NeedHand = true,
                 });
             };
index ad39817f8b0bbb5c5ab81f82b8da2b7599fa7ff2..42512cb1fdc45238810d425cd1224c6013c24bea 100644 (file)
@@ -83,9 +83,8 @@ namespace Content.Server.Forensics
 
             var doAfterEventArgs = new DoAfterArgs(EntityManager, user, pad.ScanDelay, ev, used, target: target, used: used)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
-                NeedHand = true
+                NeedHand = true,
+                BreakOnMove = true,
             };
 
             _doAfterSystem.TryStartDoAfter(doAfterEventArgs);
index 0d3168fd4e01595c5741249ee9489f366da25b18..729b7304fad7ae1939901a63fe3bec14efe4df0d 100644 (file)
@@ -95,8 +95,7 @@ namespace Content.Server.Forensics
         {
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.ScanDelay, new ForensicScannerDoAfterEvent(), uid, target: target, used: uid)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true
             });
         }
index a081429fd3a0db5d5a4f4e280a8ed78ea509fe35..a9ef23a2f58c0f20941f4ef92f4af1348313d7a5 100644 (file)
@@ -116,7 +116,7 @@ namespace Content.Server.Forensics
                     BreakOnHandChange = true,
                     NeedHand = true,
                     BreakOnDamage = true,
-                    BreakOnTargetMove = true,
+                    BreakOnMove = true,
                     MovementThreshold = 0.01f,
                     DistanceThreshold = forensicsComp.CleanDistance,
                 };
index 627c336a36bb6a75d5ba2fd647552954d56c7aa2..808de9f667b8280648af809e9577fe12ebe68132 100644 (file)
@@ -193,11 +193,7 @@ namespace Content.Server.Guardian
                 return;
             }
 
-            _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.InjectionDelay, new GuardianCreatorDoAfterEvent(), injector, target: target, used: injector)
-            {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true
-            });
+            _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.InjectionDelay, new GuardianCreatorDoAfterEvent(), injector, target: target, used: injector){BreakOnMove = true});
         }
 
         private void OnDoAfter(EntityUid uid, GuardianCreatorComponent component, DoAfterEvent args)
index 0d46241f41463680a38cc1d5f1fb11e9e628edc7..56d0bd3bbd0d0611a9024937649d3ce37e52fd95 100644 (file)
@@ -78,9 +78,8 @@ public sealed partial class ImplanterSystem : SharedImplanterSystem
     {
         var args = new DoAfterArgs(EntityManager, user, component.ImplantTime, new ImplantEvent(), implanter, target: target, used: implanter)
         {
-            BreakOnUserMove = true,
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             NeedHand = true,
         };
 
@@ -105,9 +104,8 @@ public sealed partial class ImplanterSystem : SharedImplanterSystem
     {
         var args = new DoAfterArgs(EntityManager, user, component.DrawTime, new DrawEvent(), implanter, target: target, used: implanter)
         {
-            BreakOnUserMove = true,
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             NeedHand = true,
         };
 
index 0419e13d230cac0251bc1361d74d52306709307f..b145bec0148494a5cb5820e6bf224ce755f101ea 100644 (file)
@@ -257,9 +257,8 @@ namespace Content.Server.Kitchen.EntitySystems
 
             var doAfterArgs = new DoAfterArgs(EntityManager, userUid, component.SpikeDelay + butcherable.ButcherDelay, new SpikeDoAfterEvent(), uid, target: victimUid, used: uid)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
                 BreakOnDamage = true,
+                BreakOnMove = true,
                 NeedHand = true
             };
 
index 2c5f88baec7002cdc51cc3ebd579a63bd4e2e1f1..2caab4063cf2354691b982df946f6eddb230edbc 100644 (file)
@@ -75,9 +75,8 @@ public sealed class SharpSystem : EntitySystem
         var doAfter =
             new DoAfterArgs(EntityManager, user, sharp.ButcherDelayModifier * butcher.ButcherDelay, new SharpDoAfterEvent(), knife, target: target, used: knife)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
                 BreakOnDamage = true,
+                BreakOnMove = true,
                 NeedHand = true
             };
         _doAfterSystem.TryStartDoAfter(doAfter);
index e880cec5bbb300c9fde85cc436342abd6e6b5e1f..8aa432c21ea22ac2994e03416a923552433a8afd 100644 (file)
@@ -150,7 +150,7 @@ namespace Content.Server.Light.EntitySystems
             // removing a working bulb, so require a delay
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, userUid, light.EjectBulbDelay, new PoweredLightDoAfterEvent(), uid, target: uid)
             {
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 BreakOnDamage = true,
             });
 
index 2c9b11dbd3dc76e253192c084e35776eabfc6895..371814cacbc1859a12ba0713e5dddd280cd0ce64 100644 (file)
@@ -118,9 +118,8 @@ public sealed class MagicSystem : EntitySystem
     {
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.LearnTime, new SpellbookDoAfterEvent(), uid, target: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             NeedHand = true //What, are you going to read with your eyes only??
         };
 
index aef6e11d71c8ec1ff7f73f6d253895516ed58448..9ffd9a07a9f325ee759d1c15bf6a633d7443d923 100644 (file)
@@ -95,11 +95,9 @@ public sealed class MagicMirrorSystem : EntitySystem
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.SelectSlotTime, doAfter, uid, target: target, used: uid)
         {
             DistanceThreshold = SharedInteractionSystem.InteractionRange,
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             BreakOnHandChange = false,
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = false,
             NeedHand = true
         }, out var doAfterId);
 
@@ -151,11 +149,9 @@ public sealed class MagicMirrorSystem : EntitySystem
 
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.ChangeSlotTime, doAfter, uid, target: target, used: uid)
         {
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             BreakOnHandChange = false,
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = false,
             NeedHand = true
         }, out var doAfterId);
 
@@ -206,11 +202,8 @@ public sealed class MagicMirrorSystem : EntitySystem
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.RemoveSlotTime, doAfter, uid, target: target, used: uid)
         {
             DistanceThreshold = SharedInteractionSystem.InteractionRange,
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
             BreakOnHandChange = false,
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = false,
             NeedHand = true
         }, out var doAfterId);
 
@@ -263,11 +256,9 @@ public sealed class MagicMirrorSystem : EntitySystem
 
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Session.AttachedEntity.Value, component.AddSlotTime, doAfter, uid, target: component.Target.Value, used: uid)
         {
-            BreakOnTargetMove = true,
             BreakOnDamage = true,
+            BreakOnMove = true,
             BreakOnHandChange = false,
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = false,
             NeedHand = true
         }, out var doAfterId);
 
index fa46792d2af91c86b94f4ca3864d617a6e9ac492..4b2ba8ffbdccde70a6b713485506cbdc0db79419 100644 (file)
@@ -157,8 +157,7 @@ public sealed class MechGrabberSystem : EntitySystem
         component.AudioStream = _audio.PlayPvs(component.GrabSound, uid).Value.Entity;
         var doAfterArgs = new DoAfterArgs(EntityManager, args.User, component.GrabDelay, new GrabberDoAfterEvent(), uid, target: target, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true
+            BreakOnMove = true
         };
 
         _doAfter.TryStartDoAfter(doAfterArgs, out component.DoAfter);
index 5191f53004e84c6a457663d398ed3e041b02ef9c..f51c0444e69d6221614dbbaf70b98fc344796804 100644 (file)
@@ -47,8 +47,7 @@ public sealed class MechEquipmentSystem : EntitySystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.InstallDuration, new InsertEquipmentEvent(), uid, target: mech, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true
+            BreakOnMove = true,
         };
 
         _doAfter.TryStartDoAfter(doAfterEventArgs);
index 1012b9727df4f39c98afc960ab8f371c24d74282..206eb894d7e8ea52033f8e8774bb1439d229394c 100644 (file)
@@ -92,10 +92,10 @@ public sealed partial class MechSystem : SharedMechSystem
 
         if (TryComp<ToolComponent>(args.Used, out var tool) && tool.Qualities.Contains("Prying") && component.BatterySlot.ContainedEntity != null)
         {
-            var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.BatteryRemovalDelay, new RemoveBatteryEvent(), uid, target: uid, used: args.Target)
+            var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.BatteryRemovalDelay,
+                new RemoveBatteryEvent(), uid, target: uid, used: args.Target)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true
             };
 
             _doAfter.TryStartDoAfter(doAfterEventArgs);
@@ -182,7 +182,7 @@ public sealed partial class MechSystem : SharedMechSystem
                 {
                     var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.EntryDelay, new MechEntryEvent(), uid, target: uid)
                     {
-                        BreakOnUserMove = true,
+                        BreakOnMove = true,
                     };
 
                     _doAfter.TryStartDoAfter(doAfterEventArgs);
@@ -210,11 +210,8 @@ public sealed partial class MechSystem : SharedMechSystem
                         return;
                     }
 
-                    var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.ExitDelay, new MechExitEvent(), uid, target: uid)
-                    {
-                        BreakOnUserMove = true,
-                        BreakOnTargetMove = true,
-                    };
+                    var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.ExitDelay,
+                        new MechExitEvent(), uid, target: uid);
 
                     _doAfter.TryStartDoAfter(doAfterEventArgs);
                 }
index d07858aec5c749860c3b424a66b7c60205d9c96a..f8d5139a46a8d0d993b86b92ef354d34301edf78 100644 (file)
@@ -165,9 +165,8 @@ namespace Content.Server.Medical.BiomassReclaimer
             var delay = reclaimer.Comp.BaseInsertionDelay * physics.FixturesMass;
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, delay, new ReclaimerDoAfterEvent(), reclaimer, target: args.Target, used: args.Used)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
-                NeedHand = true
+                NeedHand = true,
+                BreakOnMove = true
             });
         }
 
index 4ab94c72b9f468005a8ac322385a0c972a30603a..a7d12d9f0fdf740fad7bc96ce6debe7547926359 100644 (file)
@@ -142,8 +142,7 @@ public sealed partial class CryoPodSystem : SharedCryoPodSystem
         var doAfterArgs = new DoAfterArgs(EntityManager, args.User, entity.Comp.EntryDelay, new CryoPodDragFinished(), entity, target: args.Dragged, used: entity)
         {
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             NeedHand = false,
         };
         _doAfterSystem.TryStartDoAfter(doAfterArgs);
index 467085f49eda1af67e49703cd905229b69ea77c8..64861fdc515894d22ac96fd303b372a61fe25560 100644 (file)
@@ -178,8 +178,6 @@ public sealed class DefibrillatorSystem : EntitySystem
             uid, target, uid)
             {
                 BlockDuplicate = true,
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
                 BreakOnHandChange = true,
                 NeedHand = true
             });
index 1b90d195c4e997adce8d90b339fc5255dad683c6..fb6883dfd12cf658384c7025e1c347e5cf44cb91 100644 (file)
@@ -196,12 +196,11 @@ public sealed class HealingSystem : EntitySystem
         var doAfterEventArgs =
             new DoAfterArgs(EntityManager, user, delay, new HealingDoAfterEvent(), target, target: target, used: uid)
             {
-                //Raise the event on the target if it's not self, otherwise raise it on self.
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
                 // Didn't break on damage as they may be trying to prevent it and
                 // not being able to heal your own ticking damage would be frustrating.
                 NeedHand = true,
+                BreakOnMove = true,
+                BreakOnWeightlessMove = false,
             };
 
         _doAfter.TryStartDoAfter(doAfterEventArgs);
index 0e893c41145e7cf46ab0147a3d25ecc8454aa903..01d0d5c791e47bed43902726acbfbb2a2705f48a 100644 (file)
@@ -76,9 +76,8 @@ public sealed class HealthAnalyzerSystem : EntitySystem
 
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, uid.Comp.ScanDelay, new HealthAnalyzerDoAfterEvent(), uid, target: args.Target, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
-            NeedHand = true
+            NeedHand = true,
+            BreakOnMove = true
         });
     }
 
index 9521c14f2e3314eacf7ea760b3567ba04bafc2f6..f1864bb3a1ce54467a77af7f3883753b5261b7b6 100644 (file)
@@ -107,9 +107,8 @@ namespace Content.Server.Medical.Stethoscope
         {
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, comp.Delay, new StethoscopeDoAfterEvent(), scope, target: target, used: scope)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
-                NeedHand = true
+                NeedHand = true,
+                BreakOnMove = true,
             });
         }
 
index 552ee0397fb0087d90eac587b8ada87b44a312c9..59dec556fa0b55ce2eeb0dc3aa95c33dcba81e66 100644 (file)
@@ -50,9 +50,8 @@ public sealed class BatteryDrainerSystem : SharedBatteryDrainerSystem
 
         var doAfterArgs = new DoAfterArgs(EntityManager, uid, comp.DrainTime, new DrainDoAfterEvent(), target: target, eventTarget: uid)
         {
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = true, // prevent a ninja on a pod remotely draining it
             MovementThreshold = 0.5f,
+            BreakOnMove = true,
             CancelDuplicate = false,
             AttemptFrequency = AttemptFrequency.StartAndEnd
         };
index d6767cd2de8af9b29dcd1fba53cc66cf737c38dc..60163015cc473aa4635d74d3481913f0adc06a0b 100644 (file)
@@ -591,8 +591,7 @@ public sealed class NukeSystem : EntitySystem
         var doAfter = new DoAfterArgs(EntityManager, user, nuke.DisarmDoafterLength, new NukeDisarmDoAfterEvent(), uid, target: uid)
         {
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             NeedHand = true
         };
 
index 6327cf6ae2c3731d57fa9cc68e15dbffb2b103fe..5fb090087a75e51eebf81a1309294143a52c35b8 100644 (file)
@@ -283,9 +283,8 @@ public sealed class DrinkSystem : EntitySystem
             target: target,
             used: item)
         {
-            BreakOnUserMove = forceDrink,
+            BreakOnMove = forceDrink,
             BreakOnDamage = true,
-            BreakOnTargetMove = forceDrink,
             MovementThreshold = 0.01f,
             DistanceThreshold = 1.0f,
             // Mice and the like can eat without hands.
index 2b627151339b9d59f87ab7378847db1e1688b9f0..d87b0bd0b02ec657d10913670075652fe9fb2696 100644 (file)
@@ -180,9 +180,8 @@ public sealed class FoodSystem : EntitySystem
             target: target,
             used: food)
         {
-            BreakOnUserMove = forceFeed,
+            BreakOnMove = forceFeed,
             BreakOnDamage = true,
-            BreakOnTargetMove = forceFeed,
             MovementThreshold = 0.01f,
             DistanceThreshold = MaxFeedDistance,
             // Mice and the like can eat without hands.
index fe0d1d0c1686f99bf808e42b62d73f8ec255f56f..fb56dffac96229b5edfd85fda689493c4525543a 100644 (file)
@@ -113,8 +113,7 @@ namespace Content.Server.Nutrition.EntitySystems
                 var vapeDoAfterEvent = new VapeDoAfterEvent(solution, forced);
                 _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, delay, vapeDoAfterEvent, entity.Owner, target: args.Target, used: entity.Owner)
                 {
-                    BreakOnTargetMove = true,
-                    BreakOnUserMove = false,
+                    BreakOnMove = false,
                     BreakOnDamage = true
                 });
             }
index e8e9c5b45e3cd5ad51798ed4a78c6801e1a81f3f..3cd18d7d56942a4a864dfb999821bb12bc349013 100644 (file)
@@ -84,7 +84,7 @@ public sealed class PortableGeneratorSystem : SharedPortableGeneratorSystem
 
         _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.StartTime, new GeneratorStartedEvent(), uid, uid)
         {
-            BreakOnDamage = true, BreakOnTargetMove = true, BreakOnUserMove = true, RequireCanInteract = true,
+            BreakOnDamage = true, BreakOnMove = true, RequireCanInteract = true,
             NeedHand = true
         });
     }
index 8cb6d218e2b17fae4964fdb31a122be0555d96b3..6bce38fbacffa76d5dd28915cd7e81b9c8b71b1d 100644 (file)
@@ -63,8 +63,7 @@ public sealed class EscapeInventorySystem : EntitySystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, user, component.BaseResistTime * multiplier, new EscapeInventoryEvent(), user, target: container)
         {
-            BreakOnTargetMove = false,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             NeedHand = false
         };
index 7a17a2eba1994c9870765ee10e4b27509e53de6f..2ab277d0f1a16fae4b446e21376ebd1e620afb28 100644 (file)
@@ -47,8 +47,7 @@ public sealed class ResistLockerSystem : EntitySystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, user, resistLockerComponent.ResistTime, new ResistLockerDoAfterEvent(), target, target: target)
         {
-            BreakOnTargetMove = false,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             NeedHand = false //No hands 'cause we be kickin'
         };
index eb6eb5a426f2a881ab9b3dd7fdd61cc6aad77c3a..0ac6ccd613c5f9b9917e9ee28dcf2a6870f114b7 100644 (file)
@@ -85,7 +85,7 @@ public sealed partial class RevenantSystem
     {
         var searchDoAfter = new DoAfterArgs(EntityManager, uid, revenant.SoulSearchDuration, new SoulEvent(), uid, target: target)
         {
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             DistanceThreshold = 2
         };
@@ -140,7 +140,7 @@ public sealed partial class RevenantSystem
         var doAfter = new DoAfterArgs(EntityManager, uid, revenant.HarvestDebuffs.X, new HarvestEvent(), uid, target: target)
         {
             DistanceThreshold = 2,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             RequireCanInteract = false, // stuns itself
         };
index e49c49c1da059218364e36b019d29a07952ab6f7..a8024e2d77b884cc97a59095f8b588df783bb170 100644 (file)
@@ -55,8 +55,7 @@ public sealed class SprayPainterSystem : SharedSprayPainterSystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.PipeSprayTime, new SprayPainterPipeDoAfterEvent(color), args.Used, target: ent, used: args.Used)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             CancelDuplicate = true,
             // multiple pipes can be sprayed at once just not the same one
index 2d1104e2ceb32883c52710a12f9f44130a1dd648..effe1b72f7187267ec92bac423444a880b19b7c4 100644 (file)
@@ -93,8 +93,7 @@ public sealed class StickySystem : EntitySystem
             // start sticking object to target
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, delay, new StickyDoAfterEvent(), uid, target: target, used: uid)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true
             });
         }
@@ -148,8 +147,7 @@ public sealed class StickySystem : EntitySystem
             // start unsticking object
             _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, user, delay, new StickyDoAfterEvent(), uid, target: uid)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true
             });
         }
index 3b38b65a19d5f094a7b5c13d0b2cb5e19bf4bb98..d28744fe4a86a4a84d876f7f77aa774bfcc9e71a 100644 (file)
@@ -262,8 +262,7 @@ namespace Content.Server.Strip
                 Hidden = stealth,
                 AttemptFrequency = AttemptFrequency.EveryTick,
                 BreakOnDamage = true,
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true,
                 DuplicateCondition = DuplicateConditions.SameTool
             };
@@ -356,8 +355,7 @@ namespace Content.Server.Strip
                 Hidden = stealth,
                 AttemptFrequency = AttemptFrequency.EveryTick,
                 BreakOnDamage = true,
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true,
                 BreakOnHandChange = false, // Allow simultaneously removing multiple items.
                 DuplicateCondition = DuplicateConditions.SameTool
@@ -454,8 +452,7 @@ namespace Content.Server.Strip
                 Hidden = stealth,
                 AttemptFrequency = AttemptFrequency.EveryTick,
                 BreakOnDamage = true,
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true,
                 DuplicateCondition = DuplicateConditions.SameTool
             };
@@ -554,8 +551,7 @@ namespace Content.Server.Strip
                 Hidden = stealth,
                 AttemptFrequency = AttemptFrequency.EveryTick,
                 BreakOnDamage = true,
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 NeedHand = true,
                 BreakOnHandChange = false, // Allow simultaneously removing multiple items.
                 DuplicateCondition = DuplicateConditions.SameTool
index 29cde5d741d66da80189abde970666b2e2eb0181..3d988b0916148516eef3c51d5af60123516c603e 100644 (file)
@@ -58,7 +58,7 @@ public sealed class HandTeleporterSystem : EntitySystem
             var doafterArgs = new DoAfterArgs(EntityManager, args.User, component.PortalCreationDelay, new TeleporterDoAfterEvent(), uid, used: uid)
             {
                 BreakOnDamage = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 MovementThreshold = 0.5f,
             };
 
index 0f9ee8b0f75fd71ef79416f75d1e2db1ef0343e4..a2deb11fe78dd84fa0de35a38bcd8512c2787fe1 100644 (file)
@@ -701,7 +701,7 @@ public sealed class WiresSystem : SharedWiresSystem
             {
                 NeedHand = true,
                 BreakOnDamage = true,
-                BreakOnUserMove = true
+                BreakOnMove = true
             };
 
             _doAfter.TryStartDoAfter(args);
index 937784ca2ab1671172d01b6f5e1ea913de1404b7..e19ac2e9c67aaebc437a1c0a792fc9212679c435 100644 (file)
@@ -45,8 +45,7 @@ public sealed class BurialSystem : EntitySystem
         {
             var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.DigDelay / shovel.SpeedModifier, new GraveDiggingDoAfterEvent(), uid, target: args.Target, used: uid)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
                 BreakOnDamage = true,
                 NeedHand = true,
                 BreakOnHandChange = true
@@ -159,8 +158,7 @@ public sealed class BurialSystem : EntitySystem
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Entity, component.DigDelay / component.DigOutByHandModifier, new GraveDiggingDoAfterEvent(), uid, target: uid)
         {
             NeedHand = false,
-            BreakOnUserMove = true,
-            BreakOnTargetMove = false,
+            BreakOnMove = true,
             BreakOnHandChange = false,
             BreakOnDamage = false
         };
index e91d1eadbec14494a640b67e5932ff3e81c6af3d..149abee8b02f9d0d091b596955a5b5d00d6def5c 100644 (file)
@@ -82,8 +82,7 @@ public sealed partial class BonkSystem : EntitySystem
 
         var doAfterArgs = new DoAfterArgs(EntityManager, args.Dragged, component.BonkDelay, new BonkDoAfterEvent(), uid, target: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true
         };
 
index 7c760f2c5de601c796c11a5fa3fa725a18d199ea..fcf473f9f1b24b549448cd4d3eda27b51269b26b 100644 (file)
@@ -211,8 +211,7 @@ public sealed partial class ClimbSystem : VirtualController
             target: climbable,
             used: entityToMove)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true
         };
 
index 22a1d1a8f521f02a8dc7cf8e44d0e291d628aaca..c828b22481afe8f372d32fa64fa1c2627702d64d 100644 (file)
@@ -100,7 +100,7 @@ public sealed class ToggleableClothingSystem : EntitySystem
         var args = new DoAfterArgs(EntityManager, user, time, new ToggleClothingDoAfterEvent(), item, wearer, item)
         {
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
+            BreakOnMove = true,
             // This should just re-use the BUI range checks & cancel the do after if the BUI closes. But that is all
             // server-side at the moment.
             // TODO BUI REFACTOR.
index 5cade56aca1b4e1483b885ceade1a3691c6ad1c8..ca903719c448d4201a969931216b9258f3b670da 100644 (file)
@@ -479,10 +479,11 @@ namespace Content.Shared.Cuffs
 
             var doAfterEventArgs = new DoAfterArgs(EntityManager, user, cuffTime, new AddCuffDoAfterEvent(), handcuff, target, handcuff)
             {
-                BreakOnTargetMove = true,
-                BreakOnUserMove = true,
+                BreakOnMove = true,
+                BreakOnWeightlessMove = false,
                 BreakOnDamage = true,
-                NeedHand = true
+                NeedHand = true,
+                DistanceThreshold = 0.3f
             };
 
             if (!_doAfter.TryStartDoAfter(doAfterEventArgs))
@@ -574,11 +575,12 @@ namespace Content.Shared.Cuffs
 
             var doAfterEventArgs = new DoAfterArgs(EntityManager, user, uncuffTime, new UnCuffDoAfterEvent(), target, target, cuffsToRemove)
             {
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
+                BreakOnMove = true,
+                BreakOnWeightlessMove = false,
                 BreakOnDamage = true,
                 NeedHand = true,
                 RequireCanInteract = false, // Trust in UncuffAttemptEvent
+                DistanceThreshold = 0.3f
             };
 
             if (!_doAfter.TryStartDoAfter(doAfterEventArgs))
index a2b788f3f38c981217c124a7316d412940139730..3d73b14dd35631eb3be2bbad1e5ca3ef47cccaf9 100644 (file)
@@ -57,8 +57,7 @@ public abstract class SharedDevourSystem : EntitySystem
 
                     _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.DevourTime, new DevourDoAfterEvent(), uid, target: target, used: uid)
                     {
-                        BreakOnTargetMove = true,
-                        BreakOnUserMove = true,
+                        BreakOnMove = true,
                     });
                     break;
                 default:
@@ -76,8 +75,7 @@ public abstract class SharedDevourSystem : EntitySystem
 
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, uid, component.StructureDevourTime, new DevourDoAfterEvent(), uid, target: target, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
         });
     }
 }
index d999b370b3f425024dd00aff64556d8495d76950..f77a6dc272eb74543efa512be6b3a5b90871f40e 100644 (file)
@@ -82,12 +82,6 @@ public sealed partial class DoAfter
     {
         Index = index;
 
-        if (args.Target == null)
-        {
-            DebugTools.Assert(!args.BreakOnTargetMove);
-            args.BreakOnTargetMove = false;
-        }
-
         Args = args;
         StartTime = startTime;
     }
index d2729ad3c64472e168a1d875fca83e96f7af307b..d96ea84e1720e9b2eca410da166c87bc37cd1d6c 100644 (file)
@@ -92,29 +92,23 @@ public sealed partial class DoAfterArgs
     public bool BreakOnHandChange = true;
 
     /// <summary>
-    ///     If do_after stops when the user moves
+    ///     If do_after stops when the user or target moves
     /// </summary>
-    [DataField("breakOnUserMove")]
-    public bool BreakOnUserMove;
-
-    /// <summary>
-    ///     If this is true then any movement, even when weightless, will break the doafter.
-    ///     When there is no gravity, BreakOnUserMove is ignored. If it is false to begin with nothing will change.
-    /// </summary>
-    [DataField("breakOnWeightlessMove")]
-    public bool BreakOnWeightlessMove;
+    [DataField]
+    public bool BreakOnMove;
 
     /// <summary>
-    ///     If do_after stops when the target moves (if there is a target)
+    ///     Whether to break on movement when the user is weightless.
+    ///     This does nothing if <see cref="BreakOnMove"/> is false.
     /// </summary>
-    [DataField("breakOnTargetMove")]
-    public bool BreakOnTargetMove;
+    [DataField]
+    public bool BreakOnWeightlessMove = true;
 
     /// <summary>
     ///     Threshold for user and target movement
     /// </summary>
     [DataField("movementThreshold")]
-    public float MovementThreshold = 0.1f;
+    public float MovementThreshold = 0.3f;
 
     /// <summary>
     ///     Threshold for distance user from the used OR target entities.
@@ -250,9 +244,8 @@ public sealed partial class DoAfterArgs
         Broadcast = other.Broadcast;
         NeedHand = other.NeedHand;
         BreakOnHandChange = other.BreakOnHandChange;
-        BreakOnUserMove = other.BreakOnUserMove;
+        BreakOnMove = other.BreakOnMove;
         BreakOnWeightlessMove = other.BreakOnWeightlessMove;
-        BreakOnTargetMove = other.BreakOnTargetMove;
         MovementThreshold = other.MovementThreshold;
         DistanceThreshold = other.DistanceThreshold;
         BreakOnDamage = other.BreakOnDamage;
index abd8888f583f9d1b64679d7617762aefc9742633..455491f5242a720a4dff81d5a18a402b954a50f7 100644 (file)
@@ -1,5 +1,7 @@
 using Content.Shared.Gravity;
 using Content.Shared.Hands.Components;
+using Content.Shared.Interaction;
+using Content.Shared.Physics;
 using Robust.Shared.Utility;
 
 namespace Content.Shared.DoAfter;
@@ -8,6 +10,7 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
 {
     [Dependency] private readonly IDynamicTypeFactory _factory = default!;
     [Dependency] private readonly SharedGravitySystem _gravity = default!;
+    [Dependency] private readonly SharedInteractionSystem _interaction = default!;
 
     private DoAfter[] _doAfters = Array.Empty<DoAfter>();
 
@@ -163,24 +166,53 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
             return true;
 
         // TODO: Re-use existing xform query for these calculations.
-        // when there is no gravity you will be drifting 99% of the time making many doafters impossible
-        // so this just ignores your movement if you are weightless (unless the doafter sets BreakOnWeightlessMove then moving will still break it)
-        if (args.BreakOnUserMove
-            && !userXform.Coordinates.InRange(EntityManager, _transform, doAfter.UserPosition, args.MovementThreshold)
-            && (args.BreakOnWeightlessMove || !_gravity.IsWeightless(args.User, xform: userXform)))
-            return true;
-
-        if (args.BreakOnTargetMove)
+        if (args.BreakOnMove && !(!args.BreakOnWeightlessMove && _gravity.IsWeightless(args.User, xform: userXform)))
         {
-            DebugTools.Assert(targetXform != null, "Break on move is true, but no target specified?");
-            if (targetXform != null && targetXform.Coordinates.TryDistance(EntityManager, userXform.Coordinates, out var distance))
+            // Whether the user has moved too much from their original position.
+            if (!userXform.Coordinates.InRange(EntityManager, _transform, doAfter.UserPosition, args.MovementThreshold))
+                return true;
+
+            // Whether the distance between the user and target(if any) has changed too much.
+            if (targetXform != null &&
+                targetXform.Coordinates.TryDistance(EntityManager, userXform.Coordinates, out var distance))
             {
-                // once the target moves too far from you the do after breaks
                 if (Math.Abs(distance - doAfter.TargetDistance) > args.MovementThreshold)
                     return true;
             }
         }
 
+        // Whether the user and the target are too far apart.
+        if (args.Target != null)
+        {
+            if (args.DistanceThreshold != null)
+            {
+                if (!_interaction.InRangeUnobstructed(args.User, args.Target.Value, args.DistanceThreshold.Value))
+                    return true;
+            }
+            else
+            {
+                if (!_interaction.InRangeUnobstructed(args.User, args.Target.Value))
+                    return true;
+            }
+        }
+
+        // Whether the distance between the tool and the user has grown too much.
+        if (args.Used != null)
+        {
+            if (args.DistanceThreshold != null)
+            {
+                if (!_interaction.InRangeUnobstructed(args.User,
+                        args.Used.Value,
+                        args.DistanceThreshold.Value))
+                    return true;
+            }
+            else
+            {
+                if (!_interaction.InRangeUnobstructed(args.User,args.Used.Value))
+                    return true;
+            }
+        }
+
         if (args.AttemptFrequency == AttemptFrequency.EveryTick && !TryAttemptEvent(doAfter))
             return true;
 
@@ -199,23 +231,6 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
         if (args.RequireCanInteract && !_actionBlocker.CanInteract(args.User, args.Target))
             return true;
 
-        if (args.DistanceThreshold != null)
-        {
-            if (targetXform != null
-                && !args.User.Equals(args.Target)
-                && !userXform.Coordinates.InRange(EntityManager, _transform, targetXform.Coordinates,
-                    args.DistanceThreshold.Value))
-            {
-                return true;
-            }
-
-            if (usedXform != null
-                && !userXform.Coordinates.InRange(EntityManager, _transform, usedXform.Coordinates,
-                    args.DistanceThreshold.Value))
-            {
-                return true;
-            }
-        }
 
         return false;
     }
index 9e81c91550f6edddb90081d2e0b3d9343dd01d9e..d20da4948583da72ead8c968e331eb423a41c4d2 100644 (file)
@@ -214,12 +214,11 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
         args.NetUser = GetNetEntity(args.User);
         args.NetEventTarget = GetNetEntity(args.EventTarget);
 
-        if (args.BreakOnUserMove || args.BreakOnTargetMove)
+        if (args.BreakOnMove)
             doAfter.UserPosition = Transform(args.User).Coordinates;
 
-        if (args.Target != null && args.BreakOnTargetMove)
+        if (args.Target != null && args.BreakOnMove)
         {
-            // Target should never be null if the bool is set.
             var targetPosition = Transform(args.Target.Value).Coordinates;
             doAfter.UserPosition.TryDistance(EntityManager, targetPosition, out doAfter.TargetDistance);
         }
index 24006b0c9f9fc97b30dd573fc5a6a9690fdbf186..7c9279df20d28008f73e78c162c002d9c4be866f 100644 (file)
@@ -168,8 +168,7 @@ public abstract partial class InventorySystem
             {
                 BlockDuplicate = true,
                 BreakOnHandChange = true,
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
+                BreakOnMove = true,
                 CancelDuplicate = true,
                 RequireCanInteract = true,
                 NeedHand = true
@@ -414,8 +413,7 @@ public abstract partial class InventorySystem
             {
                 BlockDuplicate = true,
                 BreakOnHandChange = true,
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
+                BreakOnMove = true,
                 CancelDuplicate = true,
                 RequireCanInteract = true,
                 NeedHand = true
index 53c199e4108626c39224e96e3fced5a8da6768df..74cf5496d9a74ef04bf92cadf5480ea01d071d09 100644 (file)
@@ -111,7 +111,7 @@ public sealed class LockSystem : EntitySystem
             return _doAfter.TryStartDoAfter(
                 new DoAfterArgs(EntityManager, user, lockComp.LockTime, new LockDoAfter(), uid, uid)
                 {
-                    BreakOnDamage = true, BreakOnTargetMove = true, BreakOnUserMove = true, RequireCanInteract = true,
+                    BreakOnDamage = true, BreakOnMove = true, RequireCanInteract = true,
                     NeedHand = true
                 });
         }
@@ -187,7 +187,7 @@ public sealed class LockSystem : EntitySystem
             return _doAfter.TryStartDoAfter(
                 new DoAfterArgs(EntityManager, user, lockComp.LockTime, new UnlockDoAfter(), uid, uid)
                 {
-                    BreakOnDamage = true, BreakOnTargetMove = true, BreakOnUserMove = true, RequireCanInteract = true,
+                    BreakOnDamage = true, BreakOnMove = true, RequireCanInteract = true,
                     NeedHand = true
                 });
         }
index 7e44dea5078bfa82f3433a74c27c71dfb145836a..df0d7b78f0bb5639255d1a3c55e362d816a496f9 100644 (file)
@@ -434,7 +434,7 @@ public abstract class SharedMechSystem : EntitySystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.Dragged, component.EntryDelay, new MechEntryEvent(), uid, target: uid)
         {
-            BreakOnUserMove = true,
+            BreakOnMove = true,
         };
 
         _doAfter.TryStartDoAfter(doAfterEventArgs);
index f40a7a0363bab6685cc406bad0c1567b0f59c6b7..372dc8a75d19f324631812136b55428b016f67fb 100644 (file)
@@ -53,10 +53,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
         args.Handled = true;
 
         _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.RemovalTime.Value,
-            new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid)
-        {
-            DistanceThreshold = SharedInteractionSystem.InteractionRange,
-        });
+            new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid));
     }
 
     private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent component, RemoveEmbeddedProjectileEvent args)
index fa7a135e6c525cca5a6ffbf07be9f542f538c8d8..69a63f72b54a416ac51afc7f987701e11881676f 100644 (file)
@@ -136,8 +136,7 @@ public sealed class PryingSystem : EntitySystem
         var doAfterArgs = new DoAfterArgs(EntityManager, user, TimeSpan.FromSeconds(modEv.BaseTime * modEv.PryTimeModifier / toolModifier), new DoorPryDoAfterEvent(), target, target, tool)
         {
             BreakOnDamage = true,
-            BreakOnUserMove = true,
-            BreakOnWeightlessMove = true,
+            BreakOnMove = true,
         };
 
         if (tool != null)
index 187c8d8a9d847572eaf21274152b075593da7190..f767d0b99c03bd68a636148d7f97495a25059cf1 100644 (file)
@@ -104,8 +104,7 @@ public sealed class RCDSystem : EntitySystem
             BreakOnDamage = true,
             NeedHand = true,
             BreakOnHandChange = true,
-            BreakOnUserMove = true,
-            BreakOnTargetMove = args.Target != null,
+            BreakOnMove = true,
             AttemptFrequency = AttemptFrequency.EveryTick
         };
 
index d7a8ee5460dcd7f04bdcb7ba24d3d075b350ec5d..ea489e332dba1f3b5cd9019a4922b4cc095f3329 100644 (file)
@@ -119,7 +119,7 @@ public abstract class SharedRatKingSystem : EntitySystem
                 {
                     BlockDuplicate = true,
                     BreakOnDamage = true,
-                    BreakOnUserMove = true,
+                    BreakOnMove = true,
                     DistanceThreshold = 2f
                 });
             }
index 1fffa8c0257ab0e71791776b55223c07067252ae..070ff40b70d1585c2bbe177352fe410b8beff5f3 100644 (file)
@@ -46,8 +46,8 @@ public abstract class SharedResearchStealerSystem : EntitySystem
         var doAfterArgs = new DoAfterArgs(EntityManager, uid, comp.Delay, new ResearchStealDoAfterEvent(), target: target, used: uid, eventTarget: uid)
         {
             BreakOnDamage = true,
-            BreakOnUserMove = true,
-            MovementThreshold = 0.5f
+            BreakOnMove = true,
+            MovementThreshold = 0.5f,
         };
 
         _doAfter.TryStartDoAfter(doAfterArgs);
index 0599482bbef706398f110192327a020f6101f927..b355ae5873037905bb61b6413a8fc5261bd0ed18 100644 (file)
@@ -153,8 +153,7 @@ public abstract partial class SharedFultonSystem : EntitySystem
             {
                 CancelDuplicate = true,
                 MovementThreshold = 0.5f,
-                BreakOnUserMove = true,
-                BreakOnTargetMove = true,
+                BreakOnMove = true,
                 Broadcast = true,
                 NeedHand = true,
             });
index 514ec79f68ec3fdbfa7563440d0bfca5f491b96d..f7586cc1ec309ece3ba09a014aa3a0dca6d126b8 100644 (file)
@@ -61,7 +61,7 @@ public abstract partial class SharedSericultureSystem : EntitySystem
 
         var doAfter = new DoAfterArgs(EntityManager, uid, comp.ProductionLength, new SericultureDoAfterEvent(), uid)
         { // I'm not sure if more things should be put here, but imo ideally it should probably be set in the component/YAML. Not sure if this is currently possible.
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BlockDuplicate = true,
             BreakOnDamage = true,
             CancelDuplicate = true,
index dc2ce3fb90048571c53b07700ee47eaa8c230d3e..d2ceecf28e8b4e8140cdf82e462ce0b12c0abdeb 100644 (file)
@@ -69,7 +69,7 @@ public sealed partial class ReformSystem : EntitySystem
         // Create a doafter & start it
         var doAfter = new DoAfterArgs(EntityManager, uid, comp.ReformTime, new ReformDoAfterEvent(), uid)
         {
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BlockDuplicate = true,
             BreakOnDamage = true,
             CancelDuplicate = true,
@@ -89,7 +89,7 @@ public sealed partial class ReformSystem : EntitySystem
             return;
 
         // Spawn a new entity
-        // This is, to an extent, taken from polymorph. I don't use polymorph for various reasons- most notably that this is permanent. 
+        // This is, to an extent, taken from polymorph. I don't use polymorph for various reasons- most notably that this is permanent.
         var child = Spawn(comp.ReformPrototype, Transform(uid).Coordinates);
 
         // This transfers the mind to the new entity
@@ -105,7 +105,7 @@ public sealed partial class ReformSystem : EntitySystem
         _actionsSystem.RemoveAction(uid, comp.ActionEntity); // Zombies can't reform
     }
 
-    public sealed partial class ReformEvent : InstantActionEvent { } 
+    public sealed partial class ReformEvent : InstantActionEvent { }
     
     [Serializable, NetSerializable]
     public sealed partial class ReformDoAfterEvent : SimpleDoAfterEvent { }
index fa04a50f8b096876c50f2b1b0668a393d200931e..feb1cebb8e11c8127f7b2cd7da9b79111019ac91 100644 (file)
@@ -134,8 +134,7 @@ public abstract class SharedSprayPainterSystem : EntitySystem
 
         var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, painter.AirlockSprayTime, new SprayPainterDoorDoAfterEvent(sprite, style.Department), args.Used, target: ent, used: args.Used)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             NeedHand = true
         };
index 04f7231416f39601d39e71e528ee6ce7541b06cb..2b804cf73249247a1a0b5be66d94fce9f9cc2735 100644 (file)
@@ -133,8 +133,7 @@ public sealed class DumpableSystem : EntitySystem
 
         _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, userUid, delay, new DumpableDoAfterEvent(), storageUid, target: targetUid, used: storageUid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             NeedHand = true
         });
     }
index 98eac962e9af53047271bda6d07789cdd48a7277..ef1b2b7c4417ec6d1349e63f802fa83675c692ce 100644 (file)
@@ -289,7 +289,7 @@ public abstract class SharedStorageSystem : EntitySystem
                 var doAfterArgs = new DoAfterArgs(EntityManager, args.User, delay, new AreaPickupDoAfterEvent(GetNetEntityList(validStorables)), uid, target: uid)
                 {
                     BreakOnDamage = true,
-                    BreakOnUserMove = true,
+                    BreakOnMove = true,
                     NeedHand = true
                 };
 
index ee15b1e025a70a5bd66c0500d7bf3ca027f084b5..4204d7547e0bad2db2cc5d740c2f01b5c74072aa 100644 (file)
@@ -124,8 +124,8 @@ public abstract partial class SharedToolSystem : EntitySystem
         var doAfterArgs = new DoAfterArgs(EntityManager, user, delay / toolComponent.SpeedModifier, toolEvent, tool, target: target, used: tool)
         {
             BreakOnDamage = true,
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
+            BreakOnWeightlessMove = false,
             NeedHand = tool != user,
             AttemptFrequency = IsWelder(tool) ? AttemptFrequency.EveryTick : AttemptFrequency.Never
         };
index 87e2f0890a2e64c569cba6aae30399c808ce4601..6aef4d0949adb759d03a2006bdfa7cf9b34e44b6 100644 (file)
@@ -70,8 +70,7 @@ public abstract partial class SharedVendingMachineSystem
         var doAfterArgs = new DoAfterArgs(EntityManager, args.User, (float) component.RestockDelay.TotalSeconds, new RestockDoAfterEvent(), target,
             target: target, used: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = true,
             NeedHand = true
         };
index a8f7ee23956c41f36ac9830b6b90db4e4eb8f909..261243fea3507984da9d91f9874ec8f3f4b1fdf7 100644 (file)
@@ -74,8 +74,7 @@ public abstract partial class SharedGunSystem
 
         _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.FillDelay, new AmmoFillDoAfterEvent(), used: uid, target: args.Target, eventTarget: uid)
         {
-            BreakOnTargetMove = true,
-            BreakOnUserMove = true,
+            BreakOnMove = true,
             BreakOnDamage = false,
             NeedHand = true
         });