From 5c22ddc645916e5677053de4dca660e800f88ed2 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 28 May 2024 05:09:25 +0200 Subject: [PATCH] [MIRROR] Makes computer console circuits more consistent (#27869) * 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 :cl: 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 /:cl: * Makes computer console circuits more consistent --------- Co-authored-by: Echriser --- .../computers/item/computer.dm | 5 +- .../computers/item/computer_circuit.dm | 56 +++++++++---------- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 54d6abe51cc..ff08a07611e 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -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) diff --git a/code/modules/modular_computers/computers/item/computer_circuit.dm b/code/modules/modular_computers/computers/item/computer_circuit.dm index 2a6a0d70be9..35caaf3c851 100644 --- a/code/modules/modular_computers/computers/item/computer_circuit.dm +++ b/code/modules/modular_computers/computers/item/computer_circuit.dm @@ -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