Stardew Valley: Fix a bug where walnutsanity would get deactivated even tho ginger island got forced activated (and move some files) (#4311)
This commit is contained in:
68
worlds/stardew_valley/test/options/utils.py
Normal file
68
worlds/stardew_valley/test/options/utils.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from argparse import Namespace
|
||||
from typing import Any, Iterable
|
||||
|
||||
from BaseClasses import PlandoOptions
|
||||
from Options import VerifyKeys
|
||||
from ... import StardewValleyWorld
|
||||
from ...options import StardewValleyOptions, StardewValleyOption
|
||||
|
||||
|
||||
def parse_class_option_keys(test_options: dict[str | StardewValleyOption, Any] | None) -> dict:
|
||||
""" Now the option class is allowed as key. """
|
||||
if test_options is None:
|
||||
return {}
|
||||
parsed_options = {}
|
||||
|
||||
for option, value in test_options.items():
|
||||
if hasattr(option, "internal_name"):
|
||||
assert option.internal_name not in test_options, "Defined two times by class and internal_name"
|
||||
parsed_options[option.internal_name] = value
|
||||
else:
|
||||
assert option in StardewValleyOptions.type_hints, \
|
||||
f"All keys of world_options must be a possible Stardew Valley option, {option} is not."
|
||||
parsed_options[option] = value
|
||||
|
||||
return parsed_options
|
||||
|
||||
|
||||
def fill_dataclass_with_default(test_options: dict[str | StardewValleyOption, Any] | None) -> StardewValleyOptions:
|
||||
test_options = parse_class_option_keys(test_options)
|
||||
|
||||
filled_options = {}
|
||||
for option_name, option_class in StardewValleyOptions.type_hints.items():
|
||||
|
||||
value = option_class.from_any(test_options.get(option_name, option_class.default))
|
||||
|
||||
if issubclass(option_class, VerifyKeys):
|
||||
# Values should already be verified, but just in case...
|
||||
value.verify(StardewValleyWorld, "Tester", PlandoOptions.bosses)
|
||||
|
||||
filled_options[option_name] = value
|
||||
|
||||
return StardewValleyOptions(**filled_options)
|
||||
|
||||
|
||||
def fill_namespace_with_default(test_options: dict[str, Any] | Iterable[dict[str, Any]]) -> Namespace:
|
||||
if isinstance(test_options, dict):
|
||||
test_options = [test_options]
|
||||
|
||||
args = Namespace()
|
||||
for option_name, option_class in StardewValleyOptions.type_hints.items():
|
||||
all_players_option = {}
|
||||
|
||||
for player_id, player_options in enumerate(test_options):
|
||||
# Player id starts at 1
|
||||
player_id += 1
|
||||
player_name = f"Tester{player_id}"
|
||||
|
||||
value = option_class.from_any(player_options.get(option_name, option_class.default))
|
||||
|
||||
if issubclass(option_class, VerifyKeys):
|
||||
# Values should already be verified, but just in case...
|
||||
value.verify(StardewValleyWorld, player_name, PlandoOptions.bosses)
|
||||
|
||||
all_players_option[player_id] = value
|
||||
|
||||
setattr(args, option_name, all_players_option)
|
||||
|
||||
return args
|
||||
Reference in New Issue
Block a user