Files
Bubberstation/code/controllers/subsystem/dynamic/dynamic_testing.dm
Roxy f3848f1ef2 Renames flatten_list proc to assoc_to_values (#93453)
## About The Pull Request

`/proc/flatten_list()` -> `/proc/assoc_to_values()`, also changes the
code doc to mirror the language of `assoc_to_keys()`'s code doc

## Why It's Good For The Game

Having a proc called `assoc_to_keys` that takes an associative list and
returns a list of the keys, and also having a proc that takes an
associative list and returns a list of the values, and the latter not
being called `assoc_to_values` is very funny

## Changelog
🆑
code: renamed flatten_list proc to assoc_to_values
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-10-14 21:01:09 +00:00

117 lines
4.2 KiB
Plaintext

/// Verb to open the create command report window and send command reports.
ADMIN_VERB(dynamic_tester, R_DEBUG, "Dynamic Tester", "See dynamic probabilities.", ADMIN_CATEGORY_DEBUG)
BLACKBOX_LOG_ADMIN_VERB("Dynamic Tester")
var/datum/dynamic_tester/tgui = new()
tgui.ui_interact(user.mob)
/datum/dynamic_tester
/// Instances of every roundstart ruleset
var/list/roundstart_rulesets = list()
/// Instances of every midround ruleset
var/list/midround_rulesets = list()
/// A formatted report of the weights of each roundstart ruleset, refreshed occasionally and sent to the UI.
var/list/roundstart_ruleset_report = list()
/// A formatted report of the weights of each light midround ruleset, refreshed occasionally and sent to the UI.
var/list/light_midround_ruleset_report = list()
/// A formatted report of the weights of each heavy midround ruleset, refreshed occasionally and sent to the UI.
var/list/heavy_midround_ruleset_report = list()
/// What is the tier we are testing?
var/tier = 1
/// How many players are we testing with?
var/num_players = 10
/datum/dynamic_tester/New()
for(var/datum/dynamic_ruleset/rtype as anything in subtypesof(/datum/dynamic_ruleset/roundstart))
if(!initial(rtype.config_tag))
continue
var/datum/dynamic_ruleset/roundstart/created = new rtype(SSdynamic.get_config())
roundstart_rulesets += created
// snowflake so we can see headrev stats
if(istype(created, /datum/dynamic_ruleset/roundstart/revolution))
var/datum/dynamic_ruleset/roundstart/revolution/revs = created
revs.heads_necessary = 0
for(var/datum/dynamic_ruleset/rtype as anything in subtypesof(/datum/dynamic_ruleset/midround))
if(!initial(rtype.config_tag))
continue
var/datum/dynamic_ruleset/midround/created = new rtype(SSdynamic.get_config())
midround_rulesets += created
update_reports()
/datum/dynamic_tester/ui_state(mob/user)
return ADMIN_STATE(R_DEBUG)
/datum/dynamic_tester/ui_close()
qdel(src)
/datum/dynamic_tester/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "DynamicTester")
ui.open()
/datum/dynamic_tester/ui_static_data(mob/user)
var/list/data = list()
data["tier"] = tier
data["num_players"] = num_players
data["roundstart_ruleset_report"] = assoc_to_values(roundstart_ruleset_report)
data["light_midround_ruleset_report"] = assoc_to_values(light_midround_ruleset_report)
data["heavy_midround_ruleset_report"] = assoc_to_values(heavy_midround_ruleset_report)
return data
/datum/dynamic_tester/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
switch(action)
if("set_num_players")
var/old_num = num_players
num_players = max(text2num(params["num_players"]), 1)
if(old_num != num_players)
update_reports()
return TRUE
if("set_tier")
var/old_tier = tier
tier = max(text2num(params["tier"]), 1)
if(old_tier != tier)
update_reports()
return TRUE
/datum/dynamic_tester/proc/update_reports()
roundstart_ruleset_report.Cut()
for(var/datum/dynamic_ruleset/roundstart/ruleset as anything in roundstart_rulesets)
var/comment = ""
if(istype(ruleset, /datum/dynamic_ruleset/roundstart/revolution))
var/datum/dynamic_ruleset/roundstart/revolution/revs = ruleset
comment = " (Assuming [initial(revs.heads_necessary)] heads of staff)"
roundstart_ruleset_report[ruleset] = list(
"name" = ruleset.name,
"weight" = ruleset.get_weight(num_players, tier),
"max_candidates" = ruleset.get_antag_cap(num_players, ruleset.max_antag_cap || ruleset.min_antag_cap),
"min_candidates" = ruleset.get_antag_cap(num_players, ruleset.min_antag_cap),
"comment" = comment,
)
light_midround_ruleset_report.Cut()
heavy_midround_ruleset_report.Cut()
for(var/datum/dynamic_ruleset/midround/ruleset as anything in midround_rulesets)
var/list/list_to_add = ruleset.midround_type == LIGHT_MIDROUND ? light_midround_ruleset_report : heavy_midround_ruleset_report
list_to_add[ruleset] = list(
"name" = ruleset.name,
"weight" = ruleset.get_weight(num_players, tier),
"max_candidates" = ruleset.get_antag_cap(num_players, ruleset.max_antag_cap || ruleset.min_antag_cap),
"min_candidates" = ruleset.get_antag_cap(num_players, ruleset.min_antag_cap),
)
update_static_data_for_all_viewers()