From 8ba408385b9f26eea85c36ca87dae053de486778 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 24 Jul 2021 21:27:56 -0400 Subject: [PATCH] Update options.py to generate JSON files to be used with player-settings pages --- WebHostLib/options.py | 46 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/WebHostLib/options.py b/WebHostLib/options.py index 82e0ccd8..a075ca8a 100644 --- a/WebHostLib/options.py +++ b/WebHostLib/options.py @@ -2,16 +2,56 @@ import os from Utils import __version__ from jinja2 import Template import yaml +import json from worlds.AutoWorld import AutoWorldRegister target_folder = os.path.join("WebHostLib", "static", "generated") + def create(): for game_name, world in AutoWorldRegister.world_types.items(): res = Template(open(os.path.join("WebHostLib", "templates", "options.yaml")).read()).render( - options=world.options, __version__ = __version__, game=game_name, yaml_dump = yaml.dump + options=world.options, __version__=__version__, game=game_name, yaml_dump=yaml.dump ) - with open(os.path.join(target_folder, game_name+".yaml"), "w") as f: - f.write(res) \ No newline at end of file + with open(os.path.join(target_folder, game_name + ".yaml"), "w") as f: + f.write(res) + + # Generate JSON files for player-settings pages + player_settings = { + "readOnly": { + "description": "Generated by https://archipelago.gg/", + "game": game_name, + }, + "generalOptions": { + "name": "Player", + }, + } + + game_options = {} + for option_name, option in world.options.items(): + if option.options: + this_option = { + "type": "select", + "friendlyName": option.friendly_name if hasattr(option, "friendly_name") else option_name, + "description": option.__doc__ if option.__doc__ else "Please document me!", + "defaultValue": None, + "options": [] + } + + for sub_option_name, sub_option_id in option.options.items(): + this_option["options"].append({ + "name": sub_option_name, + "value": sub_option_name, + }) + + if sub_option_id == option.default: + this_option["defaultValue"] = sub_option_name + + game_options[option_name] = this_option + + player_settings["gameOptions"] = game_options + + with open(os.path.join(target_folder, game_name + ".json"), "w") as f: + f.write(json.dumps(player_settings, indent=2, separators=(',', ': ')))