mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-04 22:11:27 +00:00
* Makes glass floors override platings. Fixes glass floor openspace bug. (#66301) About The Pull Request Fixes #63868. Actual one liner fix for this one here. If this pr dies feel free to atomize this one. AND it turns out to not be tim's fault. Fixes #63548. But i really shouldnt say fixed. The original implementation was causing the invincible plating bug. When tim's refactor got in it instead relies on the element state, which was broken from the get go, removing the invincible plating bug which was in a sense "intended" its all messy man I hate this code. Thats why im removing the plating thing. Let the turf handle the turf change themselves this complicates things. Mapped in glass floors have openspace (now baseturf bottom) as their baseturfs, while built ones have plating under them. Which doesnt make sense to be honest. Why would things be visible if a plating is under the glass. They are also crowbarrable on top of this, which to be fair is my main reasoning behind the PR. To solve this, I am instead making glass floors replace the plating instead of building over it. This is made to be generalizable for every tile in game, as long as their initial baseturf is the same and the tile wants it to happen. do after of three seconds is completely arbitrary. If any maint want it changed let me know. Why It's Good For The Game First one solves a bug Second one makes more sense And er, icebox is currently using the glass floors in sec, they can be crowbarred very easily. This might be a good idea from a gameplay perspective. Changelog cl del: Removed adding glass floors to plating balance: Allows you to replace plating with glass floors instead. 3 second timer. del: Removed deconstructing the glass floors. No replacement for this one, use a rcd. fix: Fixed metastation glassfloor spawning a weird turf when crowbarred. /cl * Makes glass floors override platings. Fixes glass floor openspace bug. Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
78 lines
3.0 KiB
Plaintext
78 lines
3.0 KiB
Plaintext
|
|
/datum/element/turf_z_transparency
|
|
element_flags = ELEMENT_DETACH
|
|
|
|
///This proc sets up the signals to handle updating viscontents when turfs above/below update. Handle plane and layer here too so that they don't cover other obs/turfs in Dream Maker
|
|
/datum/element/turf_z_transparency/Attach(datum/target, is_openspace = FALSE)
|
|
. = ..()
|
|
if(!isturf(target))
|
|
return ELEMENT_INCOMPATIBLE
|
|
|
|
var/turf/our_turf = target
|
|
|
|
our_turf.layer = OPENSPACE_LAYER
|
|
if(is_openspace) // openspace and windows have different visual effects but both share this component.
|
|
our_turf.plane = OPENSPACE_PLANE
|
|
else
|
|
our_turf.plane = TRANSPARENT_FLOOR_PLANE
|
|
|
|
RegisterSignal(target, COMSIG_TURF_MULTIZ_DEL, .proc/on_multiz_turf_del)
|
|
RegisterSignal(target, COMSIG_TURF_MULTIZ_NEW, .proc/on_multiz_turf_new)
|
|
|
|
ADD_TRAIT(our_turf, TURF_Z_TRANSPARENT_TRAIT, ELEMENT_TRAIT(type))
|
|
|
|
update_multi_z(our_turf)
|
|
|
|
/datum/element/turf_z_transparency/Detach(datum/source)
|
|
. = ..()
|
|
var/turf/our_turf = source
|
|
our_turf.vis_contents.len = 0
|
|
UnregisterSignal(our_turf, list(COMSIG_TURF_MULTIZ_NEW, COMSIG_TURF_MULTIZ_DEL))
|
|
REMOVE_TRAIT(our_turf, TURF_Z_TRANSPARENT_TRAIT, ELEMENT_TRAIT(type))
|
|
|
|
///Updates the viscontents or underlays below this tile.
|
|
/datum/element/turf_z_transparency/proc/update_multi_z(turf/our_turf)
|
|
var/turf/below_turf = our_turf.below()
|
|
if(below_turf) // If we actually have somethign below us, display it.
|
|
our_turf.vis_contents += below_turf
|
|
else
|
|
our_turf.vis_contents.len = 0 // Nuke the list
|
|
add_baseturf_underlay(our_turf)
|
|
|
|
if(isclosedturf(our_turf)) //Show girders below closed turfs
|
|
var/mutable_appearance/girder_underlay = mutable_appearance('icons/obj/structures.dmi', "girder", layer = TURF_LAYER-0.01)
|
|
girder_underlay.appearance_flags = RESET_ALPHA | RESET_COLOR
|
|
our_turf.underlays += girder_underlay
|
|
var/mutable_appearance/plating_underlay = mutable_appearance('icons/turf/floors.dmi', "plating", layer = TURF_LAYER-0.02)
|
|
plating_underlay = RESET_ALPHA | RESET_COLOR
|
|
our_turf.underlays += plating_underlay
|
|
return TRUE
|
|
|
|
/datum/element/turf_z_transparency/proc/on_multiz_turf_del(turf/our_turf, turf/below_turf, dir)
|
|
SIGNAL_HANDLER
|
|
|
|
if(dir != DOWN)
|
|
return
|
|
|
|
update_multi_z(our_turf)
|
|
|
|
/datum/element/turf_z_transparency/proc/on_multiz_turf_new(turf/our_turf, turf/below_turf, dir)
|
|
SIGNAL_HANDLER
|
|
|
|
if(dir != DOWN)
|
|
return
|
|
|
|
update_multi_z(our_turf)
|
|
|
|
///Called when there is no real turf below this turf
|
|
/datum/element/turf_z_transparency/proc/add_baseturf_underlay(turf/our_turf)
|
|
var/turf/path = SSmapping.level_trait(our_turf.z, ZTRAIT_BASETURF) || /turf/open/space
|
|
if(!ispath(path))
|
|
path = text2path(path)
|
|
if(!ispath(path))
|
|
warning("Z-level [our_turf.z] has invalid baseturf '[SSmapping.level_trait(our_turf.z, ZTRAIT_BASETURF)]'")
|
|
path = /turf/open/space
|
|
var/mutable_appearance/underlay_appearance = mutable_appearance(initial(path.icon), initial(path.icon_state), layer = TURF_LAYER-0.02, plane = PLANE_SPACE)
|
|
underlay_appearance.appearance_flags = RESET_ALPHA | RESET_COLOR
|
|
our_turf.underlays += underlay_appearance
|