Files
tbd-station-14/Content.Server/Security/GenpopSystem.cs
K-Dynamic eb208a2ae8 Genpop wall lockers (#38102)
* sprites

* genpop wall lockers

* number 5 alive

* slight boilerplate code, thank you slarti
2025-06-07 17:51:38 +02:00

41 lines
1.7 KiB
C#

using Content.Shared.Security.Components;
using Content.Shared.Security.Systems;
using Content.Shared.Wall;
namespace Content.Server.Security;
public sealed class GenpopSystem : SharedGenpopSystem
{
private const float GenpopIDEjectDistanceFromWall = 1f;
protected override void CreateId(Entity<GenpopLockerComponent> ent, string name, float sentence, string crime)
{
// Default to prisoner locker coordinates for ID spawn
var xform = Transform(ent);
var spawnCoordinates = xform.Coordinates;
// Offset prisoner wall locker coordinates in wallmount direction for ID spawn; avoids spawning ID inside wall
if (TryComp<WallMountComponent>(ent, out var wallMountComponent))
{
var offset = (wallMountComponent.Direction + xform.LocalRotation - Math.PI / 2).ToVec() * GenpopIDEjectDistanceFromWall;
spawnCoordinates = spawnCoordinates.Offset(offset);
}
var uid = Spawn(ent.Comp.IdCardProto, spawnCoordinates);
ent.Comp.LinkedId = uid;
IdCard.TryChangeFullName(uid, name);
if (TryComp<GenpopIdCardComponent>(uid, out var id))
{
id.Crime = crime;
id.SentenceDuration = TimeSpan.FromMinutes(sentence);
Dirty(uid, id);
}
if (sentence <= 0)
IdCard.SetPermanent(uid, true);
IdCard.SetExpireTime(uid, TimeSpan.FromMinutes(sentence) + Timing.CurTime);
var metaData = MetaData(ent);
MetaDataSystem.SetEntityName(ent, Loc.GetString("genpop-locker-name-used", ("name", name)), metaData);
MetaDataSystem.SetEntityDescription(ent, Loc.GetString("genpop-locker-desc-used", ("name", name)), metaData);
Dirty(ent);
}
}