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; | |||
|  |         } | |||
|  |     } """
 |