Makes computer console circuits more consistent (#83412)

## About The Pull Request
This PR makes the computer console's print feature work on a signal
instead of wasting paper every string update, changes the flashlight
color change to do the same, fixes the on/off signal not turning the
console on, and fixes the signal for the console turning off not
functioning.

## Why It's Good For The Game
Besides the bug fixes, this makes the console components more consistent
with every other circuit component. The refactor is to prevent worrying
about nulls for colors or errors because of early returns.

## Changelog
🆑
fix: computers with no lights can now turn on using the on/off signal
fix: RGB lights on PDA circuits now use a signal
fix: the is_off signal now works on consoles
fix: printing text on a console component now uses a signal
refactor: each input signal in console circuits now have their own proc
/🆑
This commit is contained in:
Echriser
2024-05-27 11:47:46 -05:00
committed by GitHub
parent 572a1884ed
commit a7ca4b83cb
2 changed files with 30 additions and 31 deletions

View File

@@ -484,7 +484,10 @@
playsound(src, 'sound/machines/card_slide.ogg', 50)
/obj/item/modular_computer/proc/turn_on(mob/user, open_ui = TRUE)
var/issynth = HAS_SILICON_ACCESS(user) // Robots and AIs get different activation messages.
var/issynth = FALSE // Robots and AIs get different activation messages.
if(user)
issynth = HAS_SILICON_ACCESS(user)
if(atom_integrity <= integrity_failure * max_integrity)
if(user)
if(issynth)

View File

@@ -5,7 +5,9 @@
var/obj/item/modular_computer/computer
///Turns the PC on/off
var/datum/port/input/on_off
///When set, will print a piece of paper with the value as text.
///Determines the text to be printed
var/datum/port/input/print_text
/// Print when triggered
var/datum/port/input/print
///Sent when turned on
@@ -18,6 +20,7 @@
var/datum/port/input/red
var/datum/port/input/green
var/datum/port/input/blue
var/datum/port/input/set_color
/obj/item/circuit_component/modpc/register_shell(atom/movable/shell)
. = ..()
@@ -39,10 +42,11 @@
* I hope you're cool with me doing it here.
*/
if(computer.has_light && isnull(lights))
lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL)
lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_flashlight))
red = add_input_port("Red", PORT_TYPE_NUMBER)
green = add_input_port("Green", PORT_TYPE_NUMBER)
blue = add_input_port("Blue", PORT_TYPE_NUMBER)
set_color = add_input_port("Set Color", PORT_TYPE_SIGNAL, trigger = PROC_REF(set_flashlight_color))
/obj/item/circuit_component/modpc/unregister_shell(atom/movable/shell)
if(computer)
@@ -51,45 +55,37 @@
return ..()
/obj/item/circuit_component/modpc/populate_ports()
on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL)
print = add_input_port("Print Text", PORT_TYPE_STRING)
on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_power))
print_text = add_input_port("Print Text", PORT_TYPE_STRING)
print = add_input_port("Print", PORT_TYPE_SIGNAL, trigger = PROC_REF(print_text))
is_on = add_output_port("Turned On", PORT_TYPE_SIGNAL)
is_on = add_output_port("Shut Down", PORT_TYPE_SIGNAL)
is_off = add_output_port("Shut Down", PORT_TYPE_SIGNAL)
/obj/item/circuit_component/modpc/pre_input_received(datum/port/input/port)
if(isnull(computer))
return
if(COMPONENT_TRIGGERED_BY(print, port))
if(COMPONENT_TRIGGERED_BY(print_text, port))
print.set_value(html_encode(trim(print.value, MAX_PAPER_LENGTH)))
else if(COMPONENT_TRIGGERED_BY(red, port))
red.set_value(clamp(red.value, 0, 255))
else if(COMPONENT_TRIGGERED_BY(blue, port))
blue.set_value(clamp(blue.value, 0, 255))
else if(COMPONENT_TRIGGERED_BY(green, port))
green.set_value(clamp(green.value, 0, 255))
/obj/item/circuit_component/modpc/input_received(datum/port/input/port)
if(isnull(computer))
return
if(COMPONENT_TRIGGERED_BY(on_off, port))
if(computer.enabled)
INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer))
else
INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on))
return
/obj/item/circuit_component/modpc/proc/print_text(datum/source)
if(computer.enabled)
computer.print_text(print_text.value)
if(!computer.enabled)
return
/obj/item/circuit_component/modpc/proc/toggle_power(datum/source)
if(computer.enabled)
INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer))
else
INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on))
if(COMPONENT_TRIGGERED_BY(print, port))
computer.print_text(print.value)
/obj/item/circuit_component/modpc/proc/toggle_flashlight(datum/source)
computer.toggle_flashlight()
if(lights)
if(COMPONENT_TRIGGERED_BY(lights, port))
computer.toggle_flashlight()
if(COMPONENT_TRIGGERED_BY(red, port) || COMPONENT_TRIGGERED_BY(green, port) || COMPONENT_TRIGGERED_BY(blue, port))
computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0))
/obj/item/circuit_component/modpc/proc/set_flashlight_color(datum/source)
red.set_value(clamp(red.value, 0, 255))
blue.set_value(clamp(blue.value, 0, 255))
green.set_value(clamp(green.value, 0, 255))
computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0))
/obj/item/circuit_component/modpc/proc/computer_on(datum/source, mob/user)
SIGNAL_HANDLER