Merge branch 'master' into development

This commit is contained in:
Lohikar
2017-10-20 13:30:03 -05:00
56 changed files with 355 additions and 300 deletions

View 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()
..()

View File

@@ -0,0 +1,4 @@
var/datum/observ/destroyed/destroyed_event = new()
/datum/observ/destroyed
name = "Destroyed"

View 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)

View 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))

View File

@@ -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,