Files
Paradise/code/datums/helper_datums/events.dm
Tigercat2000 258f477eb3 /tg/ mecha - Part 1
Start of porting the /tg/station mecha update.
This commit only cleans up the code and adds the proper dependencies for
the mecha.

 - Removes relative pathing from /datum/events
 - Updated Process_Spacemove() to use
   atom/movable/proc/get_spacemove_backup()
   - Basically just makes launching off of unanchored objects in space an
     OOP behaviour
 - Removed styling atrocities and relative pathing from most of the mecha files.
  - Notable exceptions:
   - code/game/mecha/mech_bay.dm
   - code/game/mecha/mech_fabricator.dm
   - code/game/mecha/mecha_construction_paths.dm
   - code/game/mecha/mecha_parts.dm
   - code/game/mecha/mecha_wreckage.dm
   - code/game/mecha/paintkits.dm
 - Removed dyndomove/dyndoattackby/dyndobulletact. No more icky dynamic
   calls. Replaced by specific code for the 3 modules that used it.
 - Refactored module cooldown. It now uses addtimer, and power usage is
   hooked directly into the cooldown calls.
 - Added atom/movable/proc/has_buckled_mobs(). Currently not that useful,
   but, necessary for porting the multi-buckling system from /tg/.
 - Split code/game/mecha/equipment/tools/tools.dm into multiple files.
 - Removed snowflake behaviour from exosuit drill. It now calls
   turf.drill_act(src).
  - Different from /tg/: Allows you to drill any wall/floor normally.
 - Drill no longer gibs mobs. It deals 80 organ damage instead.
 - Drill can be used to harvest dead mobs.
 - Removed all global_iterator systems from mecha and mecha equipment.
   Everything now uses object processing.
 - Mecha now have a turn sound variable and step sound variable. Updated
   all subtypes to use these instead of snowflake domove procs.
 - Removed mecha_do_after, mecha now uses the normal do_after.
 - Removed enter_after, same as above.
 - /obj/mecha/Process_Spacemove no longer strangely calls the user's
   spacemove.
 - /obj/mecha/return_pressure now uses return_air instead of copypasted
   cabin air detection.
 - Same for /obj/mecha/return_temperature
 - Added /obj/mecha/Exited. Basically, properly clears occupant refs,
   even if they teleport out/otherwise exit improperly.
 - Added hooks for mecha action buttons; Didn't implement them yet.
 - Moved mecha UI to code/game/mecha/mecha_topic.dm
 - Fixed turfs not updating atmos when ChangeTurf(/turf/space) is used.
 - Updated visible_message and audible_message. Both now use
   get_mobs_in_view() to ensure that mobs inside containers can see
   messages.
 - Removed /obj/item/mecha_parts/mecha_equipment/tool subtype. It had no
   use. Any subtypes are now just subtypes of
   /obj/item/mecha_parts/mecha_equipment.
2016-08-12 06:14:00 -07:00

69 lines
1.6 KiB
Plaintext

/*
* WARRANTY VOID IF CODE USED
*/
/datum/events
var/list/events
/datum/events/New()
..()
events = new
/datum/events/proc/addEventType(event_type as text)
if(!(event_type in events) || !islist(events[event_type]))
events[event_type] = list()
return 1
return
// Arguments: event_type as text, proc_holder as datum, proc_name as text
// Returns: New event, null on error.
/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text)
if(!event_type || !proc_holder || !proc_name)
return
addEventType(event_type)
var/list/event = events[event_type]
var/datum/event/E = new /datum/event(proc_holder,proc_name)
event += E
return E
// Arguments: event_type as text, any number of additional arguments to pass to event handler
// Returns: null
/datum/events/proc/fireEvent()
//world << "Events in [args[1]] called"
var/list/event = listgetindex(events,args[1])
if(istype(event))
spawn(0)
for(var/datum/event/E in event)
if(!E.Fire(arglist(args.Copy(2))))
clearEvent(args[1],E)
return
// Arguments: event_type as text, E as /datum/event
// Returns: 1 if event cleared, null on error
/datum/events/proc/clearEvent(event_type as text, datum/event/E)
if(!event_type || !E)
return
var/list/event = listgetindex(events,event_type)
event -= E
return 1
/datum/event
var/listener
var/proc_name
/datum/event/New(tlistener,tprocname)
listener = tlistener
proc_name = tprocname
return ..()
/datum/event/proc/Fire()
//world << "Event fired"
if(listener)
call(listener,proc_name)(arglist(args))
return 1
return