From 6fde2a7b9f4de9cd08a5711e6b3126b2ab0b8738 Mon Sep 17 00:00:00 2001 From: TheSmallBlue Date: Tue, 21 Sep 2021 21:12:29 -0300 Subject: [PATCH] Adds the Proximity Pinpointer circuit component! (#61574) --- .../research/designs/wiremod_designs.dm | 5 ++ code/modules/research/techweb/all_nodes.dm | 1 + .../wiremod/components/atom/pinpointer.dm | 53 +++++++++++++++++++ tgstation.dme | 1 + 4 files changed, 60 insertions(+) create mode 100644 code/modules/wiremod/components/atom/pinpointer.dm diff --git a/code/modules/research/designs/wiremod_designs.dm b/code/modules/research/designs/wiremod_designs.dm index 7c0f7033d25..f2bb657aa8f 100644 --- a/code/modules/research/designs/wiremod_designs.dm +++ b/code/modules/research/designs/wiremod_designs.dm @@ -253,6 +253,11 @@ id = "comp_typecast" build_path = /obj/item/circuit_component/typecast +/datum/design/component/pinpointer + name = "Proximity Pinpointer Component" + id = "comp_pinpointer" + build_path = /obj/item/circuit_component/pinpointer + /datum/design/component/bci category = list("Circuitry", "BCI Components") diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index cd562b26a80..b159061d724 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -222,6 +222,7 @@ "comp_not", "comp_ntnet_receive", "comp_ntnet_send", + "comp_pinpointer", "comp_pressuresensor", "comp_radio", "comp_random", diff --git a/code/modules/wiremod/components/atom/pinpointer.dm b/code/modules/wiremod/components/atom/pinpointer.dm new file mode 100644 index 00000000000..ccdd8d50b38 --- /dev/null +++ b/code/modules/wiremod/components/atom/pinpointer.dm @@ -0,0 +1,53 @@ +/** + * # Proximity Pinpointer Component + * + * Return the location of its input. + */ +/obj/item/circuit_component/pinpointer + display_name = "Proximity Pinpointer" + desc = "A component that returns the xyz co-ordinates of its entity input, as long as its in view." + + var/datum/port/input/target + + var/datum/port/output/x_pos + var/datum/port/output/y_pos + var/datum/port/output/z_pos + var/datum/port/output/on_error + + var/max_range = 7 + + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL + +/obj/item/circuit_component/pinpointer/populate_ports() + target = add_input_port("Target entity", PORT_TYPE_ATOM, FALSE) + + 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) + on_error = add_output_port("Failed", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/pinpointer/input_received(datum/port/input/port) + + if(isnull(target.value)) + x_pos.set_output(null) + y_pos.set_output(null) + z_pos.set_output(null) + on_error.set_output(COMPONENT_SIGNAL) + return + + var/atom/target_entity = target.value + + if(isInSight(target_entity, get_turf(src)) && IN_GIVEN_RANGE(get_turf(src), target_entity, max_range)) + var/turf/location = get_turf(target_entity) + + x_pos.set_output(location?.x) + y_pos.set_output(location?.y) + z_pos.set_output(location?.z) + else + x_pos.set_output(null) + y_pos.set_output(null) + z_pos.set_output(null) + on_error.set_output(COMPONENT_SIGNAL) + return TRUE + + diff --git a/tgstation.dme b/tgstation.dme index 9d01c3c77c8..7d58cc155a0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3843,6 +3843,7 @@ #include "code\modules\wiremod\components\atom\gps.dm" #include "code\modules\wiremod\components\atom\health.dm" #include "code\modules\wiremod\components\atom\hear.dm" +#include "code\modules\wiremod\components\atom\pinpointer.dm" #include "code\modules\wiremod\components\atom\self.dm" #include "code\modules\wiremod\components\atom\species.dm" #include "code\modules\wiremod\components\bci\hud\bar_overlay.dm"