Files
Bubberstation/code/datums/components/storm_hating.dm

54 lines
1.8 KiB
Plaintext

/**
* The parent of this component will be destroyed if it's on the ground during a storm
*/
/datum/component/storm_hating
/// Types of weather which trigger the effect
var/static/list/stormy_weather = list(
/datum/weather/particle/ash_storm,
/datum/weather/snow_storm,
/datum/weather/void_storm,
)
/datum/component/storm_hating/Initialize()
. = ..()
if (!isatom(parent))
return COMPONENT_INCOMPATIBLE
on_area_entered(parent, get_area(parent))
/datum/component/storm_hating/RegisterWithParent()
. = ..()
RegisterSignal(parent, COMSIG_ENTER_AREA, PROC_REF(on_area_entered))
RegisterSignal(parent, COMSIG_EXIT_AREA, PROC_REF(on_area_exited))
RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_login))
/datum/component/storm_hating/UnregisterFromParent()
. = ..()
UnregisterSignal(parent, list(COMSIG_ENTER_AREA, COMSIG_EXIT_AREA))
var/area/old_area = get_area(parent)
if(old_area)
on_area_exited(parent, old_area)
/datum/component/storm_hating/proc/on_area_entered(atom/source, area/new_area)
SIGNAL_HANDLER
for (var/weather in stormy_weather)
RegisterSignal(new_area, COMSIG_WEATHER_BEGAN_IN_AREA(weather), PROC_REF(on_storm_event))
RegisterSignal(new_area, COMSIG_WEATHER_ENDED_IN_AREA(weather), PROC_REF(on_storm_event))
/datum/component/storm_hating/proc/on_area_exited(atom/source, area/old_area)
SIGNAL_HANDLER
for (var/weather in stormy_weather)
UnregisterSignal(old_area, COMSIG_WEATHER_BEGAN_IN_AREA(weather))
UnregisterSignal(old_area, COMSIG_WEATHER_ENDED_IN_AREA(weather))
/datum/component/storm_hating/proc/on_storm_event()
SIGNAL_HANDLER
var/atom/parent_atom = parent
if (!isturf(parent_atom.loc))
return
parent_atom.fade_into_nothing(life_time = 3 SECONDS, fade_time = 2 SECONDS)
qdel(src)
/datum/component/storm_hating/proc/on_login(datum/source)
SIGNAL_HANDLER
qdel(src)