diff --git a/code/__DEFINES/wiremod.dm b/code/__DEFINES/wiremod.dm index 084736bf589..90d5cb24a83 100644 --- a/code/__DEFINES/wiremod.dm +++ b/code/__DEFINES/wiremod.dm @@ -1,9 +1,6 @@ /// Helper define that can only be used in /obj/item/circuit_component/input_received() #define COMPONENT_TRIGGERED_BY(trigger, port) (trigger.value && trigger == port) -/// Define to automatically handle calling the output port. Will not call the output port if the input_received proc returns TRUE. -#define TRIGGER_CIRCUIT_COMPONENT(component, port) if(!component.input_received(port) && (component.circuit_flags & CIRCUIT_FLAG_OUTPUT_SIGNAL)) component.trigger_output.set_output(COMPONENT_SIGNAL) - // Port defines #define PORT_MAX_NAME_LENGTH 50 diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 520182a754a..67a29bff7f0 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -134,6 +134,10 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_mob_realname_dsc(mob/A,mob/B) return sorttext(A.real_name,B.real_name) +/// Orders by integrated circuit weight +/proc/cmp_port_order_asc(datum/port/compare1, datum/port/compare2) + return compare1.order - compare2.order + /** * Sorts crafting recipe requirements before the crafting recipe is inserted into GLOB.crafting_recipes * diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index ca6b2570f7b..eb45182af49 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -30,8 +30,7 @@ var/obj/machinery/computer/crew/attached_console -/obj/item/circuit_component/medical_console_data/Initialize() - . = ..() +/obj/item/circuit_component/medical_console_data/populate_ports() records = add_output_port("Crew Monitoring Data", PORT_TYPE_TABLE) /obj/item/circuit_component/medical_console_data/register_usb_parent(atom/movable/parent) @@ -58,9 +57,6 @@ /obj/item/circuit_component/medical_console_data/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_console || !GLOB.crewmonitor) return diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index b3f13c0a1c9..5912ebf3d32 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -46,9 +46,8 @@ . += create_ui_notice("Minimum Range: [-the_pad.range]", "orange", "minus") . += create_ui_notice("Maximum Range: [the_pad.range]", "orange", "plus") -/obj/item/circuit_component/bluespace_launchpad/Initialize() - . = ..() - launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER, FALSE, default = 1) +/obj/item/circuit_component/bluespace_launchpad/populate_ports() + launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER, trigger = null, default = 1) x_pos = add_input_port("X offset", PORT_TYPE_NUMBER) y_pos = add_input_port("Y offset", PORT_TYPE_NUMBER) send_trigger = add_input_port("Send", PORT_TYPE_SIGNAL) @@ -69,11 +68,6 @@ return ..() /obj/item/circuit_component/bluespace_launchpad/input_received(datum/port/input/port) - . = ..() - - if(.) - return - if(!attached_console || length(attached_console.launchpads) == 0) why_fail.set_output("No launchpads connected!") on_fail.set_output(COMPONENT_SIGNAL) @@ -106,11 +100,11 @@ return if(COMPONENT_TRIGGERED_BY(send_trigger, port)) - the_pad.doteleport(null, TRUE, alternate_log_name = parent.get_creator()) + INVOKE_ASYNC(the_pad, /obj/machinery/launchpad.proc/doteleport, null, TRUE, parent.get_creator()) sent.set_output(COMPONENT_SIGNAL) if(COMPONENT_TRIGGERED_BY(retrieve_trigger, port)) - the_pad.doteleport(null, FALSE, alternate_log_name = parent.get_creator()) + INVOKE_ASYNC(the_pad, /obj/machinery/launchpad.proc/doteleport, null, FALSE, parent.get_creator()) retrieved.set_output(COMPONENT_SIGNAL) /obj/machinery/computer/launchpad/attack_paw(mob/user, list/modifiers) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 27f41372e0e..23523bf981b 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -46,8 +46,7 @@ var/obj/machinery/computer/secure_data/attached_console -/obj/item/circuit_component/arrest_console_data/Initialize() - . = ..() +/obj/item/circuit_component/arrest_console_data/populate_ports() records = add_output_port("Security Records", PORT_TYPE_TABLE) on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL) @@ -75,9 +74,6 @@ /obj/item/circuit_component/arrest_console_data/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_console || !attached_console.authenticated) on_fail.set_output(COMPONENT_SIGNAL) @@ -144,16 +140,12 @@ ) new_status = add_option_port("Arrest Options", component_options) -/obj/item/circuit_component/arrest_console_arrest/Initialize() - . = ..() +/obj/item/circuit_component/arrest_console_arrest/populate_ports() targets = add_input_port("Targets", PORT_TYPE_TABLE) new_status_set = add_output_port("Set Status", PORT_TYPE_STRING) on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL) /obj/item/circuit_component/arrest_console_arrest/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_console || !attached_console.authenticated) on_fail.set_output(COMPONENT_SIGNAL) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 86fc8cdffa8..8ad587b9880 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -232,8 +232,7 @@ var/obj/machinery/computer/teleporter/attached_console -/obj/item/circuit_component/teleporter_control_console/Initialize() - . = ..() +/obj/item/circuit_component/teleporter_control_console/populate_ports() new_target = add_input_port("New Target", PORT_TYPE_STRING) set_target_trigger = add_input_port("Set Target", PORT_TYPE_SIGNAL) @@ -258,11 +257,6 @@ return attached_console /obj/item/circuit_component/teleporter_control_console/input_received(datum/port/input/port) - . = ..() - - if (.) - return . - var/list/targets = attached_console.get_targets() if (COMPONENT_TRIGGERED_BY(set_target_trigger, port)) diff --git a/code/game/machinery/computer/tram_controls.dm b/code/game/machinery/computer/tram_controls.dm index d36ec789538..01cc0f7d552 100644 --- a/code/game/machinery/computer/tram_controls.dm +++ b/code/game/machinery/computer/tram_controls.dm @@ -127,9 +127,8 @@ /// The tram controls computer (/obj/machinery/computer/tram_controls) var/obj/machinery/computer/tram_controls/computer -/obj/item/circuit_component/tram_controls/Initialize() - . = ..() - new_destination = add_input_port("Destination", PORT_TYPE_STRING, FALSE) +/obj/item/circuit_component/tram_controls/populate_ports() + new_destination = add_input_port("Destination", PORT_TYPE_STRING, trigger = null) trigger_move = add_input_port("Send Tram", PORT_TYPE_SIGNAL) location = add_output_port("Location", PORT_TYPE_STRING) @@ -150,10 +149,6 @@ return ..() /obj/item/circuit_component/tram_controls/input_received(datum/port/input/port) - . = ..() - if (.) - return - if (!COMPONENT_TRIGGERED_BY(trigger_move, port)) return @@ -164,7 +159,6 @@ return var/destination - for(var/obj/effect/landmark/tram/possible_destination as anything in GLOB.tram_landmarks) if(possible_destination.name == new_destination.value) destination = possible_destination diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 53a7c1c2c28..04d0cb51319 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -213,8 +213,7 @@ var/obj/machinery/quantumpad/attached_pad -/obj/item/circuit_component/quantumpad/Initialize() - . = ..() +/obj/item/circuit_component/quantumpad/populate_ports() target_pad = add_input_port("Target Pad", PORT_TYPE_ATOM) failed = add_output_port("On Fail", PORT_TYPE_SIGNAL) @@ -228,8 +227,7 @@ return ..() /obj/item/circuit_component/quantumpad/input_received(datum/port/input/port) - . = ..() - if(. || !attached_pad) + if(!attached_pad) return var/obj/machinery/quantumpad/targeted_pad = target_pad.value diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index d6fc98170ee..d5d9d4e1f57 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -924,8 +924,7 @@ var/obj/machinery/airalarm/connected_alarm var/list/options_map -/obj/item/circuit_component/air_alarm/Initialize() - . = ..() +/obj/item/circuit_component/air_alarm/populate_ports() min_2 = add_input_port("Min 2", PORT_TYPE_NUMBER) min_1 = add_input_port("Min 1", PORT_TYPE_NUMBER) max_1 = add_input_port("Max 1", PORT_TYPE_NUMBER) @@ -961,9 +960,7 @@ return ..() /obj/item/circuit_component/air_alarm/input_received(datum/port/input/port) - . = ..() - - if(. || !connected_alarm || connected_alarm.locked) + if(!connected_alarm || connected_alarm.locked) return var/current_option = air_alarm_options.value diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 50931894026..eee1c49b71f 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -104,8 +104,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. /// Sent when the valve is closed var/datum/port/output/closed -/obj/item/circuit_component/digital_valve/Initialize() - . = ..() +/obj/item/circuit_component/digital_valve/populate_ports() open = add_input_port("Open", PORT_TYPE_SIGNAL) close = add_input_port("Close", PORT_TYPE_SIGNAL) @@ -132,9 +131,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off. closed.set_output(COMPONENT_SIGNAL) /obj/item/circuit_component/digital_valve/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_valve) return diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index fe555a342b6..64c5064566b 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -467,8 +467,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) var/datum/port/output/direction var/obj/machinery/conveyor_switch/attached_switch -/obj/item/circuit_component/conveyor_switch/Initialize() - . = ..() +/obj/item/circuit_component/conveyor_switch/populate_ports() direction = add_output_port("Conveyor Direction", PORT_TYPE_NUMBER) /obj/item/circuit_component/conveyor_switch/get_ui_notices() @@ -485,8 +484,13 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) return ..() /obj/item/circuit_component/conveyor_switch/input_received(datum/port/input/port) - . = ..() - if(. || !attached_switch) + if(!attached_switch) + return + + INVOKE_ASYNC(src, .proc/update_conveyers, port) + +/obj/item/circuit_component/conveyor_switch/proc/update_conveyers(datum/port/input/port) + if(!attached_switch) return attached_switch.update_position() diff --git a/code/modules/wiremod/components/abstract/compare.dm b/code/modules/wiremod/components/abstract/compare.dm index ef6ba171b74..5b5e9721c07 100644 --- a/code/modules/wiremod/components/abstract/compare.dm +++ b/code/modules/wiremod/components/abstract/compare.dm @@ -21,13 +21,12 @@ var/list/datum/port/input/compare_ports = list() -/obj/item/circuit_component/compare/Initialize() - . = ..() +/obj/item/circuit_component/compare/populate_ports() for(var/port_id in 1 to input_port_amount) var/letter = ascii2text(text2ascii("A") + (port_id-1)) compare_ports += add_input_port(letter, PORT_TYPE_ANY) - load_custom_ports() + populate_custom_ports() compare = add_input_port("Compare", PORT_TYPE_SIGNAL) true = add_output_port("True", PORT_TYPE_SIGNAL) @@ -37,13 +36,10 @@ /** * Used by derivatives to load their own ports in for custom use. */ -/obj/item/circuit_component/compare/proc/load_custom_ports() +/obj/item/circuit_component/compare/proc/populate_custom_ports() return /obj/item/circuit_component/compare/input_received(datum/port/input/port) - . = ..() - if(.) - return var/logic_result = do_comparisons(compare_ports) if(COMPONENT_TRIGGERED_BY(compare, port)) diff --git a/code/modules/wiremod/components/abstract/module.dm b/code/modules/wiremod/components/abstract/module.dm index a3c04b2a11e..85948870580 100644 --- a/code/modules/wiremod/components/abstract/module.dm +++ b/code/modules/wiremod/components/abstract/module.dm @@ -68,8 +68,7 @@ /// The currently attached module var/obj/item/circuit_component/module/attached_module -/obj/item/circuit_component/module_output/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/module_output/pre_input_received(datum/port/input/port) if(!port) return // We don't check the parent here because frankly, we don't care. We only sync our input with the module's output @@ -79,8 +78,7 @@ port_to_update.set_output(port.value) -/obj/item/circuit_component/module/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/module/pre_input_received(datum/port/input/port) if(!port) return var/datum/port/output/port_to_update = linked_ports[port] diff --git a/code/modules/wiremod/components/action/light.dm b/code/modules/wiremod/components/action/light.dm index 14427eae0ec..e6ffa5b2a76 100644 --- a/code/modules/wiremod/components/action/light.dm +++ b/code/modules/wiremod/components/action/light.dm @@ -26,8 +26,7 @@ . = ..() . += create_ui_notice("Maximum Brightness: [max_power]", "orange", "lightbulb") -/obj/item/circuit_component/light/Initialize() - . = ..() +/obj/item/circuit_component/light/populate_ports() red = add_input_port("Red", PORT_TYPE_NUMBER) green = add_input_port("Green", PORT_TYPE_NUMBER) blue = add_input_port("Blue", PORT_TYPE_NUMBER) @@ -37,14 +36,13 @@ /obj/item/circuit_component/light/register_shell(atom/movable/shell) . = ..() - TRIGGER_CIRCUIT_COMPONENT(src, null) + trigger_component() /obj/item/circuit_component/light/unregister_shell(atom/movable/shell) shell.set_light_on(FALSE) return ..() -/obj/item/circuit_component/light/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/light/pre_input_received(datum/port/input/port) brightness.set_value(clamp(brightness.value || 0, 0, max_power)) red.set_value(clamp(red.value, 0, 255)) blue.set_value(clamp(blue.value, 0, 255)) @@ -52,9 +50,8 @@ var/list/hsl = rgb2hsl(red.value || 0, green.value || 0, blue.value || 0) var/list/light_col = hsl2rgb(hsl[1], hsl[2], max(min_lightness, hsl[3])) shell_light_color = rgb(light_col[1], light_col[2], light_col[3]) - if(.) - return +/obj/item/circuit_component/light/input_received(datum/port/input/port) if(parent.shell) set_atom_light(parent.shell) diff --git a/code/modules/wiremod/components/action/mmi.dm b/code/modules/wiremod/components/action/mmi.dm index 9c242059a6e..991e90a7b17 100644 --- a/code/modules/wiremod/components/action/mmi.dm +++ b/code/modules/wiremod/components/action/mmi.dm @@ -36,8 +36,7 @@ /// Maximum length of the message that can be sent to the MMI var/max_length = 300 -/obj/item/circuit_component/mmi/Initialize() - . = ..() +/obj/item/circuit_component/mmi/populate_ports() message = add_input_port("Message", PORT_TYPE_STRING) send = add_input_port("Send Message", PORT_TYPE_SIGNAL) eject = add_input_port("Eject", PORT_TYPE_SIGNAL) @@ -56,9 +55,6 @@ return ..() /obj/item/circuit_component/mmi/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!brain) return diff --git a/code/modules/wiremod/components/action/pathfind.dm b/code/modules/wiremod/components/action/pathfind.dm index 10856e0de8c..2928dd06e02 100644 --- a/code/modules/wiremod/components/action/pathfind.dm +++ b/code/modules/wiremod/components/action/pathfind.dm @@ -33,11 +33,10 @@ . += create_ui_notice("Pathfinding Cooldown: [DisplayTimeText(different_path_cooldown)]", "orange", "stopwatch") . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") -/obj/item/circuit_component/pathfind/Initialize() - . = ..() - input_X = add_input_port("Target X", PORT_TYPE_NUMBER, FALSE) - input_Y = add_input_port("Target Y", PORT_TYPE_NUMBER, FALSE) - id_card = add_input_port("ID Card", PORT_TYPE_ATOM, FALSE) +/obj/item/circuit_component/pathfind/populate_ports() + input_X = add_input_port("Target X", PORT_TYPE_NUMBER, trigger = null) + input_Y = add_input_port("Target Y", PORT_TYPE_NUMBER, trigger = null) + id_card = add_input_port("ID Card", PORT_TYPE_ATOM, trigger = null) output = add_output_port("Next step", PORT_TYPE_ATOM) finished = add_output_port("Arrived to destination", PORT_TYPE_SIGNAL) @@ -45,10 +44,9 @@ reason_failed = add_output_port("Fail reason", PORT_TYPE_STRING) /obj/item/circuit_component/pathfind/input_received(datum/port/input/port) - . = ..() - if(.) - return + INVOKE_ASYNC(src, .proc/perform_pathfinding, port) +/obj/item/circuit_component/pathfind/proc/perform_pathfinding(datum/port/input/port) var/target_X = input_X.value if(isnull(target_X)) return @@ -110,4 +108,3 @@ next_turf = get_turf(path[1]) output.set_output(next_turf) TIMER_COOLDOWN_START(parent, COOLDOWN_CIRCUIT_PATHFIND_SAME, same_path_cooldown) - diff --git a/code/modules/wiremod/components/action/pull.dm b/code/modules/wiremod/components/action/pull.dm index ecaa6bd3aaa..9e59f63e1cd 100644 --- a/code/modules/wiremod/components/action/pull.dm +++ b/code/modules/wiremod/components/action/pull.dm @@ -11,15 +11,10 @@ var/datum/port/input/target circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/pull/Initialize() - . = ..() +/obj/item/circuit_component/pull/populate_ports() target = add_input_port("Target", PORT_TYPE_ATOM) /obj/item/circuit_component/pull/input_received(datum/port/input/port) - . = ..() - if(.) - return - var/atom/target_atom = target.value if(!target_atom) return @@ -28,4 +23,4 @@ if(!istype(shell) || get_dist(shell, target_atom) > 1 || shell.z != target_atom.z) return - shell.start_pulling(target_atom) + INVOKE_ASYNC(shell, /atom/movable.proc/start_pulling, target_atom) diff --git a/code/modules/wiremod/components/action/radio.dm b/code/modules/wiremod/components/action/radio.dm index 109a7428f44..4c693277951 100644 --- a/code/modules/wiremod/components/action/radio.dm +++ b/code/modules/wiremod/components/action/radio.dm @@ -30,11 +30,10 @@ ) public_options = add_option_port("Encryption Options", component_options) -/obj/item/circuit_component/radio/Initialize() - . = ..() +/obj/item/circuit_component/radio/populate_ports() freq = add_input_port("Frequency", PORT_TYPE_NUMBER, default = FREQ_SIGNALER) code = add_input_port("Code", PORT_TYPE_NUMBER, default = DEFAULT_SIGNALER_CODE) - INVOKE_ASYNC(src, .proc/apply_signal_component) + trigger_component() // These are cleaned up on the parent trigger_input = add_input_port("Send", PORT_TYPE_SIGNAL) trigger_output = add_output_port("Received", PORT_TYPE_SIGNAL) @@ -43,19 +42,19 @@ SSradio.remove_object(src, current_freq) return ..() -/obj/item/circuit_component/radio/proc/apply_signal_component() - TRIGGER_CIRCUIT_COMPONENT(src, null) +/obj/item/circuit_component/radio/pre_input_received(datum/port/input/port) + freq.set_value(sanitize_frequency(freq.value, TRUE)) /obj/item/circuit_component/radio/input_received(datum/port/input/port) - . = ..() - freq.set_value(sanitize_frequency(freq.value, TRUE)) - if(.) - return + INVOKE_ASYNC(src, .proc/handle_radio_input, port) + +/obj/item/circuit_component/radio/proc/handle_radio_input(datum/port/input/port) var/frequency = freq.value - SSradio.remove_object(src, current_freq) - radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) - current_freq = frequency + if(frequency != current_freq) + SSradio.remove_object(src, current_freq) + radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) + current_freq = frequency if(COMPONENT_TRIGGERED_BY(trigger_input, port)) var/datum/signal/signal = new(list("code" = round(code.value) || 0, "key" = parent?.owner_id)) diff --git a/code/modules/wiremod/components/action/soundemitter.dm b/code/modules/wiremod/components/action/soundemitter.dm index 6d18978c539..c586d7777e3 100644 --- a/code/modules/wiremod/components/action/soundemitter.dm +++ b/code/modules/wiremod/components/action/soundemitter.dm @@ -27,8 +27,7 @@ . += create_ui_notice("Sound Cooldown: [DisplayTimeText(sound_cooldown)]", "orange", "stopwatch") -/obj/item/circuit_component/soundemitter/Initialize() - . = ..() +/obj/item/circuit_component/soundemitter/populate_ports() volume = add_input_port("Volume", PORT_TYPE_NUMBER, default = 35) frequency = add_input_port("Frequency", PORT_TYPE_NUMBER, default = 0) @@ -46,14 +45,11 @@ sound_file = add_option_port("Sound Option", component_options) options_map = component_options - -/obj/item/circuit_component/soundemitter/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/soundemitter/pre_input_received(datum/port/input/port) volume.set_value(clamp(volume.value, 0, 100)) frequency.set_value(clamp(frequency.value, -100, 100)) - if(.) - return +/obj/item/circuit_component/soundemitter/input_received(datum/port/input/port) if(TIMER_COOLDOWN_CHECK(parent, COOLDOWN_CIRCUIT_SOUNDEMITTER)) return diff --git a/code/modules/wiremod/components/action/speech.dm b/code/modules/wiremod/components/action/speech.dm index 6732a2058a9..7a307527a25 100644 --- a/code/modules/wiremod/components/action/speech.dm +++ b/code/modules/wiremod/components/action/speech.dm @@ -18,14 +18,10 @@ . = ..() . += create_ui_notice("Speech Cooldown: [DisplayTimeText(speech_cooldown)]", "orange", "stopwatch") -/obj/item/circuit_component/speech/Initialize() - . = ..() - message = add_input_port("Message", PORT_TYPE_STRING, FALSE) +/obj/item/circuit_component/speech/populate_ports() + message = add_input_port("Message", PORT_TYPE_STRING, trigger = null) /obj/item/circuit_component/speech/input_received(datum/port/input/port) - . = ..() - if(.) - return if(TIMER_COOLDOWN_CHECK(parent, COOLDOWN_CIRCUIT_SPEECH)) return diff --git a/code/modules/wiremod/components/admin/getvar.dm b/code/modules/wiremod/components/admin/getvar.dm index cef8341f384..b3aef78c792 100644 --- a/code/modules/wiremod/components/admin/getvar.dm +++ b/code/modules/wiremod/components/admin/getvar.dm @@ -18,17 +18,13 @@ var/datum/port/output/output_value -/obj/item/circuit_component/get_variable/Initialize() - . = ..() +/obj/item/circuit_component/get_variable/populate_ports() entity = add_input_port("Target", PORT_TYPE_ATOM) variable_name = add_input_port("Variable Name", PORT_TYPE_STRING) output_value = add_output_port("Output Value", PORT_TYPE_ANY) /obj/item/circuit_component/get_variable/input_received(datum/port/input/port) - . = ..() - if(.) - return var/atom/object = entity.value var/var_name = variable_name.value if(!var_name || !object) diff --git a/code/modules/wiremod/components/admin/proccall.dm b/code/modules/wiremod/components/admin/proccall.dm index 1349c816360..198e19d0915 100644 --- a/code/modules/wiremod/components/admin/proccall.dm +++ b/code/modules/wiremod/components/admin/proccall.dm @@ -34,8 +34,7 @@ proccall_options = add_option_port("Proccall Options", component_options) -/obj/item/circuit_component/proccall/Initialize() - . = ..() +/obj/item/circuit_component/proccall/populate_ports() entity = add_input_port("Target", PORT_TYPE_ATOM) proc_name = add_input_port("Proc Name", PORT_TYPE_STRING) arguments = add_input_port("Arguments", PORT_TYPE_LIST) @@ -43,9 +42,6 @@ output_value = add_output_port("Output Value", PORT_TYPE_ANY) /obj/item/circuit_component/proccall/input_received(datum/port/input/port) - . = ..() - if(.) - return var/called_on if(proccall_options.value == COMP_PROC_OBJECT) diff --git a/code/modules/wiremod/components/admin/sdql.dm b/code/modules/wiremod/components/admin/sdql.dm index 871c3f247ec..7677286c569 100644 --- a/code/modules/wiremod/components/admin/sdql.dm +++ b/code/modules/wiremod/components/admin/sdql.dm @@ -14,20 +14,21 @@ var/datum/port/output/results -/obj/item/circuit_component/sdql_operation/Initialize() - . = ..() +/obj/item/circuit_component/sdql_operation/populate_ports() sdql_operation = add_input_port("SDQL String", PORT_TYPE_STRING) results = add_output_port("Result", PORT_TYPE_LIST) /obj/item/circuit_component/sdql_operation/input_received(datum/port/input/port) - . = ..() - if(.) - return + if(GLOB.AdminProcCaller) + return TRUE + INVOKE_ASYNC(src, .proc/execute_sdql, port) + +/obj/item/circuit_component/sdql_operation/proc/execute_sdql(datum/port/input/port) var/operation = sdql_operation.value if(GLOB.AdminProcCaller || !operation) - return TRUE + return GLOB.AdminProcCaller = "CHAT_[parent.display_name]" //_ won't show up in ckeys so it'll never match with a real admin var/list/result = world.SDQL2_query(operation, parent.get_creator_admin(), parent.get_creator()) diff --git a/code/modules/wiremod/components/admin/setvar.dm b/code/modules/wiremod/components/admin/setvar.dm index 0c66450cc98..32c5d03147e 100644 --- a/code/modules/wiremod/components/admin/setvar.dm +++ b/code/modules/wiremod/components/admin/setvar.dm @@ -18,16 +18,12 @@ var/datum/port/input/new_value -/obj/item/circuit_component/set_variable/Initialize() - . = ..() +/obj/item/circuit_component/set_variable/populate_ports() entity = add_input_port("Target", PORT_TYPE_ATOM) variable_name = add_input_port("Variable Name", PORT_TYPE_STRING) new_value = add_input_port("New Value", PORT_TYPE_ANY) /obj/item/circuit_component/set_variable/input_received(datum/port/input/port) - . = ..() - if(.) - return var/atom/object = entity.value var/var_name = variable_name.value if(!var_name || !object) diff --git a/code/modules/wiremod/components/admin/spawn.dm b/code/modules/wiremod/components/admin/spawn.dm index 2d3697598bc..73c7325ca77 100644 --- a/code/modules/wiremod/components/admin/spawn.dm +++ b/code/modules/wiremod/components/admin/spawn.dm @@ -20,8 +20,7 @@ /// The result from the output var/datum/port/output/spawned_atom -/obj/item/circuit_component/spawn_atom/Initialize() - . = ..() +/obj/item/circuit_component/spawn_atom/populate_ports() input_path = add_input_port("Type", PORT_TYPE_ANY) spawn_at = add_input_port("Spawn At", PORT_TYPE_ATOM) parameters = add_input_port("Parameters", PORT_TYPE_LIST) @@ -29,9 +28,6 @@ spawned_atom = add_output_port("Spawned Atom", PORT_TYPE_ATOM) /obj/item/circuit_component/spawn_atom/input_received(datum/port/input/port) - . = ..() - if(.) - return var/typepath = input_path.value diff --git a/code/modules/wiremod/components/admin/to_type.dm b/code/modules/wiremod/components/admin/to_type.dm index e4a34223bb3..913588e730f 100644 --- a/code/modules/wiremod/components/admin/to_type.dm +++ b/code/modules/wiremod/components/admin/to_type.dm @@ -14,15 +14,11 @@ /// The type output var/datum/port/output/type_output -/obj/item/circuit_component/to_type/Initialize() - . = ..() +/obj/item/circuit_component/to_type/populate_ports() input_path = add_input_port("Type", PORT_TYPE_STRING) type_output = add_output_port("Typepath", PORT_TYPE_ANY) /obj/item/circuit_component/to_type/input_received(datum/port/input/port) - . = ..() - if(.) - return type_output.set_output(text2path(input_path.value)) diff --git a/code/modules/wiremod/components/atom/direction.dm b/code/modules/wiremod/components/atom/direction.dm index 140720a2d3d..75e5394982f 100644 --- a/code/modules/wiremod/components/atom/direction.dm +++ b/code/modules/wiremod/components/atom/direction.dm @@ -28,8 +28,7 @@ . = ..() . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") -/obj/item/circuit_component/direction/Initialize() - . = ..() +/obj/item/circuit_component/direction/populate_ports() input_port = add_input_port("Organism", PORT_TYPE_ATOM) output = add_output_port("Direction", PORT_TYPE_STRING) @@ -40,9 +39,6 @@ west = add_output_port("West", PORT_TYPE_SIGNAL) /obj/item/circuit_component/direction/input_received(datum/port/input/port) - . = ..() - if(.) - return var/atom/object = input_port.value if(!object) diff --git a/code/modules/wiremod/components/atom/gps.dm b/code/modules/wiremod/components/atom/gps.dm index cdf61385a0e..941046a9cb3 100644 --- a/code/modules/wiremod/components/atom/gps.dm +++ b/code/modules/wiremod/components/atom/gps.dm @@ -14,17 +14,12 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/gps/Initialize() - . = ..() - +/obj/item/circuit_component/gps/populate_ports() x_pos = add_output_port("X", PORT_TYPE_NUMBER) y_pos = add_output_port("Y", PORT_TYPE_NUMBER) z_pos = add_output_port("Z", PORT_TYPE_NUMBER) /obj/item/circuit_component/gps/input_received(datum/port/input/port) - . = ..() - if(.) - return var/turf/location = get_turf(src) diff --git a/code/modules/wiremod/components/atom/health.dm b/code/modules/wiremod/components/atom/health.dm index 7849180f9a0..5802d6d8b61 100644 --- a/code/modules/wiremod/components/atom/health.dm +++ b/code/modules/wiremod/components/atom/health.dm @@ -29,8 +29,7 @@ . = ..() . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") -/obj/item/circuit_component/health/Initialize() - . = ..() +/obj/item/circuit_component/health/populate_ports() input_port = add_input_port("Organism", PORT_TYPE_ATOM) brute = add_output_port("Brute Damage", PORT_TYPE_NUMBER) @@ -40,9 +39,6 @@ health = add_output_port("Health", PORT_TYPE_NUMBER) /obj/item/circuit_component/health/input_received(datum/port/input/port) - . = ..() - if(.) - return var/mob/living/organism = input_port.value var/turf/current_turf = get_turf(src) diff --git a/code/modules/wiremod/components/atom/hear.dm b/code/modules/wiremod/components/atom/hear.dm index 23fbba1e0a9..9baa98e7ec4 100644 --- a/code/modules/wiremod/components/atom/hear.dm +++ b/code/modules/wiremod/components/atom/hear.dm @@ -16,8 +16,7 @@ /// The trigger sent when this event occurs var/datum/port/output/trigger_port -/obj/item/circuit_component/hear/Initialize() - . = ..() +/obj/item/circuit_component/hear/populate_ports() message_port = add_output_port("Message", PORT_TYPE_STRING) language_port = add_output_port("Language", PORT_TYPE_STRING) speaker_port = add_output_port("Speaker", PORT_TYPE_ATOM) diff --git a/code/modules/wiremod/components/atom/self.dm b/code/modules/wiremod/components/atom/self.dm index 7389a19f692..1f24c875548 100644 --- a/code/modules/wiremod/components/atom/self.dm +++ b/code/modules/wiremod/components/atom/self.dm @@ -10,8 +10,7 @@ /// The shell this component is attached to. var/datum/port/output/output -/obj/item/circuit_component/self/Initialize() - . = ..() +/obj/item/circuit_component/self/populate_ports() output = add_output_port("Self", PORT_TYPE_ATOM) /obj/item/circuit_component/self/register_shell(atom/movable/shell) diff --git a/code/modules/wiremod/components/atom/species.dm b/code/modules/wiremod/components/atom/species.dm index 9404a37697e..4160e6bf8b5 100644 --- a/code/modules/wiremod/components/atom/species.dm +++ b/code/modules/wiremod/components/atom/species.dm @@ -15,16 +15,12 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/species/Initialize() - . = ..() +/obj/item/circuit_component/species/populate_ports() input_port = add_input_port("Organism", PORT_TYPE_ATOM) output = add_output_port("Species", PORT_TYPE_STRING) /obj/item/circuit_component/species/input_received(datum/port/input/port) - . = ..() - if(.) - return var/mob/living/carbon/human/human = input_port.value if(!istype(human) || !human.has_dna()) diff --git a/code/modules/wiremod/components/hud/bar_overlay.dm b/code/modules/wiremod/components/hud/bar_overlay.dm index f7ecfb1e1f1..4826d33d9b4 100644 --- a/code/modules/wiremod/components/hud/bar_overlay.dm +++ b/code/modules/wiremod/components/hud/bar_overlay.dm @@ -17,8 +17,7 @@ var/overlay_limit = 10 -/obj/item/circuit_component/object_overlay/bar/Initialize() - . = ..() +/obj/item/circuit_component/object_overlay/bar/populate_ports() bar_number = add_input_port("Number", PORT_TYPE_NUMBER) /obj/item/circuit_component/object_overlay/bar/populate_options() diff --git a/code/modules/wiremod/components/hud/counter_overlay.dm b/code/modules/wiremod/components/hud/counter_overlay.dm index ecce816e746..babd6d8e8f3 100644 --- a/code/modules/wiremod/components/hud/counter_overlay.dm +++ b/code/modules/wiremod/components/hud/counter_overlay.dm @@ -22,8 +22,7 @@ var/list/numbers = list() var/counter_appearance -/obj/item/circuit_component/counter_overlay/Initialize() - . = ..() +/obj/item/circuit_component/counter_overlay/populate_ports() counter_number = add_input_port("Displayed Number", PORT_TYPE_NUMBER) signal_update = add_input_port("Update Overlay", PORT_TYPE_SIGNAL) @@ -44,9 +43,7 @@ UnregisterSignal(shell, COMSIG_ORGAN_REMOVED) /obj/item/circuit_component/counter_overlay/input_received(datum/port/input/port) - . = ..() - - if(. || !bci) + if(!bci) return var/mob/living/owner = bci.owner diff --git a/code/modules/wiremod/components/hud/object_overlay.dm b/code/modules/wiremod/components/hud/object_overlay.dm index 2cab4a57fa4..1023cf72bc8 100644 --- a/code/modules/wiremod/components/hud/object_overlay.dm +++ b/code/modules/wiremod/components/hud/object_overlay.dm @@ -29,8 +29,7 @@ var/list/active_overlays = list() var/list/options_map -/obj/item/circuit_component/object_overlay/Initialize() - . = ..() +/obj/item/circuit_component/object_overlay/populate_ports() target = add_input_port("Target", PORT_TYPE_ATOM) signal_on = add_input_port("Create Overlay", PORT_TYPE_SIGNAL) @@ -70,9 +69,7 @@ UnregisterSignal(shell, COMSIG_ORGAN_REMOVED) /obj/item/circuit_component/object_overlay/input_received(datum/port/input/port) - . = ..() - - if(. || !bci) + if(!bci) return var/mob/living/owner = bci.owner diff --git a/code/modules/wiremod/components/hud/target_intercept.dm b/code/modules/wiremod/components/hud/target_intercept.dm index 2a19264b005..b84de0b7c43 100644 --- a/code/modules/wiremod/components/hud/target_intercept.dm +++ b/code/modules/wiremod/components/hud/target_intercept.dm @@ -16,8 +16,7 @@ var/obj/item/organ/cyberimp/bci/bci var/intercept_cooldown = 1 SECONDS -/obj/item/circuit_component/target_intercept/Initialize() - . = ..() +/obj/item/circuit_component/target_intercept/populate_ports() trigger_input = add_input_port("Activate", PORT_TYPE_SIGNAL) trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL) clicked_atom = add_output_port("Targeted Object", PORT_TYPE_ATOM) @@ -32,9 +31,7 @@ UnregisterSignal(shell, COMSIG_ORGAN_REMOVED) /obj/item/circuit_component/target_intercept/input_received(datum/port/input/port) - . = ..() - - if(. || !bci) + if(!bci) return var/mob/living/owner = bci.owner diff --git a/code/modules/wiremod/components/list/concat.dm b/code/modules/wiremod/components/list/concat.dm index 32e16758d37..9ab4e290a53 100644 --- a/code/modules/wiremod/components/list/concat.dm +++ b/code/modules/wiremod/components/list/concat.dm @@ -17,17 +17,13 @@ var/datum/port/output/output circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/concat_list/Initialize() - . = ..() +/obj/item/circuit_component/concat_list/populate_ports() list_port = add_input_port("List", PORT_TYPE_LIST) separator = add_input_port("Seperator", PORT_TYPE_STRING) output = add_output_port("Output", PORT_TYPE_STRING) /obj/item/circuit_component/concat_list/input_received(datum/port/input/port) - . = ..() - if(.) - return var/seperator = separator.value if(!seperator) diff --git a/code/modules/wiremod/components/list/get_column.dm b/code/modules/wiremod/components/list/get_column.dm index 07ff7ef11b8..8e7d5ef0364 100644 --- a/code/modules/wiremod/components/list/get_column.dm +++ b/code/modules/wiremod/components/list/get_column.dm @@ -17,16 +17,12 @@ /// The filtered list var/datum/port/output/output_list -/obj/item/circuit_component/get_column/Initialize() - . = ..() +/obj/item/circuit_component/get_column/populate_ports() received_table = add_input_port("Input", PORT_TYPE_TABLE) column_name = add_input_port("Column Name", PORT_TYPE_STRING) output_list = add_output_port("Output", PORT_TYPE_LIST) /obj/item/circuit_component/get_column/input_received(datum/port/input/port) - . = ..() - if(.) - return var/list/input_list = received_table.value if(!islist(input_list) || isnum(column_name.value)) diff --git a/code/modules/wiremod/components/list/index.dm b/code/modules/wiremod/components/list/index.dm index d51a60e2bf1..fda850f852b 100644 --- a/code/modules/wiremod/components/list/index.dm +++ b/code/modules/wiremod/components/list/index.dm @@ -15,17 +15,13 @@ var/datum/port/output/output circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/index/Initialize() - . = ..() +/obj/item/circuit_component/index/populate_ports() index_port = add_input_port("Index", PORT_TYPE_ANY) list_port = add_input_port("List", PORT_TYPE_LIST) output = add_output_port("Value", PORT_TYPE_ANY) /obj/item/circuit_component/index/input_received(datum/port/input/port) - . = ..() - if(.) - return var/index = index_port.value var/list/list_input = list_port.value diff --git a/code/modules/wiremod/components/list/index_table.dm b/code/modules/wiremod/components/list/index_table.dm index 376bc464655..eb9a10f45cc 100644 --- a/code/modules/wiremod/components/list/index_table.dm +++ b/code/modules/wiremod/components/list/index_table.dm @@ -17,17 +17,13 @@ /// The filtered list var/datum/port/output/output_list -/obj/item/circuit_component/index_table/Initialize() - . = ..() +/obj/item/circuit_component/index_table/populate_ports() received_table = add_input_port("Input", PORT_TYPE_TABLE) target_index = add_input_port("Index", PORT_TYPE_NUMBER) output_list = add_output_port("Output", PORT_TYPE_LIST) /obj/item/circuit_component/index_table/input_received(datum/port/input/port) - . = ..() - if(.) - return var/list/target_list = received_table.value if(!islist(target_list) || !length(target_list)) diff --git a/code/modules/wiremod/components/list/list_literal.dm b/code/modules/wiremod/components/list/list_literal.dm index e9bd7416066..70647c75819 100644 --- a/code/modules/wiremod/components/list/list_literal.dm +++ b/code/modules/wiremod/components/list/list_literal.dm @@ -49,10 +49,9 @@ var/index = length(input_ports) if(trigger_input) index -= 1 - entry_ports += add_input_port("Index [index+1]", PORT_TYPE_ANY, index = index+1) + entry_ports += add_input_port("Index [index+1]", PORT_TYPE_ANY) -/obj/item/circuit_component/list_literal/Initialize() - . = ..() +/obj/item/circuit_component/list_literal/populate_ports() set_list_size(default_list_size) list_output = add_output_port("Value", PORT_TYPE_LIST) @@ -73,9 +72,6 @@ balloon_alert(user, "new size is now [length]") /obj/item/circuit_component/list_literal/input_received(datum/port/input/port) - . = ..() - if(.) - return var/list/new_literal = list() for(var/datum/port/input/entry_port as anything in entry_ports) diff --git a/code/modules/wiremod/components/list/select.dm b/code/modules/wiremod/components/list/select.dm index 8eba84d034e..0f0bd534945 100644 --- a/code/modules/wiremod/components/list/select.dm +++ b/code/modules/wiremod/components/list/select.dm @@ -35,18 +35,15 @@ ) comparison_options = add_option_port("Comparison Options", component_options) -/obj/item/circuit_component/select/Initialize() - . = ..() +/obj/item/circuit_component/select/populate_ports() received_table = add_input_port("Input", PORT_TYPE_TABLE) column_name = add_input_port("Column Name", PORT_TYPE_STRING) comparison_input = add_input_port("Comparison Input", PORT_TYPE_ANY) filtered_table = add_output_port("Output", PORT_TYPE_TABLE) -/obj/item/circuit_component/select/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/select/pre_input_received(datum/port/input/port) var/current_option = comparison_options.value - switch(current_option) if(COMP_COMPARISON_EQUAL, COMP_COMPARISON_NOT_EQUAL) if(current_type != PORT_TYPE_ANY) @@ -57,9 +54,9 @@ current_type = PORT_TYPE_NUMBER comparison_input.set_datatype(PORT_TYPE_NUMBER) - if(.) - return +/obj/item/circuit_component/select/input_received(datum/port/input/port) + var/current_option = comparison_options.value var/list/input_list = received_table.value if(!islist(input_list) || isnum(column_name.value)) return diff --git a/code/modules/wiremod/components/list/split.dm b/code/modules/wiremod/components/list/split.dm index 27af366faca..c3d870e4514 100644 --- a/code/modules/wiremod/components/list/split.dm +++ b/code/modules/wiremod/components/list/split.dm @@ -18,16 +18,12 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/split/Initialize() - . = ..() +/obj/item/circuit_component/split/populate_ports() input_port = add_input_port("Input", PORT_TYPE_STRING) separator = add_input_port("Seperator", PORT_TYPE_STRING) output = add_output_port("Output", PORT_TYPE_LIST) /obj/item/circuit_component/split/input_received(datum/port/input/port) - . = ..() - if(.) - return var/separator_value = separator.value if(isnull(separator_value)) diff --git a/code/modules/wiremod/components/math/arithmetic.dm b/code/modules/wiremod/components/math/arithmetic.dm index 77c8b93b25e..ab742af33cb 100644 --- a/code/modules/wiremod/components/math/arithmetic.dm +++ b/code/modules/wiremod/components/math/arithmetic.dm @@ -37,8 +37,7 @@ ) arithmetic_option = add_option_port("Arithmetic Option", component_options) -/obj/item/circuit_component/arithmetic/Initialize() - . = ..() +/obj/item/circuit_component/arithmetic/populate_ports() arithmetic_ports = list() for(var/port_id in 1 to input_port_amount) var/letter = ascii2text(text2ascii("A") + (port_id-1)) @@ -47,9 +46,6 @@ output = add_output_port("Output", PORT_TYPE_NUMBER) /obj/item/circuit_component/arithmetic/input_received(datum/port/input/port) - . = ..() - if(.) - return var/list/ports = arithmetic_ports.Copy() var/datum/port/input/first_port = popleft(ports) diff --git a/code/modules/wiremod/components/math/comparison.dm b/code/modules/wiremod/components/math/comparison.dm index 0415b04568c..4ae23452858 100644 --- a/code/modules/wiremod/components/math/comparison.dm +++ b/code/modules/wiremod/components/math/comparison.dm @@ -23,7 +23,7 @@ ) comparison_option = add_option_port("Comparison Option", component_options) -/obj/item/circuit_component/compare/comparison/input_received(datum/port/input/port) +/obj/item/circuit_component/compare/comparison/pre_input_received(datum/port/input/port) switch(comparison_option.value) if(COMP_COMPARISON_EQUAL, COMP_COMPARISON_NOT_EQUAL) if(current_type != PORT_TYPE_ANY) @@ -35,7 +35,6 @@ current_type = PORT_TYPE_NUMBER compare_ports[1].set_datatype(PORT_TYPE_NUMBER) compare_ports[2].set_datatype(PORT_TYPE_NUMBER) - return ..() /obj/item/circuit_component/compare/comparison/do_comparisons(list/ports) diff --git a/code/modules/wiremod/components/math/length.dm b/code/modules/wiremod/components/math/length.dm index d6702c9b5d9..019e040358a 100644 --- a/code/modules/wiremod/components/math/length.dm +++ b/code/modules/wiremod/components/math/length.dm @@ -14,16 +14,12 @@ var/datum/port/output/output circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/length/Initialize() - . = ..() +/obj/item/circuit_component/length/populate_ports() input_port = add_input_port("Input", PORT_TYPE_ANY) output = add_output_port("Length", PORT_TYPE_NUMBER) /obj/item/circuit_component/length/input_received(datum/port/input/port) - . = ..() - if(.) - return output.set_output(length(input_port.value)) diff --git a/code/modules/wiremod/components/math/not.dm b/code/modules/wiremod/components/math/not.dm index 6a55024b54c..92862fba423 100644 --- a/code/modules/wiremod/components/math/not.dm +++ b/code/modules/wiremod/components/math/not.dm @@ -14,16 +14,12 @@ var/datum/port/output/result circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/not/Initialize() - . = ..() +/obj/item/circuit_component/not/populate_ports() input_port = add_input_port("Input", PORT_TYPE_ANY) result = add_output_port("Result", PORT_TYPE_NUMBER) /obj/item/circuit_component/not/input_received(datum/port/input/port) - . = ..() - if(.) - return result.set_output(!input_port.value) diff --git a/code/modules/wiremod/components/math/random.dm b/code/modules/wiremod/components/math/random.dm index 548376ed8d9..9838e6d41b6 100644 --- a/code/modules/wiremod/components/math/random.dm +++ b/code/modules/wiremod/components/math/random.dm @@ -17,17 +17,13 @@ /// The result from the output var/datum/port/output/output -/obj/item/circuit_component/random/Initialize() - . = ..() - minimum = add_input_port("Minimum", PORT_TYPE_NUMBER, FALSE) - maximum = add_input_port("Maximum", PORT_TYPE_NUMBER, FALSE) +/obj/item/circuit_component/random/populate_ports() + minimum = add_input_port("Minimum", PORT_TYPE_NUMBER, trigger = null) + maximum = add_input_port("Maximum", PORT_TYPE_NUMBER, trigger = null) output = add_output_port("Output", PORT_TYPE_NUMBER) /obj/item/circuit_component/random/input_received(datum/port/input/port) - . = ..() - if(.) - return var/min_val = minimum.value || 0 var/max_val = maximum.value || 0 diff --git a/code/modules/wiremod/components/ntnet/ntnet_receive.dm b/code/modules/wiremod/components/ntnet/ntnet_receive.dm index 0bcb1c5ed00..17083fbb753 100644 --- a/code/modules/wiremod/components/ntnet/ntnet_receive.dm +++ b/code/modules/wiremod/components/ntnet/ntnet_receive.dm @@ -20,8 +20,7 @@ var/datum/port/input/option/data_type_options var/datum/port/input/option/secondary_data_type_options -/obj/item/circuit_component/ntnet_receive/Initialize() - . = ..() +/obj/item/circuit_component/ntnet_receive/populate_ports() data_package = add_output_port("Data Package", PORT_TYPE_ANY) secondary_package = add_output_port("Secondary Package", PORT_TYPE_ANY) enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) @@ -39,9 +38,6 @@ secondary_data_type_options = add_option_port("Secondary Data Type", component_options) /obj/item/circuit_component/ntnet_receive/input_received(datum/port/input/port) - . = ..() - if(.) - return if(COMPONENT_TRIGGERED_BY(data_type_options, port)) data_package.set_datatype(data_type_options.value) diff --git a/code/modules/wiremod/components/ntnet/ntnet_send.dm b/code/modules/wiremod/components/ntnet/ntnet_send.dm index 33d9370fae3..fe32d0491e5 100644 --- a/code/modules/wiremod/components/ntnet/ntnet_send.dm +++ b/code/modules/wiremod/components/ntnet/ntnet_send.dm @@ -16,14 +16,10 @@ var/datum/port/input/secondary_package var/datum/port/input/enc_key -/obj/item/circuit_component/ntnet_send/Initialize() - . = ..() +/obj/item/circuit_component/ntnet_send/populate_ports() data_package = add_input_port("Data Package", PORT_TYPE_ANY) secondary_package = add_input_port("Secondary Package", PORT_TYPE_ANY) enc_key = add_input_port("Encryption Key", PORT_TYPE_STRING) /obj/item/circuit_component/ntnet_send/input_received(datum/port/input/port) - . = ..() - if(.) - return ntnet_send(list("data" = data_package.value, "data_secondary" = secondary_package.value, "enc_key" = enc_key.value)) diff --git a/code/modules/wiremod/components/sensors/pressuresensor.dm b/code/modules/wiremod/components/sensors/pressuresensor.dm index 25f39b9c8e4..615f0b2bade 100644 --- a/code/modules/wiremod/components/sensors/pressuresensor.dm +++ b/code/modules/wiremod/components/sensors/pressuresensor.dm @@ -12,14 +12,10 @@ /// The result from the output var/datum/port/output/result -/obj/item/circuit_component/pressuresensor/Initialize() - . = ..() +/obj/item/circuit_component/pressuresensor/populate_ports() result = add_output_port("Result", PORT_TYPE_NUMBER) /obj/item/circuit_component/pressuresensor/input_received(datum/port/input/port) - . = ..() - if(.) - return //Get current turf var/turf/location = get_turf(src) if(!location) diff --git a/code/modules/wiremod/components/sensors/tempsensor.dm b/code/modules/wiremod/components/sensors/tempsensor.dm index bb2410ce77d..9de9a7b6adf 100644 --- a/code/modules/wiremod/components/sensors/tempsensor.dm +++ b/code/modules/wiremod/components/sensors/tempsensor.dm @@ -12,14 +12,10 @@ /// The result from the output var/datum/port/output/result -/obj/item/circuit_component/tempsensor/Initialize() - . = ..() +/obj/item/circuit_component/tempsensor/populate_ports() result = add_output_port("Result", PORT_TYPE_NUMBER) /obj/item/circuit_component/tempsensor/input_received(datum/port/input/port) - . = ..() - if(.) - return //Get current turf var/turf/location = get_turf(src) if(!location) diff --git a/code/modules/wiremod/components/string/concat.dm b/code/modules/wiremod/components/string/concat.dm index 55dd5530a1c..8b7db5fbf15 100644 --- a/code/modules/wiremod/components/string/concat.dm +++ b/code/modules/wiremod/components/string/concat.dm @@ -10,28 +10,23 @@ /// The amount of input ports to have var/input_port_amount = 4 + var/list/datum/port/input/concat_ports = list() + /// The result from the output var/datum/port/output/output circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/concat/Initialize() - . = ..() +/obj/item/circuit_component/concat/populate_ports() for(var/port_id in 1 to input_port_amount) var/letter = ascii2text(text2ascii("A") + (port_id-1)) - add_input_port(letter, PORT_TYPE_STRING) + concat_ports += add_input_port(letter, PORT_TYPE_STRING) output = add_output_port("Output", PORT_TYPE_STRING) /obj/item/circuit_component/concat/input_received(datum/port/input/port) - . = ..() - if(.) - return var/result = "" - var/list/ports = input_ports.Copy() - ports -= trigger_input - - for(var/datum/port/input/input_port as anything in ports) + for(var/datum/port/input/input_port as anything in concat_ports) var/value = input_port.value if(isnull(value)) continue diff --git a/code/modules/wiremod/components/string/contains.dm b/code/modules/wiremod/components/string/contains.dm index 61b5e0ca22e..ea08db73c4d 100644 --- a/code/modules/wiremod/components/string/contains.dm +++ b/code/modules/wiremod/components/string/contains.dm @@ -12,7 +12,7 @@ var/datum/port/input/needle var/datum/port/input/haystack -/obj/item/circuit_component/compare/contains/load_custom_ports() +/obj/item/circuit_component/compare/contains/populate_custom_ports() needle = add_input_port("Needle", PORT_TYPE_STRING) haystack = add_input_port("Haystack", PORT_TYPE_STRING) diff --git a/code/modules/wiremod/components/string/textcase.dm b/code/modules/wiremod/components/string/textcase.dm index a0210744334..14434c08bab 100644 --- a/code/modules/wiremod/components/string/textcase.dm +++ b/code/modules/wiremod/components/string/textcase.dm @@ -27,15 +27,11 @@ ) textcase_options = add_option_port("Textcase Options", component_options) -/obj/item/circuit_component/textcase/Initialize() - . = ..() +/obj/item/circuit_component/textcase/populate_ports() input_port = add_input_port("Input", PORT_TYPE_STRING) output = add_output_port("Output", PORT_TYPE_STRING) /obj/item/circuit_component/textcase/input_received(datum/port/input/port) - . = ..() - if(.) - return var/value = input_port.value if(isnull(value)) diff --git a/code/modules/wiremod/components/string/tonumber.dm b/code/modules/wiremod/components/string/tonumber.dm index 6012ab339d1..4a27aec001a 100644 --- a/code/modules/wiremod/components/string/tonumber.dm +++ b/code/modules/wiremod/components/string/tonumber.dm @@ -15,15 +15,10 @@ circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL -/obj/item/circuit_component/tonumber/Initialize() - . = ..() +/obj/item/circuit_component/tonumber/populate_ports() input_port = add_input_port("Input", PORT_TYPE_STRING) - output = add_output_port("Output", PORT_TYPE_NUMBER) /obj/item/circuit_component/tonumber/input_received(datum/port/input/port) - . = ..() - if(.) - return output.set_output(text2num(input_port.value)) diff --git a/code/modules/wiremod/components/string/tostring.dm b/code/modules/wiremod/components/string/tostring.dm index f7dbea77960..9ceeeef03db 100644 --- a/code/modules/wiremod/components/string/tostring.dm +++ b/code/modules/wiremod/components/string/tostring.dm @@ -17,16 +17,11 @@ var/max_range = 7 -/obj/item/circuit_component/tostring/Initialize() - . = ..() +/obj/item/circuit_component/tostring/populate_ports() input_port = add_input_port("Input", PORT_TYPE_ANY) - output = add_output_port("Output", PORT_TYPE_STRING) /obj/item/circuit_component/tostring/input_received(datum/port/input/port) - . = ..() - if(.) - return var/value = input_port.value if(isatom(value)) diff --git a/code/modules/wiremod/components/utility/clock.dm b/code/modules/wiremod/components/utility/clock.dm index 4c570b0ec5e..a876f09d043 100644 --- a/code/modules/wiremod/components/utility/clock.dm +++ b/code/modules/wiremod/components/utility/clock.dm @@ -17,16 +17,12 @@ . = ..() . += create_ui_notice("Clock Interval: [DisplayTimeText(COMP_CLOCK_DELAY)]", "orange", "clock") -/obj/item/circuit_component/clock/Initialize() - . = ..() +/obj/item/circuit_component/clock/populate_ports() on = add_input_port("On", PORT_TYPE_NUMBER) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) /obj/item/circuit_component/clock/input_received(datum/port/input/port) - . = ..() - if(.) - return if(on.value) start_process() diff --git a/code/modules/wiremod/components/utility/delay.dm b/code/modules/wiremod/components/utility/delay.dm index 37fa5a79f64..3319cdf148b 100644 --- a/code/modules/wiremod/components/utility/delay.dm +++ b/code/modules/wiremod/components/utility/delay.dm @@ -18,17 +18,13 @@ /// The output of the signal var/datum/port/output/output -/obj/item/circuit_component/delay/Initialize() - . = ..() - delay_amount = add_input_port("Delay", PORT_TYPE_NUMBER, FALSE) +/obj/item/circuit_component/delay/populate_ports() + delay_amount = add_input_port("Delay", PORT_TYPE_NUMBER, trigger = null) trigger = add_input_port("Trigger", PORT_TYPE_SIGNAL) output = add_output_port("Result", PORT_TYPE_SIGNAL) /obj/item/circuit_component/delay/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!COMPONENT_TRIGGERED_BY(trigger, port)) return diff --git a/code/modules/wiremod/components/utility/getter.dm b/code/modules/wiremod/components/utility/getter.dm index 7bca3083da0..9c1b1cdc896 100644 --- a/code/modules/wiremod/components/utility/getter.dm +++ b/code/modules/wiremod/components/utility/getter.dm @@ -26,14 +26,10 @@ variable_name.possible_options = null return ..() -/obj/item/circuit_component/getter/Initialize() - . = ..() +/obj/item/circuit_component/getter/populate_ports() value = add_output_port("Value", PORT_TYPE_ANY) -/obj/item/circuit_component/getter/input_received(datum/port/input/port) - . = ..() - // We don't care much about the parent's return value. We only care if the parent exists - // since this should never really fail. +/obj/item/circuit_component/getter/pre_input_received(datum/port/input/port) if(!parent) return diff --git a/code/modules/wiremod/components/utility/router.dm b/code/modules/wiremod/components/utility/router.dm index 4086392f5bc..bcfc61be225 100644 --- a/code/modules/wiremod/components/utility/router.dm +++ b/code/modules/wiremod/components/utility/router.dm @@ -35,8 +35,7 @@ ) router_options = add_option_port("Router Options", component_options) -/obj/item/circuit_component/router/Initialize() - . = ..() +/obj/item/circuit_component/router/populate_ports() current_type = router_options.value if(input_port_amount > 1) input_selector = add_input_port("Input Selector", PORT_TYPE_NUMBER, default = 1) @@ -61,8 +60,7 @@ // If I is in range, L[I]. If I is out of range, wrap around. #define WRAPACCESS(L, I) L[(((I||1)-1)%length(L)+length(L))%length(L)+1] -/obj/item/circuit_component/router/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/router/pre_input_received(datum/port/input/port) var/current_option = router_options.value if(current_type != current_option) current_type = current_option @@ -70,8 +68,8 @@ input.set_datatype(current_type) for(var/datum/port/output/output as anything in outs) output.set_datatype(current_type) - if(.) - return + +/obj/item/circuit_component/router/input_received(datum/port/input/port) var/datum/port/input/input = WRAPACCESS(ins, input_selector ? input_selector.value : 1) var/datum/port/output/output = WRAPACCESS(outs, output_selector ? output_selector.value : 1) output.set_output(input.value) diff --git a/code/modules/wiremod/components/utility/setter.dm b/code/modules/wiremod/components/utility/setter.dm index 614e7007981..0edf8554d05 100644 --- a/code/modules/wiremod/components/utility/setter.dm +++ b/code/modules/wiremod/components/utility/setter.dm @@ -30,13 +30,33 @@ variable_name.possible_options = null return ..() -/obj/item/circuit_component/setter/Initialize() - . = ..() +/obj/item/circuit_component/setter/populate_ports() input_port = add_input_port("Input", PORT_TYPE_ANY) trigger = add_input_port("Store", PORT_TYPE_SIGNAL) +/obj/item/circuit_component/setter/pre_input_received(datum/port/input/port) + var/datum/circuit_variable/variable = get_variable() + if(!variable) + return + + if(variable.datatype != current_type) + current_type = variable.datatype + input_port.set_datatype(current_type) + +/obj/item/circuit_component/setter/should_receive_input(datum/port/input/port) + if(!COMPONENT_TRIGGERED_BY(trigger, port)) + return FALSE + return ..() + + /obj/item/circuit_component/setter/input_received(datum/port/input/port) - . = ..() + var/datum/circuit_variable/variable = get_variable() + if(!variable) + return + + variable.set_value(input_port.value) + +/obj/item/circuit_component/setter/proc/get_variable() var/variable_string = variable_name.value if(!variable_string) return @@ -45,14 +65,4 @@ if(!variable) return - if(variable.datatype != current_type) - current_type = variable.datatype - input_port.set_datatype(current_type) - - if(.) - return - - if(!COMPONENT_TRIGGERED_BY(trigger, port)) - return TRUE - - variable.set_value(input_port.value) + return variable diff --git a/code/modules/wiremod/components/utility/typecast.dm b/code/modules/wiremod/components/utility/typecast.dm index ee204c332ea..79be018e111 100644 --- a/code/modules/wiremod/components/utility/typecast.dm +++ b/code/modules/wiremod/components/utility/typecast.dm @@ -16,8 +16,7 @@ var/current_type -/obj/item/circuit_component/typecast/Initialize() - . = ..() +/obj/item/circuit_component/typecast/populate_ports() current_type = typecast_options.value input_value = add_input_port("Input", PORT_TYPE_ANY) output_value = add_output_port("Output", current_type) @@ -31,16 +30,15 @@ ) typecast_options = add_option_port("Typecast Options", component_options) -/obj/item/circuit_component/typecast/input_received(datum/port/input/port) - . = ..() +/obj/item/circuit_component/typecast/pre_input_received(datum/port/input/port) var/current_option = typecast_options.value if(current_type != current_option) current_type = current_option output_value.set_datatype(current_type) - if(.) - return +/obj/item/circuit_component/typecast/input_received(datum/port/input/port) + var/current_option = typecast_options.value var/value = input_value.value var/value_to_set = null switch(current_option) diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 0939debc3cf..c4b1a159eb0 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -52,24 +52,25 @@ /obj/item/circuit_component/proc/populate_options() return +/// Called when the rest of the ports should be set up +/obj/item/circuit_component/proc/populate_ports() + return + /// Extension of add_input_port. Simplifies the code to make an option port to reduce boilerplate -/obj/item/circuit_component/proc/add_option_port(name, list/list_to_use) - return add_input_port(name, PORT_TYPE_OPTION, port_type = /datum/port/input/option, extra_args = list("possible_options" = list_to_use)) +/obj/item/circuit_component/proc/add_option_port(name, list/list_to_use, order = 0, trigger = .proc/input_received) + return add_input_port(name, PORT_TYPE_OPTION, order = order, trigger = trigger, port_type = /datum/port/input/option, extra_args = list("possible_options" = list_to_use)) /obj/item/circuit_component/Initialize() . = ..() if(name == COMPONENT_DEFAULT_NAME) name = "[lowertext(display_name)] [COMPONENT_DEFAULT_NAME]" populate_options() - - return INITIALIZE_HINT_LATELOAD - -/obj/item/circuit_component/LateInitialize() - . = ..() + populate_ports() if(circuit_flags & CIRCUIT_FLAG_INPUT_SIGNAL) - trigger_input = add_input_port("Trigger", PORT_TYPE_SIGNAL) + trigger_input = add_input_port("Trigger", PORT_TYPE_SIGNAL, order = 2) if(circuit_flags & CIRCUIT_FLAG_OUTPUT_SIGNAL) - trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL) + trigger_output = add_output_port("Triggered", PORT_TYPE_SIGNAL, order = 2) + /obj/item/circuit_component/Destroy() if(parent) @@ -125,16 +126,14 @@ * * type - The datatype it handles * * trigger - Whether this input port triggers an update on the component when updated. */ -/obj/item/circuit_component/proc/add_input_port(name, type, trigger = TRUE, default = null, index = null, port_type = /datum/port/input, extra_args = null) +/obj/item/circuit_component/proc/add_input_port(name, type, order = 1, trigger = .proc/input_received, default = null, port_type = /datum/port/input, extra_args = null) var/list/arguments = list(src) arguments += args if(extra_args) arguments += extra_args var/datum/port/input/input_port = new port_type(arglist(arguments)) - if(index) - input_ports.Insert(index, input_port) - else - input_ports += input_port + input_ports += input_port + sortTim(input_ports, /proc/cmp_port_order_asc) if(parent) SStgui.update_uis(parent) return input_port @@ -158,11 +157,12 @@ * * name - The name of the output port * * type - The datatype it handles. */ -/obj/item/circuit_component/proc/add_output_port(name, type) +/obj/item/circuit_component/proc/add_output_port(name, type, order = 1) var/list/arguments = list(src) arguments += args var/datum/port/output/output_port = new(arglist(arguments)) output_ports += output_port + sortTim(output_ports, /proc/cmp_port_order_asc) return output_port /** @@ -177,29 +177,81 @@ if(parent) SStgui.update_uis(parent) + /** * Called whenever an input is received from one of the ports. * - * Return value indicates that the circuit should not do anything. Also prevents an output signal. + * Return value indicates whether the trigger was successful or not. * Arguments: * * port - Can be null. The port that sent the input */ -/obj/item/circuit_component/proc/input_received(datum/port/input/port) - SHOULD_CALL_PARENT(TRUE) +/obj/item/circuit_component/proc/trigger_component(datum/port/input/port) + SHOULD_NOT_SLEEP(TRUE) + pre_input_received(port) + if(!should_receive_input(port)) + return FALSE + + var/result + if(port) + var/proc_to_call = port.trigger + if(!proc_to_call) + return FALSE + result = call(src, proc_to_call)(port) + else + result = input_received() + + if(result) + return FALSE + + if(circuit_flags & CIRCUIT_FLAG_OUTPUT_SIGNAL) + trigger_output.set_output(COMPONENT_SIGNAL) + return TRUE + + +/** + * Called whether this circuit component should receive an input. + * If this returns false, the proc that is supposed to be triggered will not be called and an output signal will not be sent. + * This is to only return false if flow of execution should be stopped because something bad has happened (e.g. no power) + * Returning no value in input_received() is not an issue because it means flow of execution will continue even if the component failed to execute properly. + * + * Return value indicates whether or not + * Arguments: + * * port - Can be null. The port that sent the input + */ +/obj/item/circuit_component/proc/should_receive_input(datum/port/input/port) + SHOULD_NOT_SLEEP(TRUE) if(!parent?.on) - return TRUE + return FALSE if(!parent.admin_only) if(circuit_flags & CIRCUIT_FLAG_ADMIN) message_admins("[display_name] tried to execute on [parent.get_creator_admin()] that has admin_only set to 0") - return TRUE + return FALSE var/obj/item/stock_parts/cell/cell = parent.get_cell() if(!cell?.use(power_usage_per_input)) - return TRUE + return FALSE if((circuit_flags & CIRCUIT_FLAG_INPUT_SIGNAL) && !COMPONENT_TRIGGERED_BY(trigger_input, port)) - return TRUE + return FALSE + + return TRUE + +/// Called before input_received and should_receive_input. Used to perform behaviour that shouldn't care whether the input should be received or not. +/obj/item/circuit_component/proc/pre_input_received(datum/port/input/port) + SHOULD_NOT_SLEEP(TRUE) + return + +/** + * Called from trigger_component. General component behaviour should go in this proc. This is the default proc that is called if no trigger proc is specified. + * + * Return value indicates that the circuit should not send an output signal. + * Arguments: + * * port - Can be null. The port that sent the input + */ +/obj/item/circuit_component/proc/input_received(datum/port/input/port) + SHOULD_NOT_SLEEP(TRUE) + return /// Called when this component is about to be added to an integrated_circuit. /obj/item/circuit_component/proc/add_to(obj/item/integrated_circuit/added_to) diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index f69caa75425..ba2293be839 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) attached_component.register_shell(shell) // Their input ports may be updated with user values, but the outputs haven't updated // because on is FALSE - TRIGGER_CIRCUIT_COMPONENT(attached_component, null) + attached_component.trigger_component() /** * Unregisters the current shell attached to this circuit. diff --git a/code/modules/wiremod/core/port.dm b/code/modules/wiremod/core/port.dm index a58016743fe..732dda9efd3 100644 --- a/code/modules/wiremod/core/port.dm +++ b/code/modules/wiremod/core/port.dm @@ -22,13 +22,17 @@ /// The port color. If unset, appears as blue. var/color -/datum/port/New(obj/item/circuit_component/to_connect, name, datatype) + /// The weight of the port. Determines the + var/order = 1 + +/datum/port/New(obj/item/circuit_component/to_connect, name, datatype, order = 1) if(!to_connect) qdel(src) return . = ..() connected_component = to_connect src.name = name + src.order = order set_datatype(datatype) /datum/port/Destroy(force) @@ -58,7 +62,7 @@ return set_value(value) if(trigger) - TRIGGER_CIRCUIT_COMPONENT(connected_component, src) + connected_component.trigger_component(src) /datum/port/output/proc/set_output(value) set_value(value) @@ -150,16 +154,17 @@ * and keeps its value equal to the last such signal received. */ /datum/port/input - /// Whether this port triggers an update whenever an output is received. - var/trigger = FALSE + /// The proc that this trigger will call on the connected component. + var/trigger /// The ports this port is wired to. var/list/datum/port/output/connected_ports -/datum/port/input/New(obj/item/circuit_component/to_connect, name, datatype, trigger, default) +/datum/port/input/New(obj/item/circuit_component/to_connect, name, datatype, order = 1, trigger = null, default = null) . = ..() set_value(default) - src.trigger = trigger + if(trigger) + src.trigger = trigger src.connected_ports = list() /** diff --git a/code/modules/wiremod/core/variable.dm b/code/modules/wiremod/core/variable.dm index 62d5239ade2..03fac9ac457 100644 --- a/code/modules/wiremod/core/variable.dm +++ b/code/modules/wiremod/core/variable.dm @@ -38,7 +38,7 @@ /datum/circuit_variable/proc/set_value(new_value) value = new_value for(var/obj/item/circuit_component/component as anything in listeners) - TRIGGER_CIRCUIT_COMPONENT(component, null) + component.trigger_component() /// Adds a listener to receive inputs when the variable has a value that is set. /datum/circuit_variable/proc/add_listener(obj/item/circuit_component/to_add) diff --git a/code/modules/wiremod/shell/airlock.dm b/code/modules/wiremod/shell/airlock.dm index b44bb40d02e..34e6cf7b20f 100644 --- a/code/modules/wiremod/shell/airlock.dm +++ b/code/modules/wiremod/shell/airlock.dm @@ -64,8 +64,7 @@ /// Called when the airlock is unbolted var/datum/port/output/unbolted -/obj/item/circuit_component/airlock/Initialize() - . = ..() +/obj/item/circuit_component/airlock/populate_ports() // Input Signals bolt = add_input_port("Bolt", PORT_TYPE_SIGNAL) unbolt = add_input_port("Unbolt", PORT_TYPE_SIGNAL) @@ -116,9 +115,6 @@ closed.set_output(COMPONENT_SIGNAL) /obj/item/circuit_component/airlock/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_airlock) return diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm index f3c9fcae8d9..45285ac47d5 100644 --- a/code/modules/wiremod/shell/bot.dm +++ b/code/modules/wiremod/shell/bot.dm @@ -30,8 +30,7 @@ /// The user who used the bot var/datum/port/output/entity -/obj/item/circuit_component/bot/Initialize() - . = ..() +/obj/item/circuit_component/bot/populate_ports() entity = add_output_port("User", PORT_TYPE_ATOM) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index d00166fb0cc..7dc38f8cc16 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -119,11 +119,6 @@ QDEL_NULL(bci_action) /obj/item/circuit_component/bci_action/input_received(datum/port/input/port) - . = ..() - - if (.) - return - if (!isnull(bci_action)) update_action() @@ -167,8 +162,7 @@ var/datum/weakref/user -/obj/item/circuit_component/bci_core/Initialize() - . = ..() +/obj/item/circuit_component/bci_core/populate_ports() message = add_input_port("Message", PORT_TYPE_STRING) send_message_signal = add_input_port("Send Message", PORT_TYPE_SIGNAL) @@ -199,24 +193,24 @@ COMSIG_ORGAN_REMOVED, )) +/obj/item/circuit_component/bci_core/should_receive_input(datum/port/input/port) + if (!COMPONENT_TRIGGERED_BY(send_message_signal, port)) + return FALSE + return ..() + /obj/item/circuit_component/bci_core/input_received(datum/port/input/port) - . = ..() - if (.) - return . + var/sent_message = trim(message.value) + if (!sent_message) + return - if (COMPONENT_TRIGGERED_BY(send_message_signal, port)) - var/sent_message = trim(message.value) - if (!sent_message) - return + var/mob/living/carbon/resolved_owner = user?.resolve() + if (isnull(resolved_owner)) + return - var/mob/living/carbon/resolved_owner = user?.resolve() - if (isnull(resolved_owner)) - return + if (resolved_owner.stat == DEAD) + return - if (resolved_owner.stat == DEAD) - return - - to_chat(resolved_owner, "You hear a strange, robotic voice in your head... \"[span_robot("[html_encode(sent_message)]")]\"") + to_chat(resolved_owner, "You hear a strange, robotic voice in your head... \"[span_robot("[html_encode(sent_message)]")]\"") /obj/item/circuit_component/bci_core/proc/on_organ_implanted(datum/source, mob/living/carbon/owner) SIGNAL_HANDLER diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm index d5fe33e2858..9bed3d873c2 100644 --- a/code/modules/wiremod/shell/compact_remote.dm +++ b/code/modules/wiremod/shell/compact_remote.dm @@ -29,8 +29,7 @@ /// The user who used the bot var/datum/port/output/entity -/obj/item/circuit_component/compact_remote/Initialize() - . = ..() +/obj/item/circuit_component/compact_remote/populate_ports() entity = add_output_port("User", PORT_TYPE_ATOM) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index d3af0ca88e8..7acf824e8b6 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -33,8 +33,7 @@ /// The entity output var/datum/port/output/entity -/obj/item/circuit_component/controller/Initialize() - . = ..() +/obj/item/circuit_component/controller/populate_ports() entity = add_output_port("User", PORT_TYPE_ATOM) signal = add_output_port("Signal", PORT_TYPE_SIGNAL) alt = add_output_port("Alternate Signal", PORT_TYPE_SIGNAL) diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm index d091f20b65f..1c90ea0a0bc 100644 --- a/code/modules/wiremod/shell/drone.dm +++ b/code/modules/wiremod/shell/drone.dm @@ -44,17 +44,13 @@ /// Delay between each movement var/move_delay = 0.2 SECONDS -/obj/item/circuit_component/bot_circuit/Initialize() - . = ..() +/obj/item/circuit_component/bot_circuit/populate_ports() north = add_input_port("Move North", PORT_TYPE_SIGNAL) east = add_input_port("Move East", PORT_TYPE_SIGNAL) south = add_input_port("Move South", PORT_TYPE_SIGNAL) west = add_input_port("Move West", PORT_TYPE_SIGNAL) /obj/item/circuit_component/bot_circuit/input_received(datum/port/input/port) - . = ..() - if(.) - return var/mob/living/shell = parent.shell if(!istype(shell) || shell.stat) diff --git a/code/modules/wiremod/shell/moneybot.dm b/code/modules/wiremod/shell/moneybot.dm index fe3cd307332..a7ea6ca735c 100644 --- a/code/modules/wiremod/shell/moneybot.dm +++ b/code/modules/wiremod/shell/moneybot.dm @@ -49,8 +49,7 @@ var/obj/structure/money_bot/attached_bot -/obj/item/circuit_component/money_dispenser/Initialize() - . = ..() +/obj/item/circuit_component/money_dispenser/populate_ports() dispense_amount = add_input_port("Amount", PORT_TYPE_NUMBER) on_fail = add_output_port("On Failed", PORT_TYPE_SIGNAL) @@ -64,9 +63,6 @@ return ..() /obj/item/circuit_component/money_dispenser/input_received(datum/port/input/port) - . = ..() - if(.) - return if(!attached_bot) return @@ -93,8 +89,7 @@ /// The person who input the money var/datum/port/output/entity -/obj/item/circuit_component/money_bot/Initialize() - . = ..() +/obj/item/circuit_component/money_bot/populate_ports() total_money = add_output_port("Total Money", PORT_TYPE_NUMBER) money_input = add_output_port("Last Input Money", PORT_TYPE_NUMBER) entity = add_output_port("User", PORT_TYPE_ATOM) diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm index fd469109141..b22c244e8f9 100644 --- a/code/modules/wiremod/shell/scanner.dm +++ b/code/modules/wiremod/shell/scanner.dm @@ -35,8 +35,7 @@ -/obj/item/circuit_component/wiremod_scanner/Initialize() - . = ..() +/obj/item/circuit_component/wiremod_scanner/populate_ports() attacker = add_output_port("Scanner", PORT_TYPE_ATOM) attacking = add_output_port("Scanned Entity", PORT_TYPE_ATOM) signal = add_output_port("Scanned", PORT_TYPE_SIGNAL) diff --git a/code/modules/wiremod/shell/scanner_gate.dm b/code/modules/wiremod/shell/scanner_gate.dm index 312c690bd82..c96514461f8 100644 --- a/code/modules/wiremod/shell/scanner_gate.dm +++ b/code/modules/wiremod/shell/scanner_gate.dm @@ -45,8 +45,7 @@ var/obj/structure/scanner_gate_shell/attached_gate -/obj/item/circuit_component/scanner_gate/Initialize() - . = ..() +/obj/item/circuit_component/scanner_gate/populate_ports() scanned = add_output_port("Scanned Object", PORT_TYPE_ATOM) /obj/item/circuit_component/scanner_gate/register_shell(atom/movable/shell)