From 783e9a6465f3ca3f9d2d960b667745b94cf96ecb Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Sun, 16 Oct 2022 10:45:09 -0400 Subject: [PATCH] [MODULAR] make title screen progress bar pacing work a little better (#16861) make progress bar pacing work with numbers better --- .../code/_title_screen_defines.dm | 1 + .../code/title_screen_subsystem.dm | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm b/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm index d9e3f6ec6eb..0d81a1c8e6f 100644 --- a/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm +++ b/modular_skyrat/modules/title_screen/code/_title_screen_defines.dm @@ -4,6 +4,7 @@ #define DEFAULT_TITLE_LOADING_SCREEN 'modular_skyrat/modules/title_screen/icons/loading_screen.gif' #define TITLE_PROGRESS_CACHE_FILE "data/progress_cache.json" +#define TITLE_PROGRESS_CACHE_VERSION "2" #define DEFAULT_TITLE_HTML {" diff --git a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm b/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm index 5471e556536..2d952497859 100644 --- a/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm +++ b/modular_skyrat/modules/title_screen/code/title_screen_subsystem.dm @@ -90,9 +90,15 @@ SUBSYSTEM_DEF(title) // Load map progress cache info progress_json = json_decode(file2text(json_file)) + + // Different format. Purge everything. + if(progress_json["_version"] != TITLE_PROGRESS_CACHE_VERSION) + progress_json.Cut() + return + + // If there's no info about the current map, use the defaults. var/list/map_info = progress_json[SSmapping.config.map_name] if(!islist(map_info)) - // If there's none, use the defaults. return // Get expected total time and subpart time @@ -103,6 +109,8 @@ SUBSYSTEM_DEF(title) var/json_file = file(TITLE_PROGRESS_CACHE_FILE) var/list/map_info = list() + progress_json["_version"] = TITLE_PROGRESS_CACHE_VERSION + if(progress_json[SSmapping.config.map_name]) // Save total time and updated message timings. Latest time is worth 1/4 the "average" map_info["total"] = 0.75 * average_completion_time + 0.25 * (world.timeofday - progress_reference_time) @@ -181,15 +189,21 @@ SUBSYSTEM_DEF(title) * * warning - optional: TRUE to indicate this is an error/warning */ /proc/add_startup_message(msg, warning) - var/msg_dat = {"

[warning ? "☒ " : ""][msg]

"} + // Remove the # second(s) / #s part of the message. + var/static/regex/msg_key_regex = new(@"[0-9.]+( second)?s?!", "ig") - GLOB.startup_messages += msg_dat + // HTML displayed to user + var/msg_html = {"

[warning ? "☒ " : ""][msg]

"} + // Key used to cache the timing info + var/msg_key = msg_key_regex.Replace(msg, "#") + + GLOB.startup_messages += msg_html // If we ran before SStitle initialized, set the ref time now. SStitle.check_progress_reference_time() // Add or update message history info. - var/old_timing = SStitle.startup_message_timings[msg] + var/old_timing = SStitle.startup_message_timings[msg_key] var/new_timing if(!old_timing) // new message @@ -197,11 +211,11 @@ SUBSYSTEM_DEF(title) else // old message. Latest time is worth 1/4 the "average" new_timing = 0.75 * old_timing + 0.25 * (world.timeofday - SStitle.progress_reference_time) - SStitle.startup_message_timings[msg] = new_timing + SStitle.startup_message_timings[msg_key] = new_timing for(var/mob/dead/new_player/new_player in GLOB.new_player_list) if(!new_player.title_screen_is_ready) continue - new_player.client << output(msg_dat, "title_browser:append_terminal_text") + new_player.client << output(msg_html, "title_browser:append_terminal_text") new_player.client << output(list2params(list(new_timing, SStitle.average_completion_time)), "title_browser:update_loading_progress")