mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-11 10:22:13 +00:00
104 lines
2.9 KiB
Plaintext
104 lines
2.9 KiB
Plaintext
/**
|
|
* # Counter Overlay Component
|
|
*
|
|
* Shows an counter overlay.
|
|
* Requires a BCI shell.
|
|
*/
|
|
|
|
/obj/item/circuit_component/counter_overlay
|
|
display_name = "Counter Overlay"
|
|
desc = "A component that shows an three digit counter. Requires a BCI shell."
|
|
|
|
required_shells = list(/obj/item/organ/cyberimp/bci)
|
|
|
|
var/datum/port/input/counter_number
|
|
|
|
var/datum/port/input/image_pixel_x
|
|
var/datum/port/input/image_pixel_y
|
|
|
|
var/datum/port/input/signal_update
|
|
|
|
var/obj/item/organ/cyberimp/bci/bci
|
|
var/list/numbers = list()
|
|
var/counter_appearance
|
|
|
|
/obj/item/circuit_component/counter_overlay/Initialize(mapload)
|
|
. = ..()
|
|
counter_number = add_input_port("Displayed Number", PORT_TYPE_NUMBER)
|
|
|
|
signal_update = add_input_port("Update Overlay", PORT_TYPE_SIGNAL)
|
|
|
|
image_pixel_x = add_input_port("X-Axis Shift", PORT_TYPE_NUMBER)
|
|
image_pixel_y = add_input_port("Y-Axis Shift", PORT_TYPE_NUMBER)
|
|
|
|
/obj/item/circuit_component/counter_overlay/register_shell(atom/movable/shell)
|
|
if(istype(shell, /obj/item/organ/cyberimp/bci))
|
|
bci = shell
|
|
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, .proc/on_organ_removed)
|
|
|
|
/obj/item/circuit_component/counter_overlay/unregister_shell(atom/movable/shell)
|
|
bci = null
|
|
QDEL_NULL(counter_appearance)
|
|
for(var/number in numbers)
|
|
QDEL_NULL(number)
|
|
UnregisterSignal(shell, COMSIG_ORGAN_REMOVED)
|
|
|
|
/obj/item/circuit_component/counter_overlay/input_received(datum/port/input/port)
|
|
. = ..()
|
|
|
|
if(. || !bci)
|
|
return
|
|
|
|
var/mob/living/owner = bci.owner
|
|
|
|
if(!owner || !istype(owner) || !owner.client)
|
|
return
|
|
|
|
for(var/number in numbers)
|
|
QDEL_NULL(number)
|
|
numbers = list()
|
|
|
|
QDEL_NULL(counter_appearance)
|
|
var/image/counter = image(icon = 'icons/hud/screen_bci.dmi', icon_state = "hud_numbers", loc = owner)
|
|
if(image_pixel_x.value)
|
|
counter.pixel_x = image_pixel_x.value
|
|
if(image_pixel_y.value)
|
|
counter.pixel_y = image_pixel_y.value
|
|
|
|
counter_appearance = WEAKREF(owner.add_alt_appearance(
|
|
/datum/atom_hud/alternate_appearance/basic/one_person,
|
|
"counter_overlay_[REF(src)]",
|
|
counter,
|
|
owner,
|
|
))
|
|
|
|
var/cleared_number = clamp(round(counter_number.value), 0, 999)
|
|
|
|
for(var/i = 1 to 3)
|
|
var/cur_num = round(cleared_number / (10 ** (3 - i))) % 10
|
|
var/image/number = image(icon = 'icons/hud/screen_bci.dmi', icon_state = "hud_number_[cur_num]", loc = owner)
|
|
|
|
if(image_pixel_x.value)
|
|
number.pixel_x = image_pixel_x.value + (i - 1) * 9
|
|
if(image_pixel_y.value)
|
|
number.pixel_y = image_pixel_y.value
|
|
|
|
numbers.Add(WEAKREF(owner.add_alt_appearance(
|
|
/datum/atom_hud/alternate_appearance/basic/one_person,
|
|
"counter_overlay_[REF(src)]_[i]",
|
|
number,
|
|
owner,
|
|
)))
|
|
|
|
/obj/item/circuit_component/counter_overlay/proc/on_organ_removed(datum/source, mob/living/carbon/owner)
|
|
SIGNAL_HANDLER
|
|
QDEL_NULL(counter_appearance)
|
|
for(var/number in numbers)
|
|
QDEL_NULL(number)
|
|
|
|
/obj/item/circuit_component/counter_overlay/Destroy()
|
|
QDEL_NULL(counter_appearance)
|
|
for(var/number in numbers)
|
|
QDEL_NULL(number)
|
|
return ..()
|