]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
RNG timers for IEDs + small tweaks (#22099)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Sun, 3 Dec 2023 02:21:51 +0000 (21:21 -0500)
committerGitHub <noreply@github.com>
Sun, 3 Dec 2023 02:21:51 +0000 (13:21 +1100)
Content.Server/Explosion/Components/RandomTimerTriggerComponent.cs [new file with mode: 0644]
Content.Server/Explosion/EntitySystems/TriggerSystem.OnUse.cs
Content.Server/Explosion/EntitySystems/TriggerSystem.cs
Resources/Prototypes/Entities/Objects/Weapons/Bombs/ied.yml
Resources/Textures/Objects/Weapons/Bombs/ied.rsi/base.png
Resources/Textures/Objects/Weapons/Bombs/ied.rsi/meta.json
Resources/Textures/Objects/Weapons/Bombs/ied.rsi/primed.png [new file with mode: 0644]

diff --git a/Content.Server/Explosion/Components/RandomTimerTriggerComponent.cs b/Content.Server/Explosion/Components/RandomTimerTriggerComponent.cs
new file mode 100644 (file)
index 0000000..3863b9c
--- /dev/null
@@ -0,0 +1,22 @@
+using Content.Server.Explosion.EntitySystems;
+
+namespace Content.Server.Explosion.Components;
+
+/// <summary>
+/// This is used for randomizing a <see cref="RandomTimerTriggerComponent"/> on MapInit
+/// </summary>
+[RegisterComponent, Access(typeof(TriggerSystem))]
+public sealed partial class RandomTimerTriggerComponent : Component
+{
+    /// <summary>
+    /// The minimum random trigger time.
+    /// </summary>
+    [DataField]
+    public float Min;
+
+    /// <summary>
+    /// The maximum random trigger time.
+    /// </summary>
+    [DataField]
+    public float Max;
+}
index fb1f72eb445be10feeb8b4509ea710531652a675..c4b0d9c9ba1b87f42df45f02a30e74fb3ae236aa 100644 (file)
@@ -4,7 +4,6 @@ using Content.Shared.Examine;
 using Content.Shared.Interaction.Events;
 using Content.Shared.Popups;
 using Content.Shared.Verbs;
-using Robust.Shared.Player;
 
 namespace Content.Server.Explosion.EntitySystems;
 
@@ -18,6 +17,7 @@ public sealed partial class TriggerSystem
         SubscribeLocalEvent<OnUseTimerTriggerComponent, ExaminedEvent>(OnExamined);
         SubscribeLocalEvent<OnUseTimerTriggerComponent, GetVerbsEvent<AlternativeVerb>>(OnGetAltVerbs);
         SubscribeLocalEvent<OnUseTimerTriggerComponent, EntityStuckEvent>(OnStuck);
+        SubscribeLocalEvent<RandomTimerTriggerComponent, MapInitEvent>(OnRandomTimerTriggerMapInit);
     }
 
     private void OnStuck(EntityUid uid, OnUseTimerTriggerComponent component, EntityStuckEvent args)
@@ -114,6 +114,16 @@ public sealed partial class TriggerSystem
         }
     }
 
+    private void OnRandomTimerTriggerMapInit(Entity<RandomTimerTriggerComponent> ent, ref MapInitEvent args)
+    {
+        var (_, comp) = ent;
+
+        if (!TryComp<OnUseTimerTriggerComponent>(ent, out var timerTriggerComp))
+            return;
+
+        timerTriggerComp.Delay = _random.NextFloat(comp.Min, comp.Max);
+    }
+
     private void CycleDelay(OnUseTimerTriggerComponent component, EntityUid user)
     {
         if (component.DelayOptions == null || component.DelayOptions.Count == 1)
index 854fa7f661e099fef8aec581bdc4b52c59951903..323dae493aa748e429a5db7cf2da4f7c47f7da10 100644 (file)
@@ -25,6 +25,7 @@ using Content.Shared.Mobs;
 using Content.Shared.Mobs.Components;
 using Content.Shared.Weapons.Ranged.Events;
 using Robust.Shared.Audio.Systems;
+using Robust.Shared.Random;
 
 namespace Content.Server.Explosion.EntitySystems
 {
@@ -62,6 +63,7 @@ namespace Content.Server.Explosion.EntitySystems
         [Dependency] private readonly SharedAudioSystem _audio = default!;
         [Dependency] private readonly SharedTransformSystem _transformSystem = default!;
         [Dependency] private readonly RadioSystem _radioSystem = default!;
+        [Dependency] private readonly IRobustRandom _random = default!;
         [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
 
         public override void Initialize()
index 9e66a06971276eb1409ffb3d3067c6783f9fdf51..14906c7c2d5c5e8368e319f916114eab20f50548 100644 (file)
@@ -11,6 +11,7 @@
     sprite: Objects/Weapons/Bombs/ied.rsi
     layers:
     - state: base
+      map: ["enum.TriggerVisualLayers.Base"]
     - state: fuel
     - state: wires
   - type: Item
     delay: 5
     examinable: false
     initialBeepDelay: 0
-    beepSound: /Audio/Effects/lightburn.ogg
-  # TODO: random timer when crafted
+    beepSound:
+      path: /Audio/Weapons/Guns/MagOut/pistol_magout.ogg
+      volume: 1
+  - type: RandomTimerTrigger
+    min: 0
+    max: 60
   - type: Explosive # Weak explosion in a very small radius. Doesn't break underplating.
     explosionType: Default
     totalIntensity: 20
     maxIntensity: 3
     canCreateVacuum: false
   - type: ExplodeOnTrigger
+  - type: Appearance
+  - type: AnimationPlayer
+  - type: TimerTriggerVisuals
+    unprimedSprite: base
   - type: Damageable
     damageContainer: Inorganic
   - type: Destructible
index dda9a11195bce3c9ddcf372ec5e9e012d25759cd..300ee5552aeff5bec0c994201f10adc9cdc8ce11 100644 (file)
Binary files a/Resources/Textures/Objects/Weapons/Bombs/ied.rsi/base.png and b/Resources/Textures/Objects/Weapons/Bombs/ied.rsi/base.png differ
index 6ec234fecd499b96fe904788f7dd8656654e0df9..bf1554bef9041e91e409886cbf17b6dd231dceb2 100644 (file)
     },
     {
       "name": "wires"
+    },
+    {
+      "name": "primed",
+      "delays": [
+        [
+          0.5,
+          0.5
+        ]
+      ]
     }
   ]
 }
diff --git a/Resources/Textures/Objects/Weapons/Bombs/ied.rsi/primed.png b/Resources/Textures/Objects/Weapons/Bombs/ied.rsi/primed.png
new file mode 100644 (file)
index 0000000..4882677
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Bombs/ied.rsi/primed.png differ