diff --git a/code/datums/controllers/explosion_controls.dm b/code/datums/controllers/explosion_controls.dm new file mode 100644 index 0000000..dc9eb3f --- /dev/null +++ b/code/datums/controllers/explosion_controls.dm @@ -0,0 +1,29 @@ +var/datum/explosion_controller/explosions + +/datum/explosion_controller + var/list/queued = list() + + proc/queue(atom/source, turf/epicenter, power, brisance = 1) + queued += new/datum/explosion(source, epicenter, power, brisance) + + proc/process() + if (queued.len) + var/datum/explosion/E = queued[1] + queued -= E + E.fire() + +/datum/explosion + var/atom/source + var/turf/epicenter + var/power + var/brisance + + New(atom/source, turf/epicenter, power, brisance) + src.source = source + src.epicenter = epicenter + src.power = power + src.brisance = brisance + + proc/fire() + handle_queued_explosion_dont_call_this_one_directly_fucknuts(source, epicenter, power, brisance) + diff --git a/code/datums/controllers/process/explosions.dm b/code/datums/controllers/process/explosions.dm new file mode 100644 index 0000000..176e5ab --- /dev/null +++ b/code/datums/controllers/process/explosions.dm @@ -0,0 +1,12 @@ +// handles timed player actions +datum/controller/process/explosions + var/datum/explosion_controller/explosion_controller + + setup() + name = "Explosions" + schedule_interval = 5 + + explosion_controller = explosions + + doWork() + explosion_controller.process() \ No newline at end of file