Refactors how components are triggered and refactors how ports are ordered (#60934)

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
This commit is contained in:
Watermelon914
2021-09-03 02:22:39 -07:00
committed by GitHub
co-authored by Watermelon914
parent a9cc1bc816
commit 126411f405
76 changed files with 265 additions and 429 deletions
@@ -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))
@@ -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]
@@ -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)
@@ -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
@@ -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)
@@ -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)
+11 -12
View File
@@ -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))
@@ -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
@@ -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
@@ -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)
@@ -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)
@@ -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())
@@ -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)
@@ -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
@@ -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))
@@ -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)
+1 -6
View File
@@ -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)
@@ -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)
+1 -2
View File
@@ -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)
+1 -2
View File
@@ -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)
@@ -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())
@@ -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()
@@ -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
@@ -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
@@ -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
@@ -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)
@@ -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))
@@ -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
@@ -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))
@@ -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)
@@ -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
@@ -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))
@@ -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)
@@ -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)
@@ -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))
+1 -5
View File
@@ -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)
@@ -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
@@ -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)
@@ -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))
@@ -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)
@@ -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)
@@ -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
@@ -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)
@@ -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))
@@ -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))
@@ -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))
@@ -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()
@@ -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
@@ -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
@@ -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)
@@ -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
@@ -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)