/
storm_hating.dm
47 lines (41 loc) · 1.64 KB
/
storm_hating.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
* 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/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))
/datum/component/storm_hating/UnregisterFromParent()
. = ..()
on_area_exited(parent, get_area(parent))
UnregisterSignal(parent, COMSIG_ENTER_AREA)
RegisterSignal(parent, COMSIG_EXIT_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.AddElement(/datum/element/temporary_atom, life_time = 3 SECONDS, fade_time = 2 SECONDS)
qdel(src)