diff --git a/Content.Server/GameObjects/Components/ComputerComponent.cs b/Content.Server/GameObjects/Components/ComputerComponent.cs
index bef1ff8355..0fe0246042 100644
--- a/Content.Server/GameObjects/Components/ComputerComponent.cs
+++ b/Content.Server/GameObjects/Components/ComputerComponent.cs
@@ -1,13 +1,28 @@
using Content.Server.GameObjects.Components.Power.ApcNetComponents;
using Content.Shared.GameObjects.Components;
+using JetBrains.Annotations;
using Robust.Server.GameObjects;
+using Robust.Server.GameObjects.Components.Container;
+using Robust.Server.Interfaces.GameObjects;
using Robust.Shared.GameObjects;
+using Robust.Shared.Log;
+using Robust.Shared.Serialization;
+using Robust.Shared.ViewVariables;
namespace Content.Server.GameObjects.Components
{
[RegisterComponent]
- public sealed class ComputerComponent : SharedComputerComponent
+ public sealed class ComputerComponent : SharedComputerComponent, IMapInit
{
+ [ViewVariables]
+ private string _boardPrototype;
+
+ public override void ExposeData(ObjectSerializer serializer)
+ {
+ base.ExposeData(serializer);
+ serializer.DataField(ref _boardPrototype, "board", string.Empty);
+ }
+
public override void Initialize()
{
base.Initialize();
@@ -21,6 +36,8 @@ namespace Content.Server.GameObjects.Components
appearance.SetData(ComputerVisuals.Powered, powerReceiver.Powered);
}
}
+
+ CreateComputerBoard();
}
public override void OnRemove()
@@ -40,5 +57,36 @@ namespace Content.Server.GameObjects.Components
appearance.SetData(ComputerVisuals.Powered, e.Powered);
}
}
+
+ ///
+ /// Creates the corresponding computer board on the computer.
+ /// This exists so when you deconstruct computers that were serialized with the map,
+ /// you can retrieve the computer board.
+ ///
+ private void CreateComputerBoard()
+ {
+ // We don't do anything if this is null or empty.
+ if (string.IsNullOrEmpty(_boardPrototype))
+ return;
+
+ var container = ContainerManagerComponent.Ensure("board", Owner, out var existed);
+
+ if (existed)
+ {
+ // We already contain a board. Note: We don't check if it's the right one!
+ if (container.ContainedEntities.Count != 0)
+ return;
+ }
+
+ var board = Owner.EntityManager.SpawnEntity(_boardPrototype, Owner.Transform.Coordinates);
+
+ if(!container.Insert(board))
+ Logger.Warning($"Couldn't insert board {board} to computer {Owner}!");
+ }
+
+ public void MapInit()
+ {
+ CreateComputerBoard();
+ }
}
}
diff --git a/Resources/Prototypes/Entities/Constructible/Power/arcade.yml b/Resources/Prototypes/Entities/Constructible/Power/arcade.yml
index 429b2d217a..8841f0a6f6 100644
--- a/Resources/Prototypes/Entities/Constructible/Power/arcade.yml
+++ b/Resources/Prototypes/Entities/Constructible/Power/arcade.yml
@@ -34,6 +34,8 @@
type: SpaceVillainArcadeBoundUserInterface
- key: enum.WiresUiKey.Key
type: WiresBoundUserInterface
+ - type: Computer
+ board: SpaceVillainArcadeComputerCircuitboard
- type: entity
id: BlockGameArcade
@@ -69,3 +71,5 @@
type: BlockGameBoundUserInterface
- key: enum.WiresUiKey.Key
type: WiresBoundUserInterface
+ - type: Computer
+ board: BlockGameArcadeComputerCircuitboard
diff --git a/Resources/Prototypes/Entities/Constructible/Power/computers.yml b/Resources/Prototypes/Entities/Constructible/Power/computers.yml
index fb9b3315b0..947fefb4a8 100644
--- a/Resources/Prototypes/Entities/Constructible/Power/computers.yml
+++ b/Resources/Prototypes/Entities/Constructible/Power/computers.yml
@@ -168,6 +168,8 @@
interfaces:
- key: enum.CargoConsoleUiKey.Key
type: CargoConsoleBoundUserInterface
+ - type: Computer
+ board: SupplyComputerCircuitboard
- type: entity
id: ComputerSupplyRequest
@@ -182,6 +184,8 @@
screen: request
- type: CargoConsole
requestOnly: true
+ - type: Computer
+ board: SupplyRequestComputerCircuitboard
- type: entity
id: ComputerMedicalRecords
@@ -219,6 +223,8 @@
- type: PowerReceiver
load: 200
priority: Low
+ - type: Computer
+ board: ResearchComputerCircuitboard
- type: entity
id: ComputerId
@@ -238,6 +244,8 @@
- type: ComputerVisualizer
key: id_key
screen: id
+ - type: Computer
+ board: IDComputerCircuitboard
- type: entity
id: computerBodyScanner
@@ -255,6 +263,8 @@
- type: ComputerVisualizer
key: generic_key
screen: generic
+ - type: Computer
+ board: BodyScannerComputerCircuitboard
- type: entity
id: ComputerComms
@@ -272,6 +282,8 @@
interfaces:
- key: enum.CommunicationsConsoleUiKey.Key
type: CommunicationsConsoleBoundUserInterface
+ - type: Computer
+ board: CommsComputerCircuitboard
- type: entity
id: ComputerSolarControl
@@ -289,3 +301,5 @@
interfaces:
- key: enum.SolarControlConsoleUiKey.Key
type: SolarControlConsoleBoundUserInterface
+ - type: Computer
+ board: SolarControlComputerCircuitboard
diff --git a/Resources/Prototypes/Entities/Objects/Misc/computer_circuitboards.yml b/Resources/Prototypes/Entities/Objects/Misc/computer_circuitboards.yml
index 71396f6a7a..01968130e0 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/computer_circuitboards.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/computer_circuitboards.yml
@@ -64,3 +64,19 @@
components:
- type: ComputerBoard
prototype: ComputerSolarControl
+
+- type: entity
+ id: SpaceVillainArcadeComputerCircuitboard
+ parent: BaseComputerCircuitboard
+ name: space villain arcade computer circuit board
+ components:
+ - type: ComputerBoard
+ prototype: Arcade
+
+- type: entity
+ id: BlockGameArcadeComputerCircuitboard
+ parent: BaseComputerCircuitboard
+ name: block game arcade computer circuit board
+ components:
+ - type: ComputerBoard
+ prototype: BlockGameArcade