From 6888652bb2bde69f5953b035e3f88c7ed3d2f6c6 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Tue, 22 Mar 2022 22:07:54 +0300 Subject: [PATCH] BCI overlay fix (#65604) --- .../wiremod/components/bci/hud/bar_overlay.dm | 13 ++- .../components/bci/hud/counter_overlay.dm | 74 ++++++++++++------ .../components/bci/hud/object_overlay.dm | 24 ++++-- icons/hud/screen_bci.dmi | Bin 1665 -> 1627 bytes 4 files changed, 76 insertions(+), 35 deletions(-) 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 2458e03f44ff268f5c409fed4bc97728cd29e71e..dbdfb949a0106e248d7c5e463171d0e202513c35 100644 GIT binary patch delta 1222 zcmV;%1UdVG4ciQ`rU8GTNkllIRUBf!jW>RMtQJ%ffDJbqryGN{}SkV z-WWSu6TlcdCmVkt?P`c4rfxkIKt)$W97W0#MbkH=L+p{vERV5A&b&P^W;Ra@d4fHG zA~%;6ojUW0eEg7$Td9#@y9nc)HO4+4Z4w&U~40Q)PpFRGO>0CM7m zuLiQ5c=3OmfgDya4{0+Em3NE)P@$&_L2_oQIjKTV7lP!>gmcmfAk?v3Ttvnu6{2Dt z%f&@yY=R+bzrm^5<)D%sJ`FKisRLO@ua4wh$mq=Dvb-BrF7HZ4XC9YF0F00gpq}Ti z0MzrmYoomc?1Q$-_>5bpAgmuiKYU&Rv^Ag$+E0HtB%Ix3*!Guqli{=wz+{O|)O{d2 zZH86P#{h^yqx(P%k`?>FH-MVQst?q>U9Ati0~m3mCr*4Cz{EgghH@)(56LwY>!ppT zpqDZuUEumKS^!|u;}|X`+Y7+OOi0`T98piGIRcIA1Gl7fUjtpANuSml zk)VHFdv(gh+N;xf1ppFhUWK_|I|viQeynQ~fDN!R5CIGWEDS^d(*b4%A^>*)M<4>2 zA7CO70W1$N07L-m0~j^|5C8$#A21h_O9Om})Rxp-Hqf~ByxbJ*_Ohk@6Wcq(eqej2 zZP>u548}Xaf+7F{AOHd&00JNY0w4eaAb@|#+iC=`IKa@h+P4Gnq`BAollKS2>KQMe zcZU6VZ|@BIf$g1PKalMofJ7pZNF)-8L?V$$B=4HKp8qX18-Q3ngXQxB+dIP+=Hu7* z0dNz8KQ!|3rIZx@)T&y)eO7OQ2duYvEU(nVO+%pe{ow{xLBwCx9h{8d!G>^t>}+)mebw$>Tx) zWp)BHLLUxbFemom00uqq_Wg7u5{X12eU655I9J*WwqHv+tOFSGHjdWrp(Vz zvkAabPoJ6PR+WMJ*f#eIOu3F?_mw`+zz#;wD1Ki))dNF&ICdYpmJ@(2{DHa0z|{SK kxo5!|yJ92~iS)_(1Fw4p4vz%KQvd(}07*qoM6N<$g6hya6951J delta 1260 zcmVrU8G(Nkl`m>iKEvbxPB60fvnd^5k0ko>2z%th`U7)j-C~Fx zehU=BIdg0=#EvjSH}kKG3vD}AK!pb#Aht6FGz|cZqQWyglEEmtKkb1O*U9X4KrceH>GWr-eF*Q%P}0q_L@f&|;qWnqBB4ck}Q%Mbt& zc)_cQECPQodNYxO0@fi-r6KE%0RS@fbSX$gri@9Mdb$)OA``}>6+obJIlqX=O)^DA zDwp$%irfTK)M1TFv+Ge7J1h(_TCNgVM=!U;U5M<=^0K%ad0gC;$j&S;4*(b-6F@%C zUjfMHdDlmC2{;B#li?M&Dnb0`0P5lM3ZQ8LUC@7=VNq~)!LWUPybFf&OaPLd^PZ~7_e3C3U2Ce~Q9Lq6~al6Fzn*dCJg@Fj5A7Ex60vHc4F%SXR16TqP z!1Mqkfe2uJfF2+MSRO#L34j0yz&t@;OwJAPO(b7QO=SZOThEJ^g5A4pVgJJRPP1!l z@01NY7*xSH2bfU=KmY_l00ck)1V8`;KmdOPF#5F`0n852_gd}80XWjs>;2L12l(n4 zFQ0dsUB9F20l!!+*6Zmhay$x4;9&uXxO_*uhOhp&vwYp}?^NykNbm>n1WEUb}zc z$q#jg_KhXow$`J5JXWiE)oyS*LB}`ix3;xvZ}nI`*hjO`+J1tMzqbj%TF&Rdmyd#E zvwooSmyUux-wn>k#|gk%&gTG%f~|unfWp7Y<3Rsqbpk6w7Y^`YP3*z}KJ>ub-=`yy zNF);J>uPKbXKNcudaBsIsx}#E8`@-heu8aW$M@CsX8ZRx0T_BRX7A^KIcMJ6+WCgY z&f>9Aqn~f6?+u22M|~bJ+V^>&?;ValhPKBEz);^?E$cbZmkDiWwe_=rL?V&?bNvM# W)n6bU#l~d-0000