* 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()
76 lines
2.3 KiB
C#
76 lines
2.3 KiB
C#
using Content.Shared.Damage;
|
|
using Content.Shared.Movement.Systems;
|
|
using Content.Shared.Standing;
|
|
using Robust.Shared.Containers;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Shared.Body.Systems;
|
|
|
|
public abstract partial class SharedBodySystem : EntitySystem
|
|
{
|
|
/*
|
|
* See the body partial for how this works.
|
|
*/
|
|
|
|
/// <summary>
|
|
/// Container ID prefix for any body parts.
|
|
/// </summary>
|
|
protected const string PartSlotContainerIdPrefix = "body_part_slot_";
|
|
|
|
/// <summary>
|
|
/// Container ID for the ContainerSlot on the body entity itself.
|
|
/// </summary>
|
|
protected const string BodyRootContainerId = "body_root_part";
|
|
|
|
/// <summary>
|
|
/// Container ID prefix for any body organs.
|
|
/// </summary>
|
|
protected const string OrganSlotContainerIdPrefix = "body_organ_slot_";
|
|
|
|
[Dependency] protected readonly IPrototypeManager Prototypes = default!;
|
|
[Dependency] protected readonly DamageableSystem Damageable = default!;
|
|
[Dependency] protected readonly MovementSpeedModifierSystem Movement = default!;
|
|
[Dependency] protected readonly SharedContainerSystem Containers = default!;
|
|
[Dependency] protected readonly SharedTransformSystem SharedTransform = default!;
|
|
[Dependency] protected readonly StandingStateSystem Standing = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
InitializeBody();
|
|
InitializeParts();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Inverse of <see cref="GetPartSlotContainerId"/>
|
|
/// </summary>
|
|
protected static string? GetPartSlotContainerIdFromContainer(string containerSlotId)
|
|
{
|
|
// This is blursed
|
|
var slotIndex = containerSlotId.IndexOf(PartSlotContainerIdPrefix, StringComparison.Ordinal);
|
|
|
|
if (slotIndex < 0)
|
|
return null;
|
|
|
|
var slotId = containerSlotId.Remove(slotIndex, PartSlotContainerIdPrefix.Length);
|
|
return slotId;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the container Id for the specified slotId.
|
|
/// </summary>
|
|
public static string GetPartSlotContainerId(string slotId)
|
|
{
|
|
return PartSlotContainerIdPrefix + slotId;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the container Id for the specified slotId.
|
|
/// </summary>
|
|
public static string GetOrganContainerId(string slotId)
|
|
{
|
|
return OrganSlotContainerIdPrefix + slotId;
|
|
}
|
|
}
|