[Long Term] Proper Config GUI
dexman545 opened this issue ยท 1 comments
Design Requirements:
- Equal MC's default accessibility features (narrator, keyboard nav, etc.)
- No text boxes
- I find them absolutely unpleasant to work with
- All config options must be present
- Must not limit config options beyond what the current format allows
- Must be dynamically generated
- Needed as users can specify key/value pairs
- I'm going to forget to add a button whenever I add a config option
- Know which values are provided by default so it can allow the player to reset them to default per option
- Factory reset per config, and universal
- Provide some item/enchant/toolGroupings lookup
- Provide smart autocomplete
- Provide rendered previews
- Show block item, cycle if for material
- Show item, cycle if for tool grouping
- Show something for entities, cycle for groups
Process:
- Design user-facing part of GUI
- Old work scrapped as multienchant selectors were added
- Read config file and generate options
- Implement accesibility options
- Narrator
- Special handing for tool selectors so it doesn't come across as messy
- Keyboard nav
- Translatability
- Not translations themselves
- Narrator
- Save & Write config
An explanation of the config system at the time of writing:
AutoSwitch has 3 config files - basic, material, and usable. Each can be represented by a map of key -> value pairs.
The basic config consists of a set of keys that is non-expandable and known at and before compile-time. Its values are booleans, numerics, and one text input.
Material and usable configs share the same format: a minimum set of keys that are known at and before compile-time. These keys are always present. Their set of keys is not known at compile-time, as it can be expanded during user-time. There are no limits to how much a user can expand this set of keys outside of practical ones. The values of these keys share similar issues:
Each value is an Optional List of ToolSelector
, where a ToolSelector
is a Tool
+ Optional List of Enchant
, where Tool
is either a known ToolGroup
(a String
key in a map of key -> (Optional Tag<Item> and Optional Class)
) or the item's Identifier
, and Enchant
is the enchantment's Identifier
. Neither the ToolSelector
nor Enchant
lists are bounded outside of practical limitations.