[MIRROR] BCI overlay fix [MDB IGNORE] (#12222)

* BCI overlay fix (#65604)

* BCI overlay fix

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
This commit is contained in:
SkyratBot
2022-03-22 22:04:14 +01:00
committed by GitHub
parent bc52bf5a23
commit e13d57e6a1
4 changed files with 76 additions and 35 deletions

View File

@@ -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

View File

@@ -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 ..()

View File

@@ -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