Make the station start with random broken wiring (#26695)

Random wire cutting on round start
This commit is contained in:
Tayrtahn
2024-04-04 02:28:09 -04:00
committed by GitHub
parent 705f029424
commit a1a12194a5
6 changed files with 125 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
using Robust.Shared.Random;
namespace Content.Server.Wires;
/// <summary>
/// Handles cutting a random wire on devices that have <see cref="CutWireOnMapInitComponent"/>.
/// </summary>
public sealed partial class CutWireOnMapInitSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _random = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CutWireOnMapInitComponent, MapInitEvent>(OnMapInit, after: [typeof(WiresSystem)]);
}
private void OnMapInit(Entity<CutWireOnMapInitComponent> entity, ref MapInitEvent args)
{
if (TryComp<WiresComponent>(entity, out var panel) && panel.WiresList.Count > 0)
{
// Pick a random wire
var targetWire = _random.Pick(panel.WiresList);
// Cut the wire
if (targetWire.Action == null || targetWire.Action.Cut(EntityUid.Invalid, targetWire))
targetWire.IsCut = true;
}
// Our work here is done
RemCompDeferred(entity, entity.Comp);
}
}