From bfbb1a689f99583706acbd256c1c6fb250c51c42 Mon Sep 17 00:00:00 2001
From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Date: Tue, 14 Feb 2023 02:32:09 +1100
Subject: [PATCH] 1 do_after for ore veins (#14083)
* 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 | 8 +++++++
.../Components/GatheringToolComponent.cs | 7 -------
Content.Server/Gatherable/GatherableSystem.cs | 21 ++++++++++++-------
Content.Server/Mining/MiningSystem.cs | 2 +-
.../Entities/Objects/Materials/ore.yml | 10 +++++++++
5 files changed, 33 insertions(+), 15 deletions(-)
create mode 100644 Content.Client/Damage/DestructibleSystem.cs
diff --git a/Content.Client/Damage/DestructibleSystem.cs b/Content.Client/Damage/DestructibleSystem.cs
new file mode 100644
index 0000000000..4a79bbfb55
--- /dev/null
+++ b/Content.Client/Damage/DestructibleSystem.cs
@@ -0,0 +1,8 @@
+using Content.Shared.Destructible;
+
+namespace Content.Client.Damage;
+
+public sealed class DestructibleSystem : SharedDestructibleSystem
+{
+
+}
diff --git a/Content.Server/Gatherable/Components/GatheringToolComponent.cs b/Content.Server/Gatherable/Components/GatheringToolComponent.cs
index 560c46eedc..c4e506e538 100644
--- a/Content.Server/Gatherable/Components/GatheringToolComponent.cs
+++ b/Content.Server/Gatherable/Components/GatheringToolComponent.cs
@@ -17,13 +17,6 @@ namespace Content.Server.Gatherable.Components
[DataField("sound")]
public SoundSpecifier GatheringSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Mining/pickaxe.ogg");
- ///
- /// This directly plugs into the time delay for gathering.
- ///
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("gatheringTime")]
- public float GatheringTime { get; set; } = 1f;
-
///
/// What damage should be given to objects when
/// gathered using this tool? (0 for infinite gathering)
diff --git a/Content.Server/Gatherable/GatherableSystem.cs b/Content.Server/Gatherable/GatherableSystem.cs
index ee518fba46..f574bd5dd9 100644
--- a/Content.Server/Gatherable/GatherableSystem.cs
+++ b/Content.Server/Gatherable/GatherableSystem.cs
@@ -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 IRobustRandom _random = default!;
- [Dependency] private readonly TagSystem _tagSystem = 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!;
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);
diff --git a/Content.Server/Mining/MiningSystem.cs b/Content.Server/Mining/MiningSystem.cs
index 5cc953ee94..edf23a50e8 100644
--- a/Content.Server/Mining/MiningSystem.cs
+++ b/Content.Server/Mining/MiningSystem.cs
@@ -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)));
}
}
diff --git a/Resources/Prototypes/Entities/Objects/Materials/ore.yml b/Resources/Prototypes/Entities/Objects/Materials/ore.yml
index fd97dbec80..dc5ecf4cfc 100644
--- a/Resources/Prototypes/Entities/Objects/Materials/ore.yml
+++ b/Resources/Prototypes/Entities/Objects/Materials/ore.yml
@@ -13,6 +13,16 @@
- 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