105 lines
2.1 KiB
Python
105 lines
2.1 KiB
Python
|
from __future__ import annotations
|
||
|
from enum import IntEnum, auto, Enum
|
||
|
|
||
|
|
||
|
class Toggle(IntEnum):
|
||
|
off = 0
|
||
|
on = 1
|
||
|
|
||
|
@classmethod
|
||
|
def from_text(cls, text: str) -> Toggle:
|
||
|
if text.lower() in {"off", "0", "false", "none", "null", "no"}:
|
||
|
return Toggle.off
|
||
|
else:
|
||
|
return Toggle.on
|
||
|
|
||
|
|
||
|
class Choice(IntEnum):
|
||
|
@classmethod
|
||
|
def from_text(cls, text: str) -> Choice:
|
||
|
for option in cls:
|
||
|
if option.name == text.lower():
|
||
|
return option
|
||
|
raise KeyError(
|
||
|
f'Could not find option "{text}" for "{cls.__name__}", known options are {", ".join(f"{option.name}" for option in cls)}')
|
||
|
|
||
|
|
||
|
class Logic(Choice):
|
||
|
no_glitches = auto()
|
||
|
no_logic = auto()
|
||
|
|
||
|
|
||
|
class Goal(Choice):
|
||
|
ganon = auto()
|
||
|
fast_ganon = auto()
|
||
|
all_dungeons = auto()
|
||
|
pedestal = auto()
|
||
|
triforce_hunt = auto()
|
||
|
|
||
|
|
||
|
class Accessibility(Choice):
|
||
|
locations = auto()
|
||
|
items = auto()
|
||
|
beatable = auto()
|
||
|
|
||
|
|
||
|
class Crystals(Enum):
|
||
|
# can't use IntEnum since there's also random
|
||
|
C0 = 0
|
||
|
C1 = 1
|
||
|
C2 = 2
|
||
|
C3 = 3
|
||
|
C4 = 4
|
||
|
C5 = 5
|
||
|
C6 = 6
|
||
|
C7 = 7
|
||
|
Random = -1
|
||
|
|
||
|
@staticmethod
|
||
|
def from_text(text: str) -> Crystals:
|
||
|
for option in Crystals:
|
||
|
if str(option.value) == text.lower():
|
||
|
return option
|
||
|
return Crystals.Random
|
||
|
|
||
|
|
||
|
class WorldState(Choice):
|
||
|
standard = auto()
|
||
|
open = auto()
|
||
|
retro = auto()
|
||
|
inverted = auto()
|
||
|
|
||
|
|
||
|
class Bosses(Choice):
|
||
|
vanilla = auto()
|
||
|
simple = auto()
|
||
|
full = auto()
|
||
|
chaos = auto()
|
||
|
|
||
|
|
||
|
class Enemies(Choice):
|
||
|
vanilla = auto()
|
||
|
shuffled = auto()
|
||
|
chaos = auto()
|
||
|
|
||
|
|
||
|
mapshuffle = Toggle
|
||
|
compassshuffle = Toggle
|
||
|
keyshuffle = Toggle
|
||
|
bigkeyshuffle = Toggle
|
||
|
hints = Toggle
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
import argparse
|
||
|
|
||
|
test = argparse.Namespace()
|
||
|
test.logic = Logic.from_text("no_logic")
|
||
|
test.mapshuffle = mapshuffle.from_text("ON")
|
||
|
try:
|
||
|
test.logic = Logic.from_text("owg")
|
||
|
except KeyError as e:
|
||
|
print(e)
|
||
|
if test.mapshuffle:
|
||
|
print("Mapshuffle is on")
|
||
|
print(test)
|