]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Replaced Wieldable DoAfter with UseDelay (#18880)
authorstopbreaking <126102320+stopbreaking@users.noreply.github.com>
Sun, 22 Oct 2023 13:53:13 +0000 (09:53 -0400)
committerGitHub <noreply@github.com>
Sun, 22 Oct 2023 13:53:13 +0000 (00:53 +1100)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
13 files changed:
Content.Shared/Wieldable/Components/WieldableComponent.cs
Content.Shared/Wieldable/WieldableSystem.cs
Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml
Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml
Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml

index 050b6382150bd51053e89cbe3b88f3ee0e0b6650..4a50b930722b3c7d8c06ab9a078611ed03be77f6 100644 (file)
@@ -30,9 +30,6 @@ public sealed partial class WieldableComponent : Component
     public string? WieldedInhandPrefix = "wielded";
 
     public string? OldInhandPrefix = null;
-
-    [DataField("wieldTime")]
-    public float WieldTime = 1.5f;
 }
 
 [Serializable, NetSerializable]
index bf5aa1b723099cf7b1bb852925b5a55a8402d9a3..ba87d54aa2ac97cba7bc2bb0e960c804970e0612 100644 (file)
@@ -13,6 +13,7 @@ using Content.Shared.Weapons.Ranged.Components;
 using Content.Shared.Weapons.Ranged.Systems;
 using Content.Shared.Wieldable.Components;
 using Robust.Shared.Player;
+using Content.Shared.Timing;
 
 namespace Content.Shared.Wieldable;
 
@@ -25,13 +26,13 @@ public sealed class WieldableSystem : EntitySystem
     [Dependency] private readonly SharedPopupSystem _popupSystem = default!;
     [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
     [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+    [Dependency] private readonly UseDelaySystem _delay = default!;
 
     public override void Initialize()
     {
         base.Initialize();
 
-        SubscribeLocalEvent<WieldableComponent, UseInHandEvent>(OnUseInHand, before: new [] { typeof(SharedGunSystem) });
-        SubscribeLocalEvent<WieldableComponent, WieldableDoAfterEvent>(OnDoAfter);
+        SubscribeLocalEvent<WieldableComponent, UseInHandEvent>(OnUseInHand);
         SubscribeLocalEvent<WieldableComponent, ItemUnwieldedEvent>(OnItemUnwielded);
         SubscribeLocalEvent<WieldableComponent, GotUnequippedHandEvent>(OnItemLeaveHand);
         SubscribeLocalEvent<WieldableComponent, VirtualItemDeletedEvent>(OnVirtualItemDeleted);
@@ -76,7 +77,7 @@ public sealed class WieldableSystem : EntitySystem
 
         gun.MinAngle -= component.MinAngle;
         gun.MaxAngle -= component.MaxAngle;
-        Dirty(gun);
+        Dirty(uid, gun);
     }
 
     private void OnGunWielded(EntityUid uid, GunWieldBonusComponent component, ref ItemWieldedEvent args)
@@ -86,7 +87,7 @@ public sealed class WieldableSystem : EntitySystem
 
         gun.MinAngle += component.MinAngle;
         gun.MaxAngle += component.MaxAngle;
-        Dirty(gun);
+        Dirty(uid, gun);
     }
 
     private void AddToggleWieldVerb(EntityUid uid, WieldableComponent component, GetVerbsEvent<InteractionVerb> args)
@@ -157,7 +158,7 @@ public sealed class WieldableSystem : EntitySystem
     }
 
     /// <summary>
-    ///     Attempts to wield an item, creating a DoAfter..
+    ///     Attempts to wield an item, starting a UseDelay after.
     /// </summary>
     /// <returns>True if the attempt wasn't blocked.</returns>
     public bool TryWield(EntityUid used, WieldableComponent component, EntityUid user)
@@ -171,13 +172,31 @@ public sealed class WieldableSystem : EntitySystem
         if (ev.Cancelled)
             return false;
 
