Observers can see through some alternate apperances (#1829)

This commit is contained in:
CitadelStationBot
2017-06-30 22:47:57 -05:00
committed by kevinz000
parent a9a2a29dd4
commit fce1875d73
2 changed files with 37 additions and 8 deletions
+31 -8
View File
@@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K]
if(AA.appearance_key == key)
AA.remove_from_hud(src)
break
/atom/proc/add_alt_appearance(type, key, ...)
if(!type || !key)
@@ -59,6 +60,8 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
/datum/atom_hud/alternate_appearance/basic
var/atom/target
var/image/theImage
var/add_ghost_version = FALSE
var/ghost_appearance
/datum/atom_hud/alternate_appearance/basic/New(key, image/I, target_sees_appearance = TRUE)
..()
@@ -68,6 +71,16 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
add_to_hud(target, I)
if(target_sees_appearance && ismob(target))
add_hud_to(target)
if(add_ghost_version)
var/image/ghost_image = image(icon = I.icon , icon_state = I.icon_state, loc = I.loc)
ghost_image.override = FALSE
ghost_image.alpha = 128
ghost_appearance = new /datum/atom_hud/alternate_appearance/basic/observers(key + "_observer", ghost_image, FALSE)
/datum/atom_hud/alternate_appearance/basic/Destroy()
. = ..()
if(ghost_appearance)
QDEL_NULL(ghost_appearance)
/datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A)
A.hud_list[appearance_key] = theImage
@@ -76,32 +89,42 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances)
/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
. = ..()
A.hud_list -= appearance_key
/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
. = ..()
if(.)
if(. && !QDELETED(src))
qdel(src)
/datum/atom_hud/alternate_appearance/basic/everyone
add_ghost_version = TRUE
/datum/atom_hud/alternate_appearance/basic/everyone/New()
..()
for(var/mob in GLOB.player_list)
if(mob)
for(var/mob in GLOB.mob_list)
if(mobShouldSee(mob))
add_hud_to(mob)
/datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M)
return TRUE
return !isobserver(M)
/datum/atom_hud/alternate_appearance/basic/silicons
/datum/atom_hud/alternate_appearance/basic/silicons/New()
..()
for(var/mob in GLOB.silicon_mobs)
if(mob)
if(mobShouldSee(mob))
add_hud_to(mob)
/datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M)
if(issilicon(M))
return TRUE
return FALSE
/datum/atom_hud/alternate_appearance/basic/observers
add_ghost_version = FALSE //just in case, to prevent infinite loops
/datum/atom_hud/alternate_appearance/basic/observers/New()
..()
for(var/mob in GLOB.dead_mob_list)
if(mobShouldSee(mob))
add_hud_to(mob)
/datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M)
return isobserver(M)
@@ -120,6 +120,12 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
GLOB.dead_mob_list += src
for(var/v in GLOB.active_alternate_appearances)
if(!v)
continue
var/datum/atom_hud/alternate_appearance/AA = v
AA.onNewMob(src)
. = ..()
grant_all_languages()