Files
Bubberstation/code/datums/components/z_parallax.dm
SkyratBot b4e92540d0 [MIRROR] fixes small zparallax bug [MDB IGNORE] (#13880)
* fixes small zparallax bug (#67244)

fixes an issue where if you attempted to regain control of your initial body after possessing another body it caused a stack trace due to MOB_LOGIN signal not being unregistered

(This was tsu's fault, introduced in a9d8be4d16)

* fixes small zparallax bug

Co-authored-by: magatsuchi <88991542+magatsuchi@users.noreply.github.com>
2022-05-25 16:24:27 +01:00

61 lines
1.6 KiB
Plaintext

/**
* Component that hooks into the client, listens for COMSIG_MOVABLE_Z_CHANGED, and depending on whether or not the
* Z-level has ZTRAIT_NOPARALLAX enabled, disable or reenable parallax.
*/
/datum/component/zparallax
dupe_mode = COMPONENT_DUPE_UNIQUE
var/client/tracked
var/mob/client_mob
/datum/component/zparallax/Initialize(client/tracked)
. = ..()
if(!istype(tracked))
stack_trace("Component zparallax has been initialized outside of a client. Deleting.")
return COMPONENT_INCOMPATIBLE
src.tracked = tracked
client_mob = tracked.mob
RegisterSignal(client_mob, COMSIG_MOB_LOGOUT, .proc/mob_change)
RegisterSignal(client_mob, COMSIG_MOVABLE_Z_CHANGED, .proc/ztrait_checks)
RegisterSignal(client_mob, COMSIG_MOB_LOGIN, .proc/refresh_client)
/datum/component/zparallax/Destroy()
. = ..()
unregister_signals()
tracked = null
client_mob = null
/datum/component/zparallax/proc/unregister_signals()
if(!client_mob)
return
UnregisterSignal(client_mob, list(COMSIG_MOB_LOGIN, COMSIG_MOB_LOGOUT, COMSIG_MOVABLE_Z_CHANGED))
/datum/component/zparallax/proc/refresh_client()
tracked = client_mob.client
/datum/component/zparallax/proc/mob_change()
SIGNAL_HANDLER
if(client_mob.key)
return
unregister_signals()
client_mob = tracked.mob
RegisterSignal(client_mob, COMSIG_MOB_LOGOUT, .proc/mob_change)
RegisterSignal(client_mob, COMSIG_MOVABLE_Z_CHANGED, .proc/ztrait_checks)
RegisterSignal(client_mob, COMSIG_MOB_LOGIN, .proc/refresh_client)
/datum/component/zparallax/proc/ztrait_checks()
SIGNAL_HANDLER
var/datum/hud/hud = client_mob.hud_used
hud.update_parallax_pref(client_mob)