Files
Aurora.3/code/controllers/subsystems/assets.dm
2021-04-30 19:10:35 +02:00

66 lines
1.4 KiB
Plaintext

/var/datum/controller/subsystem/assets/SSassets
/datum/controller/subsystem/assets
name = "Assets"
init_order = SS_INIT_ASSETS
flags = SS_BACKGROUND | SS_FIRE_IN_LOBBY
wait = 1
var/list/cache = list()
var/list/target_clients = list()
var/list/currentrun
/datum/controller/subsystem/assets/New()
NEW_SS_GLOBAL(SSassets)
/datum/controller/subsystem/assets/stat_entry()
..("C:[target_clients.len]")
/datum/controller/subsystem/assets/Initialize(timeofday)
for(var/type in typesof(/datum/asset))
var/datum/asset/A = type
if (type != initial(A._abstract))
get_asset_datum(type)
CHECK_TICK
for (var/client/C in global.clients)
handle_connect(C)
..()
/datum/controller/subsystem/assets/proc/handle_disconnect(client/C)
target_clients -= C
if (currentrun)
currentrun -= C
/datum/controller/subsystem/assets/proc/handle_connect(client/C)
if (!C)
CRASH("Client is missing.")
target_clients[C] = cache.Copy()
if (suspended)
wake()
/datum/controller/subsystem/assets/fire(resumed = 0)
if (!resumed)
currentrun = target_clients.Copy()
if (!target_clients.len)
suspend()
while (currentrun.len)
var/client/C = currentrun[currentrun.len]
currentrun.len--
if (!C)
continue
var/list/c_files = target_clients[C]
if (!c_files.len)
target_clients -= C
else
send_asset(C, c_files[1], FALSE)
c_files.Cut(1, 2)
if (MC_TICK_CHECK)
return