diff --git a/code/modules/wiremod/components/bci/hud/bar_overlay.dm b/code/modules/wiremod/components/bci/hud/bar_overlay.dm index cc6add65ea5..778e8bf5dd0 100644 --- a/code/modules/wiremod/components/bci/hud/bar_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/bar_overlay.dm @@ -19,6 +19,7 @@ var/overlay_limit = 10 /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() @@ -44,19 +45,23 @@ else if(current_option == COMP_BAR_OVERLAY_VERTICAL) number_clear = round(number_clear / 10) * 10 var/image/cool_overlay = image(icon = 'icons/hud/screen_bci.dmi', loc = target_atom, icon_state = "[options_map[current_option]][number_clear]", layer = RIPPLE_LAYER) + cool_overlay.plane = ABOVE_LIGHTING_PLANE - if(image_pixel_x.value) + if(image_pixel_x.value != null) cool_overlay.pixel_x = image_pixel_x.value - if(image_pixel_y.value) + if(image_pixel_y.value != null) cool_overlay.pixel_y = image_pixel_y.value - active_overlays[target_atom] = WEAKREF(target_atom.add_alt_appearance( + var/datum/atom_hud/alternate_appearance/basic/one_person/alt_appearance = target_atom.add_alt_appearance( /datum/atom_hud/alternate_appearance/basic/one_person, "bar_overlay_[REF(src)]", cool_overlay, owner, - )) + ) + alt_appearance.add_hud_to(owner) + + active_overlays[target_atom] = WEAKREF(alt_appearance) #undef COMP_BAR_OVERLAY_VERTICAL #undef COMP_BAR_OVERLAY_HORIZONTAL diff --git a/code/modules/wiremod/components/bci/hud/counter_overlay.dm b/code/modules/wiremod/components/bci/hud/counter_overlay.dm index 973f4f9be01..3e1248cd0c4 100644 --- a/code/modules/wiremod/components/bci/hud/counter_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/counter_overlay.dm @@ -21,7 +21,7 @@ var/obj/item/organ/cyberimp/bci/bci var/list/numbers = list() - var/counter_appearance + var/datum/weakref/counter_appearance /obj/item/circuit_component/counter_overlay/populate_ports() counter_number = add_input_port("Displayed Number", PORT_TYPE_NUMBER) @@ -38,9 +38,13 @@ /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) + for(var/datum/weakref/number in numbers) + var/datum/atom_hud/number_overlay = number?.resolve() + QDEL_NULL(number_overlay) + numbers = list() + + var/datum/atom_hud/overlay = counter_appearance?.resolve() + QDEL_NULL(overlay) UnregisterSignal(shell, COMSIG_ORGAN_REMOVED) /obj/item/circuit_component/counter_overlay/input_received(datum/port/input/port) @@ -52,50 +56,74 @@ if(!owner || !istype(owner) || !owner.client) return - for(var/number in numbers) - QDEL_NULL(number) + for(var/datum/weakref/number in numbers) + var/datum/atom_hud/number_overlay = number?.resolve() + QDEL_NULL(number_overlay) 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) + var/datum/atom_hud/overlay = counter_appearance?.resolve() + QDEL_NULL(overlay) + + var/image/counter = image(icon = 'icons/hud/screen_bci.dmi', icon_state = "hud_numbers", loc = owner, layer = RIPPLE_LAYER) + counter.plane = ABOVE_LIGHTING_PLANE + + if(image_pixel_x.value != null) counter.pixel_x = image_pixel_x.value - if(image_pixel_y.value) + if(image_pixel_y.value != null) counter.pixel_y = image_pixel_y.value - counter_appearance = WEAKREF(owner.add_alt_appearance( + var/datum/atom_hud/alternate_appearance/basic/one_person/alt_appearance = owner.add_alt_appearance( /datum/atom_hud/alternate_appearance/basic/one_person, "counter_overlay_[REF(src)]", counter, owner, - )) + ) + alt_appearance.add_hud_to(owner) + + counter_appearance = WEAKREF(alt_appearance) 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) + var/image/number = image(icon = 'icons/hud/screen_bci.dmi', icon_state = "hud_number_[cur_num]", loc = owner, layer = RIPPLE_LAYER) + number.plane = ABOVE_LIGHTING_PLANE - if(image_pixel_x.value) + if(image_pixel_x.value != null) number.pixel_x = image_pixel_x.value + (i - 1) * 9 - if(image_pixel_y.value) + else + number.pixel_x = (i - 1) * 9 + + if(image_pixel_y.value != null) number.pixel_y = image_pixel_y.value - numbers.Add(WEAKREF(owner.add_alt_appearance( + var/datum/atom_hud/alternate_appearance/basic/one_person/number_alt_appearance = owner.add_alt_appearance( /datum/atom_hud/alternate_appearance/basic/one_person, "counter_overlay_[REF(src)]_[i]", number, owner, - ))) + ) + number_alt_appearance.add_hud_to(owner) + + numbers += WEAKREF(number_alt_appearance) /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) + for(var/datum/weakref/number in numbers) + var/datum/atom_hud/number_overlay = number?.resolve() + QDEL_NULL(number_overlay) + numbers = list() + + var/datum/atom_hud/overlay = counter_appearance?.resolve() + overlay.remove_hud_from(owner) + QDEL_NULL(overlay) /obj/item/circuit_component/counter_overlay/Destroy() - QDEL_NULL(counter_appearance) - for(var/number in numbers) - QDEL_NULL(number) + for(var/datum/weakref/number in numbers) + var/datum/atom_hud/number_overlay = number?.resolve() + QDEL_NULL(number_overlay) + numbers = list() + + var/datum/atom_hud/overlay = counter_appearance?.resolve() + QDEL_NULL(overlay) return ..() diff --git a/code/modules/wiremod/components/bci/hud/object_overlay.dm b/code/modules/wiremod/components/bci/hud/object_overlay.dm index 7822b465869..4dca7e556f9 100644 --- a/code/modules/wiremod/components/bci/hud/object_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/object_overlay.dm @@ -83,7 +83,9 @@ show_to_owner(target_atom, owner) if(COMPONENT_TRIGGERED_BY(signal_off, port) && (target_atom in active_overlays)) - QDEL_NULL(active_overlays[target_atom]) + var/datum/weakref/overlay_ref = active_overlays[target_atom] + var/datum/atom_hud/overlay = overlay_ref?.resolve() + QDEL_NULL(overlay) active_overlays.Remove(target_atom) /obj/item/circuit_component/object_overlay/proc/show_to_owner(atom/target_atom, mob/living/owner) @@ -91,30 +93,36 @@ return if(active_overlays[target_atom]) - QDEL_NULL(active_overlays[target_atom]) + var/datum/weakref/overlay_ref = active_overlays[target_atom] + var/datum/atom_hud/overlay = overlay_ref?.resolve() + QDEL_NULL(overlay) var/image/cool_overlay = image(icon = 'icons/hud/screen_bci.dmi', loc = target_atom, icon_state = options_map[object_overlay_options.value], layer = RIPPLE_LAYER) + cool_overlay.plane = ABOVE_LIGHTING_PLANE - if(image_pixel_x.value) + if(image_pixel_x.value != null) cool_overlay.pixel_x = image_pixel_x.value - if(image_pixel_y.value) + if(image_pixel_y.value != null) cool_overlay.pixel_y = image_pixel_y.value - var/alt_appearance = WEAKREF(target_atom.add_alt_appearance( + var/datum/atom_hud/alternate_appearance/basic/one_person/alt_appearance = target_atom.add_alt_appearance( /datum/atom_hud/alternate_appearance/basic/one_person, "object_overlay_[REF(src)]", cool_overlay, owner, - )) + ) + alt_appearance.add_hud_to(owner) - active_overlays[target_atom] = alt_appearance + active_overlays[target_atom] = WEAKREF(alt_appearance) /obj/item/circuit_component/object_overlay/proc/on_organ_removed(datum/source, mob/living/carbon/owner) SIGNAL_HANDLER for(var/atom/target_atom in active_overlays) - QDEL_NULL(active_overlays[target_atom]) + var/datum/weakref/overlay_ref = active_overlays[target_atom] + var/datum/atom_hud/overlay = overlay_ref?.resolve() + QDEL_NULL(overlay) active_overlays.Remove(target_atom) #undef OBJECT_OVERLAY_LIMIT diff --git a/icons/hud/screen_bci.dmi b/icons/hud/screen_bci.dmi index 2458e03f44f..dbdfb949a01 100644 Binary files a/icons/hud/screen_bci.dmi and b/icons/hud/screen_bci.dmi differ