mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-21 07:32:35 +00:00
``/mob/dead/observer`` -> ``/mob/observer/dead`` ``/mob/eye`` -> ``/mob/observer/eye`` Reason being that they are similar in that they both don't interact with the world in any way. Some procs were shared, some checks as well, and it overall makes more sense this way. Plus, there were no ``/mob/dead`` mobs.
81 lines
2.5 KiB
Plaintext
81 lines
2.5 KiB
Plaintext
/* Using the HUD procs is simple. Call these procs in the life.dm of the intended mob.
|
|
Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so
|
|
the HUD updates properly! */
|
|
|
|
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
|
|
proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
|
|
if(!can_process_hud(M))
|
|
return
|
|
|
|
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, med_hud_users)
|
|
for(var/mob/living/carbon/human/patient in P.Mob.in_view(P.Turf))
|
|
if(P.Mob.see_invisible < patient.invisibility)
|
|
continue
|
|
|
|
if(local_scanner)
|
|
P.Client.images += patient.hud_list[HEALTH_HUD]
|
|
P.Client.images += patient.hud_list[STATUS_HUD]
|
|
else
|
|
var/sensor_level = getsensorlevel(patient)
|
|
if(sensor_level >= SUIT_SENSOR_VITAL)
|
|
P.Client.images += patient.hud_list[HEALTH_HUD]
|
|
if(sensor_level >= SUIT_SENSOR_BINARY)
|
|
P.Client.images += patient.hud_list[LIFE_HUD]
|
|
|
|
//Security HUDs. Pass a value for the second argument to enable implant viewing or other special features.
|
|
proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt)
|
|
if(!can_process_hud(M))
|
|
return
|
|
var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, sec_hud_users)
|
|
for(var/mob/living/carbon/human/perp in P.Mob.in_view(P.Turf))
|
|
if(P.Mob.see_invisible < perp.invisibility)
|
|
continue
|
|
|
|
P.Client.images += perp.hud_list[ID_HUD]
|
|
if(advanced_mode)
|
|
P.Client.images += perp.hud_list[WANTED_HUD]
|
|
P.Client.images += perp.hud_list[IMPTRACK_HUD]
|
|
P.Client.images += perp.hud_list[IMPLOYAL_HUD]
|
|
P.Client.images += perp.hud_list[IMPCHEM_HUD]
|
|
|
|
datum/arranged_hud_process
|
|
var/client/Client
|
|
var/mob/Mob
|
|
var/turf/Turf
|
|
|
|
proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list)
|
|
hud_list |= M
|
|
var/datum/arranged_hud_process/P = new
|
|
P.Client = M.client
|
|
P.Mob = Alt ? Alt : M
|
|
P.Turf = get_turf(P.Mob)
|
|
return P
|
|
|
|
proc/can_process_hud(var/mob/M)
|
|
if(!M)
|
|
return 0
|
|
if(!M.client)
|
|
return 0
|
|
if(M.stat != CONSCIOUS)
|
|
return 0
|
|
return 1
|
|
|
|
//Deletes the current HUD images so they can be refreshed with new ones.
|
|
mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
|
|
if(client)
|
|
for(var/image/hud in client.images)
|
|
if(copytext(hud.icon_state,1,4) == "hud")
|
|
client.images -= hud
|
|
med_hud_users -= src
|
|
sec_hud_users -= src
|
|
|
|
mob/proc/in_view(var/turf/T)
|
|
return view(T)
|
|
|
|
/mob/observer/eye/in_view(var/turf/T)
|
|
var/list/viewed = new
|
|
for(var/mob/living/carbon/human/H in mob_list)
|
|
if(get_dist(H, T) <= 7)
|
|
viewed += H
|
|
return viewed
|