mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-25 17:41:56 +00:00
Merge branch 'master' into development
This commit is contained in:
11
code/datums/observation/_debug.dm
Normal file
11
code/datums/observation/_debug.dm
Normal file
@@ -0,0 +1,11 @@
|
||||
/****************
|
||||
* Debug Support *
|
||||
****************/
|
||||
var/datum/all_observable_events/all_observable_events = new()
|
||||
|
||||
/datum/all_observable_events
|
||||
var/list/events
|
||||
|
||||
/datum/all_observable_events/New()
|
||||
events = list()
|
||||
..()
|
||||
4
code/datums/observation/destroyed.dm
Normal file
4
code/datums/observation/destroyed.dm
Normal file
@@ -0,0 +1,4 @@
|
||||
var/datum/observ/destroyed/destroyed_event = new()
|
||||
|
||||
/datum/observ/destroyed
|
||||
name = "Destroyed"
|
||||
41
code/datums/observation/moved.dm
Normal file
41
code/datums/observation/moved.dm
Normal file
@@ -0,0 +1,41 @@
|
||||
var/datum/observ/moved/moved_event = new()
|
||||
|
||||
/datum/observ/moved
|
||||
name = "Moved"
|
||||
expected_type = /atom/movable
|
||||
|
||||
/datum/observ/moved/register(var/eventSource, var/datum/procOwner, var/proc_call)
|
||||
. = ..()
|
||||
var/atom/movable/child = eventSource
|
||||
if(.)
|
||||
var/atom/movable/parent = child.loc
|
||||
while(istype(parent) && !moved_event.is_listening(parent, child))
|
||||
moved_event.register(parent, child, /atom/movable/proc/recursive_move)
|
||||
child = parent
|
||||
parent = child.loc
|
||||
|
||||
/********************
|
||||
* Movement Handling *
|
||||
********************/
|
||||
|
||||
/atom/movable/proc/move_to_destination(var/atom/movable/am, var/old_loc, var/new_loc)
|
||||
var/turf/T = get_turf(new_loc)
|
||||
if(T && T != loc)
|
||||
forceMove(T)
|
||||
|
||||
/atom/movable/proc/recursive_move(var/atom/movable/am, var/old_loc, var/new_loc)
|
||||
moved_event.raise_event(list(src, old_loc, new_loc))
|
||||
|
||||
/atom/Entered(var/atom/movable/am, atom/old_loc)
|
||||
..()
|
||||
moved_event.raise_event(am, old_loc, am.loc)
|
||||
|
||||
/atom/movable/Entered(var/atom/movable/am, atom/old_loc)
|
||||
..()
|
||||
if(moved_event.has_listeners(am) && !moved_event.is_listening(src, am))
|
||||
moved_event.register(src, am, /atom/movable/proc/recursive_move)
|
||||
|
||||
/atom/movable/Exited(var/atom/movable/am, atom/old_loc)
|
||||
..()
|
||||
if(moved_event.is_listening(src, am, /atom/movable/proc/recursive_move))
|
||||
moved_event.unregister(src, am)
|
||||
60
code/datums/observation/observation.dm
Normal file
60
code/datums/observation/observation.dm
Normal file
@@ -0,0 +1,60 @@
|
||||
/datum/observ
|
||||
var/name = "Unnamed Event"
|
||||
var/expected_type = /datum
|
||||
var/list/listeners_assoc
|
||||
|
||||
/datum/observ/New()
|
||||
all_observable_events.events += src
|
||||
listeners_assoc = list()
|
||||
..()
|
||||
|
||||
/datum/observ/proc/is_listening(var/eventSource, var/datum/procOwner, var/proc_call)
|
||||
var/listeners = listeners_assoc[eventSource]
|
||||
if(!listeners)
|
||||
return FALSE
|
||||
|
||||
var/stored_proc_call = listeners[procOwner]
|
||||
return stored_proc_call && (!proc_call || stored_proc_call == proc_call)
|
||||
|
||||
/datum/observ/proc/has_listeners(var/eventSource)
|
||||
var/list/listeners = listeners_assoc[eventSource]
|
||||
return LAZYLEN(listeners)
|
||||
|
||||
/datum/observ/proc/register(var/eventSource, var/datum/procOwner, var/proc_call)
|
||||
if(!(eventSource && procOwner && procOwner))
|
||||
return FALSE
|
||||
if(istype(eventSource, /datum/observ))
|
||||
return FALSE
|
||||
|
||||
if(!istype(eventSource, expected_type))
|
||||
CRASH("Unexpected type. Expected [expected_type], was [eventSource]")
|
||||
|
||||
LAZYINITLIST(listeners_assoc[eventSource])
|
||||
listeners_assoc[eventSource][procOwner] = proc_call
|
||||
destroyed_event.register(procOwner, src, /datum/observ/proc/unregister)
|
||||
return TRUE
|
||||
|
||||
/datum/observ/proc/unregister(var/eventSource, var/datum/procOwner)
|
||||
if(!(eventSource && procOwner))
|
||||
return FALSE
|
||||
if(istype(eventSource, /datum/observ))
|
||||
return FALSE
|
||||
|
||||
var/list/listeners = listeners_assoc[eventSource]
|
||||
if(!listeners)
|
||||
return FALSE
|
||||
|
||||
listeners -= procOwner
|
||||
if (!listeners.len)
|
||||
listeners_assoc -= eventSource
|
||||
destroyed_event.unregister(procOwner, src)
|
||||
return TRUE
|
||||
|
||||
/datum/observ/proc/raise_event(...)
|
||||
if(!args.len)
|
||||
return
|
||||
var/listeners = listeners_assoc[args[1]]
|
||||
if(!listeners)
|
||||
return
|
||||
for(var/listener in listeners)
|
||||
call(listener, listeners[listener])(arglist(args))
|
||||
@@ -49,7 +49,8 @@
|
||||
possible_trading_items = list(
|
||||
/obj/item/weapon/gun/projectile/dartgun/vox = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic = TRADER_BLACKLIST,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = TRADER_BLACKLIST,
|
||||
/obj/item/trash = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/clothing/accessory = TRADER_ALL,
|
||||
|
||||
Reference in New Issue
Block a user