108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from enum import Enum
 | 
						|
from typing import Dict, List
 | 
						|
 | 
						|
class GameMode(Enum):
 | 
						|
        Normal = 0
 | 
						|
        Multiworld = 1
 | 
						|
 | 
						|
class Z3Logic(Enum):
 | 
						|
        Normal = 0
 | 
						|
        Nmg = 1
 | 
						|
        Owg = 2
 | 
						|
 | 
						|
class SMLogic(Enum):
 | 
						|
        Normal = 0
 | 
						|
        Hard = 1
 | 
						|
 | 
						|
class SwordLocation(Enum):
 | 
						|
        Randomized = 0
 | 
						|
        Early = 1
 | 
						|
        Uncle = 2   
 | 
						|
 | 
						|
class MorphLocation(Enum):
 | 
						|
        Randomized = 0
 | 
						|
        Early = 1
 | 
						|
        Original = 2
 | 
						|
 | 
						|
class Goal(Enum):
 | 
						|
        DefeatBoth = 0
 | 
						|
 | 
						|
class KeyShuffle(Enum):
 | 
						|
        Null = 0
 | 
						|
        Keysanity = 1
 | 
						|
 | 
						|
class GanonInvincible(Enum):
 | 
						|
        Never = 0
 | 
						|
        BeforeCrystals = 1
 | 
						|
        BeforeAllDungeons = 2
 | 
						|
        Always = 3
 | 
						|
 | 
						|
class Config:
 | 
						|
    GameMode: GameMode = GameMode.Multiworld
 | 
						|
    Z3Logic: Z3Logic = Z3Logic.Normal
 | 
						|
    SMLogic: SMLogic = SMLogic.Normal
 | 
						|
    SwordLocation: SwordLocation= SwordLocation.Randomized
 | 
						|
    MorphLocation: MorphLocation = MorphLocation.Randomized
 | 
						|
    Goal: Goal = Goal.DefeatBoth
 | 
						|
    KeyShuffle: KeyShuffle = KeyShuffle.Null
 | 
						|
    Keysanity: bool = KeyShuffle != KeyShuffle.Null
 | 
						|
    Race: bool = False
 | 
						|
    GanonInvincible: GanonInvincible = GanonInvincible.BeforeCrystals
 | 
						|
 | 
						|
    def __init__(self, options: Dict[str, str]):
 | 
						|
        self.GameMode = self.ParseOption(options, GameMode.Multiworld)
 | 
						|
        self.Z3Logic = self.ParseOption(options, Z3Logic.Normal)
 | 
						|
        self.SMLogic = self.ParseOption(options, SMLogic.Normal)
 | 
						|
        self.SwordLocation = self.ParseOption(options, SwordLocation.Randomized)
 | 
						|
        self.MorphLocation = self.ParseOption(options, MorphLocation.Randomized)
 | 
						|
        self.Goal = self.ParseOption(options, Goal.DefeatBoth)
 | 
						|
        self.GanonInvincible = self.ParseOption(options, GanonInvincible.BeforeCrystals)
 | 
						|
        self.KeyShuffle = self.ParseOption(options, KeyShuffle.Null)
 | 
						|
        self.Keysanity = self.KeyShuffle != KeyShuffle.Null
 | 
						|
        self.Race = self.ParseOptionWith(options, "Race", False)
 | 
						|
 | 
						|
    def ParseOption(self, options:Dict[str, str], defaultValue:Enum):
 | 
						|
        enumKey = defaultValue.__class__.__name__.lower()
 | 
						|
        if (enumKey in options):
 | 
						|
            return defaultValue.__class__[options[enumKey]]
 | 
						|
        return defaultValue
 | 
						|
 | 
						|
    def ParseOptionWith(self, options:Dict[str, str], option:str, defaultValue:bool):
 | 
						|
        if (option.lower() in options):
 | 
						|
            return options[option.lower()]
 | 
						|
        return defaultValue
 | 
						|
 | 
						|
    """ public static RandomizerOption GetRandomizerOption<T>(string description, string defaultOption = "") where T : Enum {
 | 
						|
        var enumType = typeof(T);
 | 
						|
        var values = Enum.GetValues(enumType).Cast<Enum>();
 | 
						|
 | 
						|
        return new RandomizerOption {
 | 
						|
            Key = enumType.Name.ToLower(),
 | 
						|
            Description = description,
 | 
						|
            Type = RandomizerOptionType.Dropdown,
 | 
						|
            Default = string.IsNullOrEmpty(defaultOption) ? GetDefaultValue<T>().ToLString() : defaultOption,
 | 
						|
            Values = values.ToDictionary(k => k.ToLString(), v => v.GetDescription())
 | 
						|
        };
 | 
						|
    }
 | 
						|
 | 
						|
    public static RandomizerOption GetRandomizerOption(string name, string description, bool defaultOption = false) {
 | 
						|
        return new RandomizerOption {
 | 
						|
            Key = name.ToLower(),
 | 
						|
            Description = description,
 | 
						|
            Type = RandomizerOptionType.Checkbox,
 | 
						|
            Default = defaultOption.ToString().ToLower(),
 | 
						|
            Values = new Dictionary<string, string>()
 | 
						|
        };
 | 
						|
    }
 | 
						|
 | 
						|
    public static TEnum GetDefaultValue<TEnum>() where TEnum : Enum {
 | 
						|
        Type t = typeof(TEnum);
 | 
						|
        var attributes = (DefaultValueAttribute[])t.GetCustomAttributes(typeof(DefaultValueAttribute), false);
 | 
						|
        if ((attributes?.Length ?? 0) > 0) {
 | 
						|
            return (TEnum)attributes.First().Value;
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            return default;
 | 
						|
        }
 | 
						|
    } """
 |