Files
Bubberstation/code/datums/elements/undertile.dm
ShizCalev 4b6500fb67 Makes all anchored changes use setAnchored(), COMSIG_MOVABLE_SETANCHORED now only sent if an AM's anchored var has changed for more reliable usage. (#52254)
* Converts everything to use setAnchored() + other fixes

* Fixed singulo debug

* singulo again

* forgot to move the vv_edit proc

* caught that this time :)

* changes

* Update code/game/atoms_movable.dm

Co-authored-by: Rohesie <rohesie@gmail.com>

Co-authored-by: Rohesie <rohesie@gmail.com>
2020-07-21 02:20:26 -03:00

60 lines
2.0 KiB
Plaintext

///Add to an object if you want to be able to be hidden under tiles
/datum/element/undertile
element_flags = ELEMENT_BESPOKE | COMPONENT_DUPE_HIGHLANDER
id_arg_index = 2
///the invisiblity trait applied, like TRAIT_T_RAY_VISIBLE
var/invisibility_trait
///level of invisibility applied when under a tile. Could be INVISIBILITY_OBSERVER if you still want it to be visible to ghosts
var/invisibility_level
///an overlay for the tile if we wish to apply that
var/tile_overlay
///whether we use alpha or not. TRUE uses ALPHA_UNDERTILE because otherwise we have 200 different instances of this element for different alphas
var/use_alpha
///We will switch between anchored and unanchored. for stuff like satchels that shouldn't be pullable under tiles but are otherwise unanchored
var/use_anchor
/datum/element/undertile/Attach(datum/target, invisibility_trait, invisibility_level = INVISIBILITY_MAXIMUM, tile_overlay, use_alpha = TRUE, use_anchor = FALSE)
. = ..()
if(!ismovable(target))
return ELEMENT_INCOMPATIBLE
RegisterSignal(target, COMSIG_OBJ_HIDE, .proc/hide)
src.invisibility_trait = invisibility_trait
src.invisibility_level = invisibility_level
src.tile_overlay = tile_overlay
src.use_alpha = use_alpha
src.use_anchor = use_anchor
///called when a tile has been covered or uncovered
/datum/element/undertile/proc/hide(atom/movable/source, covered)
source.invisibility = covered ? invisibility_level : 0
var/turf/T = get_turf(source)
if(covered)
if(invisibility_trait)
ADD_TRAIT(source, invisibility_trait, TRAIT_GENERIC)
if(tile_overlay)
T.add_overlay(tile_overlay)
if(use_alpha)
source.alpha = ALPHA_UNDERTILE
if(use_anchor)
source.set_anchored(TRUE)
else
if(invisibility_trait)
REMOVE_TRAIT(source, invisibility_trait, TRAIT_GENERIC)
if(tile_overlay)
T.overlays -= tile_overlay
if(use_alpha)
source.alpha = 255
if(use_anchor)
source.set_anchored(FALSE)
/datum/element/undertile/Detach(atom/movable/AM, visibility_trait, invisibility_level = INVISIBILITY_MAXIMUM)
. = ..()
hide(AM, FALSE)