mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
HUDs and AI Cameras No Longer Track Invisible Mobs (#16276)
* Medical HUDs and Security HUDs no longer track invisible mobs. * Now works with alphas lists and body alphas as well. * Forgot indents. * Does it better this time. * Typo. * Forgot this. * AI cameras can no longer track invisible mobs. * More OOP.
This commit is contained in:
committed by
Pieter-Jan Briers
parent
f449bbdb3f
commit
f830b559a7
@@ -13,6 +13,20 @@ mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
|
|||||||
if(src in sec_hud_users)
|
if(src in sec_hud_users)
|
||||||
sec_hud_users -= src
|
sec_hud_users -= src
|
||||||
|
|
||||||
|
proc/check_HUD_visibility(var/mob/living/target, var/mob/user)
|
||||||
|
if(user.see_invisible < target.invisibility)
|
||||||
|
return FALSE
|
||||||
|
if(target.alpha <= 1)
|
||||||
|
return FALSE
|
||||||
|
for(var/i in target.alphas)
|
||||||
|
if(target.alphas[i] <= 1)
|
||||||
|
return FALSE
|
||||||
|
if(iscarbon(target))
|
||||||
|
var/mob/living/carbon/C = target
|
||||||
|
for(var/i in C.body_alphas)
|
||||||
|
if(C.body_alphas[i] <= 1)
|
||||||
|
return FALSE
|
||||||
|
return TRUE
|
||||||
|
|
||||||
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
|
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
|
||||||
proc/process_med_hud(var/mob/M, var/mob/eye)
|
proc/process_med_hud(var/mob/M, var/mob/eye)
|
||||||
@@ -32,7 +46,7 @@ proc/process_med_hud(var/mob/M, var/mob/eye)
|
|||||||
for(var/mob/living/carbon/human/patient in range(T))
|
for(var/mob/living/carbon/human/patient in range(T))
|
||||||
if(patient.head && istype(patient.head,/obj/item/clothing/head/tinfoil)) //Tinfoil hat? Move along.
|
if(patient.head && istype(patient.head,/obj/item/clothing/head/tinfoil)) //Tinfoil hat? Move along.
|
||||||
continue
|
continue
|
||||||
if(M.see_invisible < patient.invisibility)
|
if(!check_HUD_visibility(patient, M))
|
||||||
continue
|
continue
|
||||||
if(!C)
|
if(!C)
|
||||||
continue
|
continue
|
||||||
@@ -74,7 +88,7 @@ proc/process_sec_hud(var/mob/M, var/advanced_mode,var/mob/eye)
|
|||||||
else
|
else
|
||||||
T = get_turf(M)
|
T = get_turf(M)
|
||||||
for(var/mob/living/carbon/human/perp in range(T))
|
for(var/mob/living/carbon/human/perp in range(T))
|
||||||
if(M.see_invisible < perp.invisibility)
|
if(!check_HUD_visibility(perp, M))
|
||||||
continue
|
continue
|
||||||
holder = perp.hud_list[ID_HUD]
|
holder = perp.hud_list[ID_HUD]
|
||||||
if(!holder)
|
if(!holder)
|
||||||
|
|||||||
@@ -63,9 +63,7 @@
|
|||||||
continue
|
continue
|
||||||
if(M == usr)
|
if(M == usr)
|
||||||
continue
|
continue
|
||||||
if(see_invisible < M.invisibility) //cloaked
|
if(!check_HUD_visibility(M, src))
|
||||||
continue
|
|
||||||
if(M.alpha <= 1) //fully transparent
|
|
||||||
continue
|
continue
|
||||||
if(M.digitalcamo)
|
if(M.digitalcamo)
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user