mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 10:01:40 +00:00
Automatic glide size adjustment based on move delay. Essentially a port of https://github.com/yogstation13/Yogstation/pull/8132 but that was mostly my code with some fixes. Why again? well it turns out the recent byond fixes to glide size actually worked and solved the issues that were unsolvable. https://file.house/0B3u.mp4 Glide size no longer incorrectly scales at fps, so it works as intended at any framerate with the only stuttering being normal byond suck stuttering.
40 lines
1.5 KiB
Plaintext
40 lines
1.5 KiB
Plaintext
SUBSYSTEM_DEF(time_track)
|
|
name = "Time Tracking"
|
|
wait = 100
|
|
flags = SS_NO_INIT|SS_NO_TICK_CHECK
|
|
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
|
|
|
var/time_dilation_current = 0
|
|
|
|
var/time_dilation_avg_fast = 0
|
|
var/time_dilation_avg = 0
|
|
var/time_dilation_avg_slow = 0
|
|
|
|
var/first_run = TRUE
|
|
|
|
var/last_tick_realtime = 0
|
|
var/last_tick_byond_time = 0
|
|
var/last_tick_tickcount = 0
|
|
|
|
/datum/controller/subsystem/time_track/fire()
|
|
|
|
var/current_realtime = REALTIMEOFDAY
|
|
var/current_byondtime = world.time
|
|
var/current_tickcount = world.time/world.tick_lag
|
|
|
|
if (!first_run)
|
|
var/tick_drift = max(0, (((current_realtime - last_tick_realtime) - (current_byondtime - last_tick_byond_time)) / world.tick_lag))
|
|
|
|
time_dilation_current = tick_drift / (current_tickcount - last_tick_tickcount) * 100
|
|
|
|
time_dilation_avg_fast = MC_AVERAGE_FAST(time_dilation_avg_fast, time_dilation_current)
|
|
time_dilation_avg = MC_AVERAGE(time_dilation_avg, time_dilation_avg_fast)
|
|
time_dilation_avg_slow = MC_AVERAGE_SLOW(time_dilation_avg_slow, time_dilation_avg)
|
|
GLOB.glide_size_multiplier = (current_byondtime - last_tick_byond_time) / (current_realtime - last_tick_realtime)
|
|
else
|
|
first_run = FALSE
|
|
last_tick_realtime = current_realtime
|
|
last_tick_byond_time = current_byondtime
|
|
last_tick_tickcount = current_tickcount
|
|
SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[SQLtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]")))
|