ECS and cleanup body system, merge body templates and presets into body prototypes (#11991)
Co-authored-by: Jezithyr <Jezithyr@gmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Administration;
|
||||
using Robust.Shared.Console;
|
||||
|
||||
@@ -19,35 +19,28 @@ namespace Content.Server.Administration.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
if (!EntityUid.TryParse(args[0], out var entityUid))
|
||||
if (!EntityUid.TryParse(args[0], out var childId))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!EntityUid.TryParse(args[1], out var storageUid))
|
||||
if (!EntityUid.TryParse(args[1], out var parentId))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
|
||||
return;
|
||||
}
|
||||
|
||||
var entityManager = IoCManager.Resolve<IEntityManager>();
|
||||
var bodySystem = entityManager.System<BodySystem>();
|
||||
|
||||
if (entityManager.TryGetComponent<BodyComponent>(storageUid, out var storage)
|
||||
&& entityManager.TryGetComponent<BodyPartComponent>(entityUid, out var bodyPart))
|
||||
if (bodySystem.TryCreatePartSlotAndAttach(parentId, args[3], childId))
|
||||
{
|
||||
if (storage.TryAddPart(args[3], bodyPart))
|
||||
{
|
||||
shell.WriteLine($@"Added {entityUid} to {storageUid}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell.WriteError($@"Could not add {entityUid} to {storageUid}.");
|
||||
}
|
||||
shell.WriteLine($@"Added {childId} to {parentId}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell.WriteError("Could not insert.");
|
||||
shell.WriteError($@"Could not add {childId} to {parentId}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Body.Components;
|
||||
using Robust.Shared.Console;
|
||||
|
||||
namespace Content.Server.Administration.Commands
|
||||
@@ -20,35 +19,28 @@ namespace Content.Server.Administration.Commands
|
||||
return;
|
||||
}
|
||||
|
||||
if (!EntityUid.TryParse(args[0], out var entityUid))
|
||||
if (!EntityUid.TryParse(args[0], out var organId))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!EntityUid.TryParse(args[1], out var storageUid))
|
||||
if (!EntityUid.TryParse(args[1], out var partId))
|
||||
{
|
||||
shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number"));
|
||||
return;
|
||||
}
|
||||
|
||||
var entityManager = IoCManager.Resolve<IEntityManager>();
|
||||
var bodySystem = entityManager.System<BodySystem>();
|
||||
|
||||
if (entityManager.TryGetComponent<BodyPartComponent>(storageUid, out var storage)
|
||||
&& entityManager.TryGetComponent<MechanismComponent>(entityUid, out var bodyPart))
|
||||
if (bodySystem.AddOrganToFirstValidSlot(organId, partId))
|
||||
{
|
||||
if (storage.TryAddMechanism(bodyPart))
|
||||
{
|
||||
shell.WriteLine($@"Added {entityUid} to {storageUid}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell.WriteError($@"Could not add {entityUid} to {storageUid}.");
|
||||
}
|
||||
shell.WriteLine($@"Added {organId} to {partId}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell.WriteError("Could not insert.");
|
||||
shell.WriteError($@"Could not add {organId} to {partId}.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Administration;
|
||||
using Robust.Shared.Console;
|
||||
|
||||
@@ -26,16 +26,11 @@ namespace Content.Server.Administration.Commands
|
||||
}
|
||||
|
||||
var entityManager = IoCManager.Resolve<IEntityManager>();
|
||||
var bodySystem = entityManager.System<BodySystem>();
|
||||
|
||||
if (!entityManager.TryGetComponent<TransformComponent>(entityUid, out var transform)) return;
|
||||
|
||||
var parent = transform.ParentUid;
|
||||
|
||||
if (entityManager.TryGetComponent<BodyComponent>(parent, out var body) &&
|
||||
entityManager.TryGetComponent<BodyPartComponent>(entityUid, out var part))
|
||||
if (bodySystem.DropPart(entityUid))
|
||||
{
|
||||
body.RemovePart(part);
|
||||
|
||||
shell.WriteLine($"Removed body part {entityManager.ToPrettyString(entityUid)}.");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Shared.Administration;
|
||||
using Content.Shared.Body.Components;
|
||||
using Robust.Shared.Console;
|
||||
|
||||
namespace Content.Server.Administration.Commands
|
||||
@@ -27,15 +26,11 @@ namespace Content.Server.Administration.Commands
|
||||
}
|
||||
|
||||
var entityManager = IoCManager.Resolve<IEntityManager>();
|
||||
var bodySystem = entityManager.System<BodySystem>();
|
||||
|
||||
if (!entityManager.TryGetComponent<TransformComponent>(entityUid, out var transform)) return;
|
||||
|
||||
var parent = transform.ParentUid;
|
||||
|
||||
if (entityManager.TryGetComponent<BodyPartComponent>(parent, out var body) &&
|
||||
entityManager.TryGetComponent<MechanismComponent>(entityUid, out var part))
|
||||
if (bodySystem.DropOrgan(entityUid))
|
||||
{
|
||||
body.RemoveMechanism(part);
|
||||
shell.WriteLine($"Removed organ {entityManager.ToPrettyString(entityUid)}");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -103,10 +103,7 @@ public sealed partial class AdminVerbSystem
|
||||
4, 1, 2, maxTileBreak: 0), // it gibs, damage doesn't need to be high.
|
||||
CancellationToken.None);
|
||||
|
||||
if (TryComp(args.Target, out SharedBodyComponent? body))
|
||||
{
|
||||
body.Gib();
|
||||
}
|
||||
_bodySystem.GibBody(args.Target);
|
||||
},
|
||||
Impact = LogImpact.Extreme,
|
||||
Message = Loc.GetString("admin-smite-explode-description")
|
||||
@@ -308,15 +305,15 @@ public sealed partial class AdminVerbSystem
|
||||
Act = () =>
|
||||
{
|
||||
_vomitSystem.Vomit(args.Target, -1000, -1000); // You feel hollow!
|
||||
var organs = _bodySystem.GetComponentsOnMechanisms<TransformComponent>(args.Target, body);
|
||||
var organs = _bodySystem.GetBodyOrganComponents<TransformComponent>(args.Target, body);
|
||||
var baseXform = Transform(args.Target);
|
||||
foreach (var (xform, mechanism) in organs)
|
||||
foreach (var (xform, organ) in organs)
|
||||
{
|
||||
if (HasComp<BrainComponent>(xform.Owner) || HasComp<EyeComponent>(xform.Owner))
|
||||
continue;
|
||||
|
||||
mechanism.Part?.RemoveMechanism(mechanism);
|
||||
xform.Coordinates = baseXform.Coordinates.Offset(_random.NextVector2(0.5f,0.75f));
|
||||
var coordinates = baseXform.Coordinates.Offset(_random.NextVector2(0.5f, 0.75f));
|
||||
_bodySystem.DropOrganAt(organ.Owner, coordinates, organ);
|
||||
}
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("admin-smite-vomit-organs-self"), args.Target,
|
||||
@@ -337,10 +334,9 @@ public sealed partial class AdminVerbSystem
|
||||
Act = () =>
|
||||
{
|
||||
var baseXform = Transform(args.Target);
|
||||
foreach (var part in body.GetPartsOfType(BodyPartType.Hand))
|
||||
foreach (var part in _bodySystem.GetBodyChildrenOfType(args.Target, BodyPartType.Hand))
|
||||
{
|
||||
body.RemovePart(part);
|
||||
Transform(part.Owner).Coordinates = baseXform.Coordinates;
|
||||
_bodySystem.DropPartAt(part.Id, baseXform.Coordinates, part.Component);
|
||||
}
|
||||
_popupSystem.PopupEntity(Loc.GetString("admin-smite-remove-hands-self"), args.Target,
|
||||
Filter.Entities(args.Target), PopupType.LargeCaution);
|
||||
@@ -360,10 +356,9 @@ public sealed partial class AdminVerbSystem
|
||||
Act = () =>
|
||||
{
|
||||
var baseXform = Transform(args.Target);
|
||||
foreach (var part in body.GetPartsOfType(BodyPartType.Hand))
|
||||
foreach (var part in _bodySystem.GetBodyChildrenOfType(body.Owner, BodyPartType.Hand, body))
|
||||
{
|
||||
body.RemovePart(part);
|
||||
Transform(part.Owner).Coordinates = baseXform.Coordinates;
|
||||
_bodySystem.DropPartAt(part.Id, baseXform.Coordinates, part.Component);
|
||||
break;
|
||||
}
|
||||
_popupSystem.PopupEntity(Loc.GetString("admin-smite-remove-hands-self"), args.Target,
|
||||
@@ -383,13 +378,9 @@ public sealed partial class AdminVerbSystem
|
||||
IconTexture = "/Textures/Mobs/Species/Human/organs.rsi/stomach.png",
|
||||
Act = () =>
|
||||
{
|
||||
foreach (var part in body.Parts)
|
||||
foreach (var (component, _) in _bodySystem.GetBodyOrganComponents<StomachComponent>(args.Target, body))
|
||||
{
|
||||
foreach (var mechanism in part.Key.Mechanisms)
|
||||
{
|
||||
if (HasComp<StomachComponent>(mechanism.Owner))
|
||||
QueueDel(mechanism.Owner);
|
||||
}
|
||||
QueueDel(component.Owner);
|
||||
}
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("admin-smite-stomach-removal-self"), args.Target,
|
||||
@@ -407,13 +398,9 @@ public sealed partial class AdminVerbSystem
|
||||
IconTexture = "/Textures/Mobs/Species/Human/organs.rsi/lung-r.png",
|
||||
Act = () =>
|
||||
{
|
||||
foreach (var part in body.Parts)
|
||||
foreach (var (component, _) in _bodySystem.GetBodyOrganComponents<LungComponent>(args.Target, body))
|
||||
{
|
||||
foreach (var mechanism in part.Key.Mechanisms)
|
||||
{
|
||||
if (HasComp<LungComponent>(mechanism.Owner))
|
||||
QueueDel(mechanism.Owner);
|
||||
}
|
||||
QueueDel(component.Owner);
|
||||
}
|
||||
|
||||
_popupSystem.PopupEntity(Loc.GetString("admin-smite-lung-removal-self"), args.Target,
|
||||
|
||||
Reference in New Issue
Block a user