]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
1 do_after for ore veins (#14083)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Mon, 13 Feb 2023 15:32:09 +0000 (02:32 +1100)
committerGitHub <noreply@github.com>
Mon, 13 Feb 2023 15:32:09 +0000 (15:32 +0000)
* Ore veins

I dislike rocks just providing generic drops and this factors into mining more.

* fixes

* descriptions

* comment

* every flipping time

* Make mining destroy rocks with 1 hit

Having to click 3 times was pretty annoying.

* a

Content.Client/Damage/DestructibleSystem.cs [new file with mode: 0644]
Content.Server/Gatherable/Components/GatheringToolComponent.cs
Content.Server/Gatherable/GatherableSystem.cs
Content.Server/Mining/MiningSystem.cs
Resources/Prototypes/Entities/Objects/Materials/ore.yml

diff --git a/Content.Client/Damage/DestructibleSystem.cs b/Content.Client/Damage/DestructibleSystem.cs
new file mode 100644 (file)
index 0000000..4a79bbf
--- /dev/null
@@ -0,0 +1,8 @@
+using Content.Shared.Destructible;
+
+namespace Content.Client.Damage;
+
+public sealed class DestructibleSystem : SharedDestructibleSystem
+{
+
+}
index 560c46eedc83a069a62cca380cf5cf83253e1bbe..c4e506e538d199f94cce43325e790a0d1133362a 100644 (file)
@@ -17,13 +17,6 @@ namespace Content.Server.Gatherable.Components
         [DataField("sound")]
         public SoundSpecifier GatheringSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Mining/pickaxe.ogg");
 
-        /// <summary>
-        ///     This directly plugs into the time delay for gathering.
-        /// </summary>
-        [ViewVariables(VVAccess.ReadWrite)]
-        [DataField("gatheringTime")]
-        public float GatheringTime { get; set; } = 1f;
-
         /// <summary>
         ///     What damage should be given to objects when
         ///     gathered using this tool? (0 for infinite gathering)
index ee518fba46382b59f0659f809a5fd6e9290c7469..f574bd5dd99079f747d1dfc58ebd520414d5badc 100644 (file)
@@ -1,7 +1,9 @@
 using System.Threading;
+using Content.Server.Destructible;
 using Content.Server.DoAfter;
 using Content.Server.Gatherable.Components;
 using Content.Shared.Damage;
+using Content.Shared.Destructible;
 using Content.Shared.EntityList;
 using Content.Shared.Interaction;
 using Content.Shared.Tag;
@@ -12,12 +14,13 @@ namespace Content.Server.Gatherable;
 
 public sealed class GatherableSystem : EntitySystem
 {
-    [Dependency] private readonly SharedAudioSystem _audio = default!;
-    [Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
-    [Dependency] private readonly DamageableSystem _damageableSystem = default!;
+    [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
     [Dependency] private readonly IRobustRandom _random = default!;
+    [Dependency] private readonly DamageableSystem _damageableSystem = default!;
+    [Dependency] private readonly DestructibleSystem _destructible = default!;
+    [Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
+    [Dependency] private readonly SharedAudioSystem _audio = default!;
     [Dependency] private readonly TagSystem _tagSystem = default!;
-    [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
 
     public override void Initialize()
     {
@@ -39,10 +42,14 @@ public sealed class GatherableSystem : EntitySystem
         if (tool.MaxGatheringEntities < tool.GatheringEntities.Count + 1)
             return;
 
+        var damageRequired = _destructible.DestroyedAt(uid);
+        var damageTime = (damageRequired / tool.Damage.Total).Float();
+        damageTime = Math.Max(1f, damageTime);
+
         cancelToken = new CancellationTokenSource();
         tool.GatheringEntities[uid] = cancelToken;
 
-        var doAfter = new DoAfterEventArgs(args.User, tool.GatheringTime, cancelToken.Token, uid)
+        var doAfter = new DoAfterEventArgs(args.User, damageTime, cancelToken.Token, uid)
         {
             BreakOnDamage = true,
             BreakOnStun = true,
@@ -62,7 +69,7 @@ public sealed class GatherableSystem : EntitySystem
             return;
 
         // Complete the gathering process
-        _damageableSystem.TryChangeDamage(ev.Resource, tool.Damage, origin: ev.Player);
+        _destructible.DestroyEntity(uid);
         _audio.PlayPvs(tool.GatheringSound, ev.Resource);
         tool.GatheringEntities.Remove(ev.Resource);
 
index 5cc953ee945998ace4c2ba28c9ebce03f546da4e..edf23a50e8c453aff310d91bc3955b9dcb1266fd 100644 (file)
@@ -38,7 +38,7 @@ public sealed class MiningSystem : EntitySystem
         var toSpawn = _random.Next(proto.MinOreYield, proto.MaxOreYield);
         for (var i = 0; i < toSpawn; i++)
         {
-            Spawn(proto.OreEntity, coords.Offset(_random.NextVector2(0.3f)));
+            Spawn(proto.OreEntity, coords.Offset(_random.NextVector2(0.2f)));
         }
     }
 
index fd97dbec8036710a9133044ebe36aac939257e7d..dc5ecf4cfcbb5e64bfebcfa4bc2e2608ff2aee63 100644 (file)
   - type: Tag
     tags:
     - Ore
+  - type: Fixtures
+    fixtures:
+      - shape:
+          !type:PhysShapeCircle
+          radius: 0.2
+        density: 20
+        mask:
+          - ItemMask
+        restitution: 0.3
+        friction: 0.2
   - type: Damageable
     damageContainer: Inorganic
     damageModifierSet: Metallic