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)