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>
BIN
Resources/Textures/Interface/Nano/square_black.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
40
Resources/Textures/Shaders/camera_static.swsl
Normal file
@@ -0,0 +1,40 @@
|
||||
// Credited to PelicanPolice on Shadertoy
|
||||
// Free for any purpose, commercial or otherwise.
|
||||
// But do post here so I can see where it got used!
|
||||
// If using on shadertoy, do link to this project on yours :)
|
||||
|
||||
highp float noise(highp vec2 pos, highp float evolve) {
|
||||
|
||||
// Loop the evolution (over a very long period of time).
|
||||
highp float e = fract((evolve*0.01));
|
||||
|
||||
// Coordinates
|
||||
highp float cx = pos.x*e;
|
||||
highp float cy = sin(pos.y*e * 376.0); // is this close enough to a 60hz interference? :smol:
|
||||
|
||||
highp float v2_2 = cx*2.4/cy*23.0+pow(abs(cy/22.4),3.3);
|
||||
highp float v2_1 = fract(fract(v2_2));
|
||||
highp float v2 = fract(2.0/v2_1);
|
||||
highp float v3 = fract(cx*evolve/pow(abs(cy),0.050));
|
||||
|
||||
// Generate a "random" black or white value
|
||||
return fract(0.1*v2*v3);
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
highp vec2 coords = FRAGCOORD.xy;
|
||||
|
||||
// Increase this number to test performance
|
||||
int intensity = 1;
|
||||
|
||||
highp vec3 colour;
|
||||
for (int i = 0; i < intensity; i++)
|
||||
{
|
||||
// Generate a black to white pixel
|
||||
colour = vec3(noise(coords,TIME));
|
||||
}
|
||||
|
||||
// Output to screen
|
||||
COLOR = vec4(colour,1.0);
|
||||
}
|
||||
BIN
Resources/Textures/Structures/Wallmounts/camera.rsi/camera.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 894 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 873 B |
|
After Width: | Height: | Size: 283 B |
@@ -0,0 +1 @@
|
||||
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from /tg/station at https://github.com/tgstation/tgstation/commit/6bfe3b2e4fcbcdac9159dc4f0327a82ddf05ba7bi", "states": [{"name": "camera", "directions": 8, "delays": [[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]]}, {"name": "camera_assembly", "directions": 8, "delays": [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]]}, {"name": "camera_emp", "directions": 8, "delays": [[0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1]]}, {"name": "camera_in_use", "directions": 8, "delays": [[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]]}, {"name": "camera_off", "directions": 8, "delays": [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]]}, {"name": "cameracase", "directions": 1, "delays": [[1.0]]}, {"name": "xraycamera", "directions": 8, "delays": [[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]]}, {"name": "xraycamera_assembly", "directions": 8, "delays": [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]]}, {"name": "xraycamera_emp", "directions": 8, "delays": [[0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1], [0.2, 0.2, 0.1, 0.1]]}, {"name": "xraycamera_in_use", "directions": 8, "delays": [[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], [0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3]]}, {"name": "xraycamera_off", "directions": 8, "delays": [[1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0], [1.0]]}]}
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1023 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
16
Resources/Textures/Structures/monitors.rsi/meta.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"version": 1,
|
||||
"size": {"x": 32, "y": 32},
|
||||
"license": "From Goonstation at https://github.com/goonstation/goonstation/commit/ed3b3c552e384bb3eb7056468a125f6a8c661261",
|
||||
"copyright": "CC-BY-NC-SA-3.0",
|
||||
"states": [
|
||||
{"name": "mobilevision", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]},
|
||||
{"name": "party", "directions": 1, "delays": [[1.0]]},
|
||||
{"name": "rad0", "directions": 1, "delays": [[1.0]]},
|
||||
{"name": "rad1", "directions": 1, "delays": [[0.1, 0.1]]},
|
||||
{"name": "shipalert0", "directions": 1, "delays": [[1.0]]},
|
||||
{"name": "shipalert1", "directions": 1, "delays": [[1.0]]},
|
||||
{"name": "shipalert2", "directions": 1, "delays": [[1.0]]},
|
||||
{"name": "television", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}
|
||||
]
|
||||
}
|
||||
BIN
Resources/Textures/Structures/monitors.rsi/mobilevision.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
Resources/Textures/Structures/monitors.rsi/party.png
Normal file
|
After Width: | Height: | Size: 315 B |
BIN
Resources/Textures/Structures/monitors.rsi/rad0.png
Normal file
|
After Width: | Height: | Size: 283 B |
BIN
Resources/Textures/Structures/monitors.rsi/rad1.png
Normal file
|
After Width: | Height: | Size: 378 B |
BIN
Resources/Textures/Structures/monitors.rsi/shipalert0.png
Normal file
|
After Width: | Height: | Size: 434 B |
BIN
Resources/Textures/Structures/monitors.rsi/shipalert1.png
Normal file
|
After Width: | Height: | Size: 408 B |
BIN
Resources/Textures/Structures/monitors.rsi/shipalert2.png
Normal file
|
After Width: | Height: | Size: 475 B |
BIN
Resources/Textures/Structures/monitors.rsi/television.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |