-
Notifications
You must be signed in to change notification settings - Fork 220
/
moved.dm
39 lines (32 loc) · 1.33 KB
/
moved.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
// Observer Pattern Implementation: Moved
// Registration type: /atom/movable
//
// Raised when: An /atom/movable instance has moved using Move() or forceMove().
//
// Arguments that the called proc should expect:
// /atom/movable/moving_instance: The instance that moved
// /atom/old_loc: The loc before the move.
// /atom/new_loc: The loc after the move.
/decl/observ/moved
name = "Moved"
expected_type = /atom/movable
flags = OBSERVATION_NO_GLOBAL_REGISTRATIONS
/decl/observ/moved/register(var/atom/movable/mover, var/datum/listener, var/proc_call)
. = ..()
// Listen to the parent if possible.
if(. && istype(mover.loc, expected_type))
register(mover.loc, mover, TYPE_PROC_REF(/atom/movable, recursive_move))
/********************
* Movement Handling *
********************/
/atom/Entered(var/atom/movable/am, var/atom/old_loc)
. = ..()
RAISE_EVENT(/decl/observ/moved, am, old_loc, am.loc)
/atom/movable/Entered(var/atom/movable/am, atom/old_loc)
. = ..()
var/decl/observ/moved/moved_event = GET_DECL(/decl/observ/moved)
if(moved_event.has_listeners(am))
events_repository.register(/decl/observ/moved, src, am, TYPE_PROC_REF(/atom/movable, recursive_move))
/atom/movable/Exited(var/atom/movable/am, atom/new_loc)
. = ..()
events_repository.unregister(/decl/observ/moved, src, am, TYPE_PROC_REF(/atom/movable, recursive_move))