Surveillance cameras (#8246)

* cameras but i didn't feel like git stashing them

* Adds more functionality server-side for surveillance cameras

* rider moment

* Adds skeleton for SurveillanceCameraMonitorBoundUi on client

* whoops

* makes surveillance camera monitor UI more defined

* removes tree from SurveillanceCameraMonitorWindow

* surveillance camera active flag, other routing things

* actually sets how SurveillanceCameraMonitorSystem sends camera info to clients

* adds entity yaml, changes field

* adds the camera/monitor entities, makes the UI open

* SurveillanceCameraRouters (not implemented fully)

* subnets for cameras, server-side

* it works!

* fixes rotation in cameras

* whoops

restores surveillance cameras to ignored components
makes it so that switching cameras now lerps the other camera

* makes the UI work

* makes it so that cameras actually refresh now

* cleanup

* adds camera.rsi

* cleans up prototypes a bit

* adds camera subnet frequencies, cameras in subnets

* adds surveillance camera router subnets

* might fix testing errors

* adds the circuit board to the surveillance camera monitor

* fixes up the camera monitor (the detective will get his tv soon)

* adds heartbeat, ensures subnet data is passed into cameras to send

* fixes up a few things

* whoops

* changes to UI internals

* fixes subnet selection issue

* localized strings for UI

* changes 'test' id to 'camera' for cameras

* whoops

* missing s

* camera static!

* adds a delay to camera switching

* adjusts a few things in camera timing

* adds setup for cameras/routers, localization for frequency names

* adds setup ui for routers, makes subnet names in monitor window follow frequency name in prototype

* localization, some cleanup

* ui adjustments

* adds surveillance camera visuals

* fixes a bug when closing the UI for monitors

* adds disconnect message to UI

* adds construction graph to cameras

* adds the camera to the construction menu

* fixes network selection for setup, tweak to assembly

* adds surveillance camera router construction, fixes up surveillance camera wire cutting

* adds disconnect button to monitor UI

* switches around the status text

* tweaks monitor UI

* makes the address actually show

* might make tests pass

* UI adjustments, hard name limit

* ok, that didn't work

* adds wireless cameras

* makes the television work/look nicer

* adds tripod cameras in addition to mobile cameras

* makes wireless cameras constructable

* fixes up those prototypes

* reorganization in C#, small cleanup

* ensures that power changes deactivate some devices

* adds a component to the television, comments out a function

* actually, never mind, i forgot that wireless cameras existed/are creatable for a second

* tweaks to router construction, removes SubnetTest from prototypes

* removes it from frequencies too

* Apply suggestions from code review

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>

* type serializers into components

* setup window opens centered, enum is now byte

* replaces active monitor list with ActiveSurveillanceCameraMonitorComponent

* adds paused/deleted entity checks, changes how verbs are given

* removes EntitySystem.Get<T>() references

* fixes bug related to selecting network from setup, alphabet-orders network listing in setup

* rider moment

* adds minwidth to surveillance camera setup window

* addresses reviews

* should fix the issue with camera visuals not updating properly

* addresses some reviews

* addresses further review

* addresses reviews related to RSIs

* never needed a key there anyways

* changes a few things with routers to ensure that they're active

* whoops

* ensurecomp over addcomp

* whoops

Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
This commit is contained in:
Flipp Syder
2022-05-31 01:44:57 -07:00
committed by GitHub
parent 69d8a2beee
commit d4697c000c
59 changed files with 2945 additions and 27 deletions

View File

@@ -396,3 +396,56 @@
materialRequirements:
Glass: 2
Cable: 2
- type: entity
id: SurveillanceCameraRouterCircuitboard
parent: BaseMachineCircuitboard
name: Surveillance camera router board
description: A machine printed circuit board for a surveillance camera router
components:
- type: MachineBoard
prototype: SurveillanceCameraRouterConstructed
requirements:
Capacitor: 4
- type: entity
id: SurveillanceCameraWirelessRouterCircuitboard
parent: BaseMachineCircuitboard
name: Surveillance camera wireless router board
description: A machine printed circuit board for a surveillance camera wireless router
components:
- type: MachineBoard
prototype: SurveillanceCameraWirelessRouterConstructed
requirements:
Laser: 1
Capacitor: 4
- type: entity
id: SurveillanceWirelessCameraMovableCircuitboard
parent: BaseMachineCircuitboard
name: movable wireless camera board
description: A machine printed circuit board for a movable wireless camera
components:
- type: MachineBoard
prototype: SurveillanceWirelessCameraMovableConstructed
requirements:
Laser: 1
Capacitor: 4
materialRequirements:
Glass: 2
Cable: 2
- type: entity
id: SurveillanceWirelessCameraAnchoredCircuitboard
parent: BaseMachineCircuitboard
name: wireless camera board
description: A machine printed circuit board for a wireless camera
components:
- type: MachineBoard
prototype: SurveillanceWirelessCameraAnchoredConstructed
requirements:
Laser: 1
Capacitor: 4
materialRequirements:
Glass: 2
Cable: 2

View File

@@ -66,6 +66,24 @@
- type: ComputerBoard
prototype: ComputerSupplyRequest
- type: entity
parent: BaseComputerCircuitboard
id: SurveillanceCameraMonitorCircuitboard
name: surveillance camera monitor board
description: A computer printed circuit board for a surveillance camera monitor
components:
- type: ComputerBoard
prototype: ComputerSurveillanceCameraMonitor
- type: entity
parent: BaseComputerCircuitboard
id: SurveillanceWirelessCameraMonitorCircuitboard
name: surveillance wireless camera monitor board
description: A computer printed circuit board for a surveillance wireless camera monitor
components:
- type: ComputerBoard
prototype: ComputerSurveillanceWirelessCameraMonitor
- type: entity
parent: BaseComputerCircuitboard
id: PowerMonitoringComputerCircuitboard

View File

@@ -399,30 +399,99 @@
color: "#b89f25"
- type: entity
parent: BaseStructure
parent: ComputerBase
id: ComputerSurveillanceCameraMonitor
name: camera monitor
description: A surveillance camera monitor. You're watching them. Maybe.
components:
- type: Appearance
visuals:
- type: ComputerVisualizer
key: tech_key
screen: cameras
- type: Computer
board: SurveillanceCameraMonitorCircuitboard
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCamera
transmitFrequencyId: SurveillanceCamera
- type: WiredNetworkConnection
- type: SurveillanceCameraMonitor
- type: ActivatableUI
key: enum.SurveillanceCameraMonitorUiKey.Key
- type: ActivatableUIRequiresPower
- type: Transform
anchored: true
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraMonitorUiKey.Key
type: SurveillanceCameraMonitorBoundUserInterface
- type: entity
parent: ComputerBase
id: ComputerSurveillanceWirelessCameraMonitor
name: wireless camera monitor
description: A wireless surveillance camera monitor. You're watching them. Maybe.
components:
- type: Appearance
visuals:
- type: ComputerVisualizer
key: tech_key
screen: cameras
- type: Computer
board: SurveillanceWirelessCameraMonitorCircuitboard
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCamera
transmitFrequencyId: SurveillanceCamera
- type: WirelessNetworkConnection
range: 200
- type: SurveillanceCameraMonitor
- type: ActivatableUI
key: enum.SurveillanceCameraMonitorUiKey.Key
- type: ActivatableUIRequiresPower
- type: Transform
anchored: true
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraMonitorUiKey.Key
type: SurveillanceCameraMonitorBoundUserInterface
- type: entity
parent: ComputerSurveillanceWirelessCameraMonitor
id: ComputerTelevision
name: wooden television
description: It's an old television displaying the station's cameras, if they worked.
description: Finally, some decent reception around here...
components:
- type: InteractionOutline
- type: Sprite
sprite: Structures/Machines/computers.rsi
layers:
- state: television
- state: detective_television
shader: unshaded
visuals:
- type: PointLight
radius: 1.5
energy: 1.6
color: "#b89f25"
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeAabb
bounds: "-0.25,-0.25,0.25,0.25"
mass: 50
mask:
- TabletopMachineMask
layer:
- TabletopMachineLayer
- type: Appearance
visuals:
- type: ComputerVisualizer
body: television
bodyBroken: television_broken
screen: detective_television
- type: Sprite
sprite: Structures/Machines/computers.rsi
layers:
- map: [ "enum.ComputerVisualizer+Layers.KeyboardOn" ]
visible: false
- map: [ "enum.ComputerVisualizer+Layers.Keyboard" ]
visible: false
- map: [ "enum.ComputerVisualizer+Layers.Body"]
state: television
- map: [ "enum.ComputerVisualizer+Layers.Screen" ]
state: detective_television
shader: unshaded
- type: PointLight
radius: 1.5
energy: 1.6
color: "#b89f25"
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeAabb
bounds: "-0.25,-0.25,0.25,0.25"
mass: 50
mask:
- TabletopMachineMask
layer:
- TabletopMachineLayer

View File

@@ -250,6 +250,7 @@
- DiagnoserMachineCircuitboard
- ChemMasterMachineCircuitboard
- ChemDispenserMachineCircuitboard
- SurveillanceCameraRouterCircuitboard
- HydroponicsTrayMachineCircuitboard
- SolarControlComputerCircuitboard
- AutolatheMachineCircuitboard

View File

@@ -0,0 +1,148 @@
- type: entity
abstract: true
parent: BaseMachinePowered
id: SurveillanceCameraRouterBase
name: camera router
description: A surveillance camera router. It routes. Perhaps.
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCamera
transmitFrequencyId: SurveillanceCamera
- type: WiredNetworkConnection
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraSetupUiKey.Router
type: SurveillanceCameraSetupBoundUi
- type: Construction
graph: Machine
node: machine
- type: Machine
board: SurveillanceCameraRouterCircuitboard
- type: Sprite
sprite: Structures/Machines/server.rsi
layers:
- state: server
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterConstructed
suffix: Constructed
components:
- type: SurveillanceCameraRouter
setupAvailableNetworks:
- SurveillanceCameraEngineering
- SurveillanceCameraSecurity
- SurveillanceCameraService
- SurveillanceCameraSupply
- SurveillanceCameraScience
- SurveillanceCameraGeneral
- SurveillanceCameraMedical
- SurveillanceCameraCommand
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterEngineering
suffix: Engineering
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraEngineering
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterSecurity
suffix: Security
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraSecurity
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterScience
suffix: Science
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraScience
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterSupply
suffix: Supply
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraSupply
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterCommand
suffix: Command
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraCommand
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterService
suffix: Service
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraService
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterMedical
suffix: Medical
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraMedical
- type: entity
parent: SurveillanceCameraRouterBase
id: SurveillanceCameraRouterGeneral
suffix: General
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraGeneral
- type: entity
parent: BaseMachinePowered
id: SurveillanceCameraWirelessRouterBase
name: wireless camera router
description: A wireless surveillance camera router. It routes. Perhaps.
components:
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCamera
transmitFrequencyId: SurveillanceCamera
- type: WirelessNetworkConnection
range: 200
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraSetupUiKey.Router
type: SurveillanceCameraSetupBoundUi
- type: Construction
graph: Machine
node: machine
- type: Machine
board: SurveillanceCameraWirelessRouterCircuitboard
- type: Sprite
sprite: Structures/Machines/server.rsi
layers:
- state: server
- type: entity
parent: SurveillanceCameraWirelessRouterBase
id: SurveillanceCameraWirelessRouterConstructed
suffix: Constructed
components:
- type: SurveillanceCameraRouter
setupAvailableNetworks:
- SurveillanceCameraEntertainment
- type: entity
parent: SurveillanceCameraWirelessRouterBase
id: SurveillanceCameraWirelessRouterEntertainment
suffix: Entertainment
components:
- type: SurveillanceCameraRouter
subnetFrequency: SurveillanceCameraEntertainment

View File

@@ -0,0 +1,117 @@
- type: entity
abstract: true
parent: BaseStructureDynamic
id: SurveillanceWirelessCameraBase
name: wireless camera
description: A camera. It's watching you. Kinda.
components:
- type: Construction
graph: Machine
node: machine
- type: InteractionOutline
- type: Eye
- type: WirelessNetworkConnection
range: 200
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
- type: Rotatable
rotateWhileAnchored: true
- type: Fixtures
fixtures:
- shape:
!type:PhysShapeCircle
radius: 0.45
mass: 50
mask:
- MachineMask
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraSetupUiKey.Camera
type: SurveillanceCameraSetupBoundUi
placement:
mode: SnapgridCenter
- type: entity
abstract: true
id: SurveillanceWirelessCameraAnchoredBase
parent: SurveillanceWirelessCameraBase
suffix: Anchored
components:
- type: Machine
board: SurveillanceWirelessCameraAnchoredCircuitboard
- type: Anchorable
- type: Transform
anchored: true
- type: Sprite
noRot: true
sprite: Structures/monitors.rsi
layers:
- map: [ "enum.SurveillanceCameraVisualsKey.Key" ]
state: television
- type: entity
abstract: true
id: SurveillanceWirelessCameraMovableBase
parent: SurveillanceWirelessCameraBase
suffix: Movable
components:
- type: Machine
board: SurveillanceWirelessCameraMovableCircuitboard
- type: Transform
- type: Sprite
noRot: true
sprite: Structures/monitors.rsi
layers:
- map: [ "enum.SurveillanceCameraVisualsKey.Key" ]
state: mobilevision
- type: entity
parent: SurveillanceWirelessCameraAnchoredBase
suffix: Constructed, Anchored
id: SurveillanceWirelessCameraAnchoredConstructed
components:
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCamera
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
setupAvailableNetworks:
- SurveillanceCameraEntertainment
- type: entity
parent: SurveillanceWirelessCameraMovableBase
suffix: Constructed, Movable
id: SurveillanceWirelessCameraMovableConstructed
components:
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCameraEntertainment
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
setupAvailableNetworks:
- SurveillanceCameraEntertainment
- type: entity
parent: SurveillanceWirelessCameraAnchoredBase
suffix: Entertainment, Anchored
id: SurveillanceWirelessCameraAnchoredEntertainment
components:
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCameraEntertainment
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceWirelessCameraMovableBase
suffix: Entertainment, Movable
id: SurveillanceWirelessCameraMovableEntertainment
components:
- type: DeviceNetwork
deviceNetId: Wireless
receiveFrequencyId: SurveillanceCameraEntertainment
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true

View File

@@ -0,0 +1,212 @@
- type: entity
abstract: true
id: SurveillanceCameraBase
name: camera
description: A surveillance camera. It's watching you. Kinda.
components:
- type: Clickable
- type: InteractionOutline
- type: Construction
graph: SurveillanceCamera
node: camera
- type: Electrified
enabled: false
usesApcPower: true
- type: WallMount
- type: ApcPowerReceiver
- type: ExtensionCableReceiver
- type: Eye
- type: WiredNetworkConnection
- type: Transform
anchored: true
- type: Wires
alwaysRandomize: true
LayoutId: SurveillanceCamera
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Wallmounts/camera.rsi
layers:
- map: [ "enum.SurveillanceCameraVisualsKey.Layer" ]
state: camera
- type: Appearance
- type: SurveillanceCameraVisuals
sprites:
Active: camera
Disabled: camera_off
InUse: camera_in_use
- type: UserInterface
interfaces:
- key: enum.SurveillanceCameraSetupUiKey.Camera
type: SurveillanceCameraSetupBoundUi
- key: enum.WiresUiKey.Key
type: WiresBoundUserInterface
placement:
mode: SnapgridCenter
snap:
- Wallmount
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraConstructed
name: camera
suffix: Constructed
components:
- type: DeviceNetwork
deviceNetId: Wired
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
setupAvailableNetworks:
- SurveillanceCameraEngineering
- SurveillanceCameraSecurity
- SurveillanceCameraService
- SurveillanceCameraSupply
- SurveillanceCameraScience
- SurveillanceCameraGeneral
- SurveillanceCameraMedical
- SurveillanceCameraCommand
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraEngineering
name: camera
suffix: Engineering
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraEngineering
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraSecurity
name: camera
suffix: Security
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraSecurity
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraScience
name: camera
suffix: Science
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraScience
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraSupply
name: camera
suffix: Supply
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraSupply
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraScience
name: camera
suffix: Science
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraScience
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraCommand
name: camera
suffix: Command
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraCommand
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraService
name: camera
suffix: Service
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraService
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraMedical
name: camera
suffix: Medical
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraMedical
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
parent: SurveillanceCameraBase
id: SurveillanceCameraGeneral
name: camera
suffix: General
components:
- type: DeviceNetwork
deviceNetId: Wired
receiveFrequencyId: SurveillanceCameraGeneral
transmitFrequencyId: SurveillanceCamera
- type: SurveillanceCamera
networkSet: true
- type: entity
id: SurveillanceCameraAssembly
name: camera
description: A surveillance camera. Doesn't seem to be watching anybody any time soon. Probably.
components:
- type: Clickable
- type: InteractionOutline
- type: Construction
graph: SurveillanceCamera
node: assembly
- type: WallMount
- type: Transform
anchored: true
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Metallic
- type: Sprite
drawdepth: WallMountedItems
sprite: Structures/Wallmounts/camera.rsi
layers:
- state: camera_off
placement:
mode: SnapgridCenter
snap:
- Wallmount