Computers now spawn with circuit boards, add arcade circuitboards.

This commit is contained in:
Víctor Aguilera Puerto
2020-10-11 13:37:19 +02:00
parent c84622c3a0
commit 6e33c15fd7
4 changed files with 83 additions and 1 deletions

View File

@@ -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);
}
}
/// <summary>
/// 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.
/// </summary>
private void CreateComputerBoard()
{
// We don't do anything if this is null or empty.
if (string.IsNullOrEmpty(_boardPrototype))
return;
var container = ContainerManagerComponent.Ensure<Container>("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();
}
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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