-        var doargs = new DoAfterArgs(EntityManager, user, component.WieldTime, new WieldableDoAfterEvent(), used, used: used)
+        if (TryComp<ItemComponent>(used, out var item))
         {
-            BreakOnUserMove = false,
-            BreakOnDamage = true
-        };
+            component.OldInhandPrefix = item.HeldPrefix;
+            _itemSystem.SetHeldPrefix(used, component.WieldedInhandPrefix, item);
+        }
+
+        component.Wielded = true;
 
-        _doAfter.TryStartDoAfter(doargs);
+        if (component.WieldSound != null)
+            _audioSystem.PlayPredicted(component.WieldSound, used, user);
+
+        for (var i = 0; i < component.FreeHandsRequired; i++)
+        {
+            _virtualItemSystem.TrySpawnVirtualItemInHand(used, user);
+        }
+
+        _delay.BeginDelay(used);
+
+        _popupSystem.PopupClient(Loc.GetString("wieldable-component-successful-wield", ("item", used)), user, user);
+        _popupSystem.PopupEntity(Loc.GetString("wieldable-component-successful-wield-other", ("user", user),("item", used)), user, Filter.PvsExcept(user), true);
+
+        var targEv = new ItemWieldedEvent();
+        RaiseLocalEvent(used, ref targEv);
+
+        Dirty(used, component);
         return true;
     }
 
@@ -199,38 +218,6 @@ public sealed class WieldableSystem : EntitySystem
         return true;
     }
 
-    private void OnDoAfter(EntityUid uid, WieldableComponent component, DoAfterEvent args)
-    {
-        if (args.Handled || args.Cancelled || !CanWield(uid, component, args.Args.User) || component.Wielded)
-            return;
-
-        if (TryComp<ItemComponent>(uid, out var item))
-        {
-            component.OldInhandPrefix = item.HeldPrefix;
-            _itemSystem.SetHeldPrefix(uid, component.WieldedInhandPrefix, item);
-        }
-
-        component.Wielded = true;
-
-        if (component.WieldSound != null)
-            _audioSystem.PlayPredicted(component.WieldSound, uid, args.User);
-
-        for (var i = 0; i < component.FreeHandsRequired; i++)
-        {
-            _virtualItemSystem.TrySpawnVirtualItemInHand(uid, args.Args.User);
-        }
-
-        _popupSystem.PopupClient(Loc.GetString("wieldable-component-successful-wield", ("item", uid)), args.Args.User, args.Args.User);
-        _popupSystem.PopupEntity(Loc.GetString("wieldable-component-successful-wield-other", ("user", args.Args.User),("item", uid)), args.Args.User, Filter.PvsExcept(args.Args.User), true);
-
-        var ev = new ItemWieldedEvent();
-        RaiseLocalEvent(uid, ref ev);
-        _appearance.SetData(uid, WieldableVisuals.Wielded, true);
-
-        Dirty(component);
-        args.Handled = true;
-    }
-
     private void OnItemUnwielded(EntityUid uid, WieldableComponent component, ItemUnwieldedEvent args)
     {
         if (args.User == null)
@@ -258,7 +245,7 @@ public sealed class WieldableSystem : EntitySystem
 
         _appearance.SetData(uid, WieldableVisuals.Wielded, false);
 
-        Dirty(component);
+        Dirty(uid, component);
         _virtualItemSystem.DeleteInHandsMatching(args.User.Value, uid);
     }
 
index 7a8b9180e674fe29419f85cd4cf911311d57d775..041cf446c11090e0fd96f2e5f5ab2f3db0cc5bad 100644 (file)
@@ -45,3 +45,5 @@
     slots:
     - suitStorage
     - Belt
