mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
Changes the asset cache's on-connect cache to use a ticking subsystem instead of sleeps and timers to slowly send assets to clients.
65 lines
1.4 KiB
Plaintext
65 lines
1.4 KiB
Plaintext
/var/datum/controller/subsystem/assets/SSassets
|
|
|
|
/datum/controller/subsystem/assets
|
|
name = "Assets"
|
|
init_order = SS_INIT_MISC_FIRST
|
|
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) - list(/datum/asset, /datum/asset/simple))
|
|
var/datum/asset/A = new type()
|
|
A.register()
|
|
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
|