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:
@@ -1,12 +1,8 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.GameTicking;
|
||||
using Content.Server.Humanoid;
|
||||
using Content.Server.Kitchen.Components;
|
||||
using Content.Server.Mind;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Organ;
|
||||
using Content.Shared.Body.Part;
|
||||
using Content.Shared.Body.Systems;
|
||||
using Content.Shared.Humanoid;
|
||||
@@ -14,13 +10,11 @@ using Content.Shared.Kitchen.Components;
|
||||
using Content.Shared.Mind;
|
||||
using Content.Shared.Mobs.Systems;
|
||||
using Content.Shared.Movement.Events;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
using Robust.Shared.Utility;
|
||||
using System.Numerics;
|
||||
|
||||
namespace Content.Server.Body.Systems;
|
||||
|
||||
@@ -33,6 +27,7 @@ public sealed class BodySystem : SharedBodySystem
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedMindSystem _mindSystem = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -136,11 +131,7 @@ public sealed class BodySystem : SharedBodySystem
|
||||
|
||||
_audio.Play(body.GibSound, filter, coordinates, true, audio);
|
||||
|
||||
var containers = GetBodyContainers(bodyId, body: body).ToList();
|
||||
|
||||
foreach (var container in containers)
|
||||
{
|
||||
foreach (var entity in container.ContainedEntities)
|
||||
foreach (var entity in gibs)
|
||||
{
|
||||
if (deleteItems)
|
||||
{
|
||||
@@ -148,10 +139,7 @@ public sealed class BodySystem : SharedBodySystem
|
||||
}
|
||||
else
|
||||
{
|
||||
container.Remove(entity, EntityManager, force: true);
|
||||
SharedTransform.SetCoordinates(entity,coordinates);
|
||||
entity.RandomOffset(0.25f);
|
||||
}
|
||||
SharedTransform.SetCoordinates(entity, coordinates.Offset(_random.NextVector2(.3f)));
|
||||
}
|
||||
}
|
||||
RaiseLocalEvent(bodyId, new BeingGibbedEvent(gibs));
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Body.Prototypes;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Organ;
|
||||
@@ -156,6 +156,7 @@ public partial class SharedBodySystem
|
||||
|
||||
// Child -> Parent connection.
|
||||
var cameFrom = new Dictionary<string, string>();
|
||||
cameFrom[rootSlot] = rootSlot;
|
||||
// Maps slot to its relevant entity.
|
||||
var cameFromEntities = new Dictionary<string, EntityUid>();
|
||||
cameFromEntities[rootSlot] = rootPartId;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Damage;
|
||||
using Content.Shared.Movement.Systems;
|
||||
using Content.Shared.Standing;
|
||||
using Robust.Shared.Containers;
|
||||
@@ -50,7 +50,7 @@ public abstract partial class SharedBodySystem : EntitySystem
|
||||
// This is blursed
|
||||
var slotIndex = containerSlotId.IndexOf(PartSlotContainerIdPrefix, StringComparison.Ordinal);
|
||||
|
||||
if (slotIndex < -1)
|
||||
if (slotIndex < 0)
|
||||
return null;
|
||||
|
||||
var slotId = containerSlotId.Remove(slotIndex, PartSlotContainerIdPrefix.Length);
|
||||
|
||||
Reference in New Issue
Block a user