+  - type: UseDelay
+    delay: 1
index 95282ee63ab9df1f188007a0aa86570cfb07c922..88640f7812f5fb5b141f08f641fdcc45db9e2fcb 100644 (file)
     slots:
     - Back
   - type: Wieldable
-    wieldTime: 0.5
     wieldSound:
       path: /Audio/Items/bow_pull.ogg
+  - type: UseDelay
+    delay: 1
   - type: GunRequiresWield
   - type: Gun
     minAngle: 0
index 1d16d308e41ebee8db07f1b264ac3faa43800917..62142519bfa05f2d6607fc04558b3c62fc46c0aa 100644 (file)
@@ -58,6 +58,8 @@
       gun_chamber: !type:ContainerSlot
   - type: StaticPrice
     price: 500
+  - type: UseDelay
+    delay: 1
 
 - type: entity
   name: L6 SAW
index e244647a130840415c50995a5a8d2a5710f1f347..c1fc668d59282088b7349e8fe77253802db6b30b 100644 (file)
@@ -30,6 +30,8 @@
   - type: Construction
     graph: WoodenBat
     node: bat
+  - type: UseDelay
+    delay: 1
   - type: Tag
     tags:
     - BaseballBat
index b0874bfaef15ea2dd032bd67f5da9b0c5b5752a9..13f5191c103f2214010b255ec7980cff1d759283 100644 (file)
@@ -5,7 +5,6 @@
   description: A very large chainsaw. Usually you use this for cutting down trees... usually.
   components:
   - type: Wieldable
-    wieldTime: 1
     wieldSound: !type:SoundPathSpecifier
       path: /Audio/Weapons/chainsawwield.ogg
       params:
@@ -44,3 +43,5 @@
         - ReagentId: WeldingFuel
           Quantity: 300
         maxVol: 300
+  - type: UseDelay
+    delay: 1
index 833614105d93dd077ecaf22c0a23d646b43969e8..661ee379b240d5468c367e2683b5485fdd4e2b13 100644 (file)
@@ -81,3 +81,5 @@
     quickEquip: false
     slots:
     - back
+  - type: UseDelay
+    delay: 1
index 7cf02ad05cbb18d6ebbad9b968499bdc101381d6..0dd5d7c47c2543949d83b53f3967c9a7f18aded7 100644 (file)
   description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. This can be stored in pockets.
   components:
   - type: Wieldable
-    wieldTime: 0
   - type: EnergySword
     litDamageBonus:
         types:
     enabled: true
     reflectProb: .75
     spread: 75
+  - type: UseDelay
+    delay: 1
index 62a983cd4dad1e03118ca9b88c1bc6d55e8ad2d1..6d27e3e7d64b63521dc7600d2141f5b0548b3c47 100644 (file)
@@ -41,6 +41,8 @@
   - type: TilePrying
     advanced: true
   - type: Prying
+  - type: UseDelay
+    delay: 1
 
 - type: entity
   id: FireAxeFlaming
index 8d04fd316b47f03fe0545bf94795fb4a8a67a94e..a0f497bd2652e420a1f3d54178b4bb529206765e 100644 (file)
@@ -28,6 +28,8 @@
   - type: Item
     size: 80
     sprite: Objects/Weapons/Melee/pickaxe.rsi
+  - type: UseDelay
+    delay: 1
 
 - type: entity
   name: mining drill
index f19b76b3e81a14dbd55dfdc0b72d4e5865ce6810..d34d29d5ebe2d5dbd9ae9c7be211a1c5d922a04f 100644 (file)
     damage:
       types:
         Blunt: 5
+  - type: UseDelay
+    delay: 1
   - type: Appearance
   - type: SolutionContainerVisuals
     maxFillLevels: 1
index 36ea58c11167d176c6675cab535d39c317001729..c76ebf4d7833b5d6e71ba5207e304184711934be 100644 (file)
@@ -22,3 +22,6 @@
     damage:
       types:
         Blunt: 3
+  - type: UseDelay
+    delay: 1
+