Fix BodySystem and Gibbing (#20460)

* Fix gibbing & body system

Makes it so that bodies no longer have two sets of torso organs and that gibbed bodies get spread around on the floor again.

* Actually fix the double torso problem

* rootSlot in cameFrom

* Remove SetCoordinates inside GibBody()

* Don't use entity.RandomOffset() in GibBody()

* Gibbing now uses _random.NextVector2()
This commit is contained in:
Psychpsyo
2023-09-25 08:53:04 +02:00
committed by GitHub
parent 91a157d7ed
commit 34aea7d9ed
4 changed files with 15 additions and 27 deletions

View File

@@ -1,12 +1,8 @@
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.Humanoid; using Content.Server.Humanoid;
using Content.Server.Kitchen.Components; using Content.Server.Kitchen.Components;
using Content.Server.Mind;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Organ;
using Content.Shared.Body.Part; using Content.Shared.Body.Part;
using Content.Shared.Body.Systems; using Content.Shared.Body.Systems;
using Content.Shared.Humanoid; using Content.Shared.Humanoid;
@@ -14,13 +10,11 @@ using Content.Shared.Kitchen.Components;
using Content.Shared.Mind; using Content.Shared.Mind;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Movement.Events; using Content.Shared.Movement.Events;
using Content.Shared.Random.Helpers;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Containers;
using Robust.Shared.Map;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Random;
using Robust.Shared.Timing; using Robust.Shared.Timing;
using Robust.Shared.Utility; using System.Numerics;
namespace Content.Server.Body.Systems; namespace Content.Server.Body.Systems;
@@ -33,6 +27,7 @@ public sealed class BodySystem : SharedBodySystem
[Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedMindSystem _mindSystem = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -136,11 +131,7 @@ public sealed class BodySystem : SharedBodySystem
_audio.Play(body.GibSound, filter, coordinates, true, audio); _audio.Play(body.GibSound, filter, coordinates, true, audio);
var containers = GetBodyContainers(bodyId, body: body).ToList(); foreach (var entity in gibs)
foreach (var container in containers)
{
foreach (var entity in container.ContainedEntities)
{ {
if (deleteItems) if (deleteItems)
{ {
@@ -148,10 +139,7 @@ public sealed class BodySystem : SharedBodySystem
} }
else else
{ {
container.Remove(entity, EntityManager, force: true); SharedTransform.SetCoordinates(entity, coordinates.Offset(_random.NextVector2(.3f)));
SharedTransform.SetCoordinates(entity,coordinates);
entity.RandomOffset(0.25f);
}
} }
} }
RaiseLocalEvent(bodyId, new BeingGibbedEvent(gibs)); RaiseLocalEvent(bodyId, new BeingGibbedEvent(gibs));

View File

@@ -1,5 +1,4 @@
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Shared.Body.Prototypes; namespace Content.Shared.Body.Prototypes;

View File

@@ -1,4 +1,4 @@
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using Content.Shared.Body.Components; using Content.Shared.Body.Components;
using Content.Shared.Body.Organ; using Content.Shared.Body.Organ;
@@ -156,6 +156,7 @@ public partial class SharedBodySystem
// Child -> Parent connection. // Child -> Parent connection.
var cameFrom = new Dictionary<string, string>(); var cameFrom = new Dictionary<string, string>();
cameFrom[rootSlot] = rootSlot;
// Maps slot to its relevant entity. // Maps slot to its relevant entity.
var cameFromEntities = new Dictionary<string, EntityUid>(); var cameFromEntities = new Dictionary<string, EntityUid>();
cameFromEntities[rootSlot] = rootPartId; cameFromEntities[rootSlot] = rootPartId;

View File

@@ -1,4 +1,4 @@
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
using Content.Shared.Standing; using Content.Shared.Standing;
using Robust.Shared.Containers; using Robust.Shared.Containers;
@@ -50,7 +50,7 @@ public abstract partial class SharedBodySystem : EntitySystem
// This is blursed // This is blursed
var slotIndex = containerSlotId.IndexOf(PartSlotContainerIdPrefix, StringComparison.Ordinal); var slotIndex = containerSlotId.IndexOf(PartSlotContainerIdPrefix, StringComparison.Ordinal);
if (slotIndex < -1) if (slotIndex < 0)
return null; return null;
var slotId = containerSlotId.Remove(slotIndex, PartSlotContainerIdPrefix.Length); var slotId = containerSlotId.Remove(slotIndex, PartSlotContainerIdPrefix.Length);