AutoSwitch [Fabric]

AutoSwitch [Fabric]

137k Downloads

[Long Term] Proper Config GUI

dexman545 opened this issue ยท 1 comments

commented

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
  • Save & Write config
commented

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.