| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using Content.Server.Construction.Components;
- using Content.Shared.Construction.Components;
- using Robust.Shared.Containers;
- namespace Content.Server.Construction;
- public sealed partial class ConstructionSystem
- {
- private void InitializeMachines()
- {
- SubscribeLocalEvent<MachineComponent, ComponentInit>(OnMachineInit);
- SubscribeLocalEvent<MachineComponent, MapInitEvent>(OnMachineMapInit);
- }
- private void OnMachineInit(EntityUid uid, MachineComponent component, ComponentInit args)
- {
- component.BoardContainer = _container.EnsureContainer<Container>(uid, MachineFrameComponent.BoardContainerName);
- component.PartContainer = _container.EnsureContainer<Container>(uid, MachineFrameComponent.PartContainerName);
- }
- private void OnMachineMapInit(EntityUid uid, MachineComponent component, MapInitEvent args)
- {
- CreateBoardAndStockParts(uid, component);
- }
- private void CreateBoardAndStockParts(EntityUid uid, MachineComponent component)
- {
- // Entity might not be initialized yet.
- var boardContainer = _container.EnsureContainer<Container>(uid, MachineFrameComponent.BoardContainerName);
- var partContainer = _container.EnsureContainer<Container>(uid, MachineFrameComponent.PartContainerName);
- if (string.IsNullOrEmpty(component.Board))
- return;
- // We're done here, let's suppose all containers are correct just so we don't screw SaveLoadSave.
- if (boardContainer.ContainedEntities.Count > 0)
- return;
- var xform = Transform(uid);
- if (!TrySpawnInContainer(component.Board, uid, MachineFrameComponent.BoardContainerName, out var board))
- {
- throw new Exception($"Couldn't insert board with prototype {component.Board} to machine with prototype {Prototype(uid)?.ID ?? "N/A"}!");
- }
- if (!TryComp<MachineBoardComponent>(board, out var machineBoard))
- {
- throw new Exception($"Entity with prototype {component.Board} doesn't have a {nameof(MachineBoardComponent)}!");
- }
- foreach (var (stackType, amount) in machineBoard.StackRequirements)
- {
- var stack = _stackSystem.Spawn(amount, stackType, xform.Coordinates);
- if (!_container.Insert(stack, partContainer))
- throw new Exception($"Couldn't insert machine material of type {stackType} to machine with prototype {Prototype(uid)?.ID ?? "N/A"}");
- }
- foreach (var (compName, info) in machineBoard.ComponentRequirements)
- {
- for (var i = 0; i < info.Amount; i++)
- {
- if(!TrySpawnInContainer(info.DefaultPrototype, uid, MachineFrameComponent.PartContainerName, out _))
- throw new Exception($"Couldn't insert machine component part with default prototype '{compName}' to machine with prototype {Prototype(uid)?.ID ?? "N/A"}");
- }
- }
- foreach (var (tagName, info) in machineBoard.TagRequirements)
- {
- for (var i = 0; i < info.Amount; i++)
- {
- if(!TrySpawnInContainer(info.DefaultPrototype, uid, MachineFrameComponent.PartContainerName, out _))
- throw new Exception($"Couldn't insert machine component part with default prototype '{tagName}' to machine with prototype {Prototype(uid)?.ID ?? "N/A"}");
- }
- }
- }
- }
|