public static EnumerableModKeySettingsVM Factory(SettingsParameters param, FieldMeta fieldMeta, object?defaultVal) { return(new EnumerableModKeySettingsVM( param.DetectedLoadOrder.Transform(x => x.Listing.ModKey), fieldMeta, defaultVal as IEnumerable <ModKey> ?? Enumerable.Empty <ModKey>())); }
public static IEnumerable <MemberInfo> GetMemberInfos(SettingsParameters param) { return(param.TargetType.GetMembers() .Where(m => m.MemberType == MemberTypes.Property || m.MemberType == MemberTypes.Field) .Where(m => { return m switch { PropertyInfo prop => !prop.IsStatic() && prop.GetSetMethod() != null, FieldInfo field => !field.IsStatic && !field.IsInitOnly, _ => true, }; }) .Where(m => m.GetCustomAttribute <SynthesisIgnoreSetting>() == null) .OrderBy(m => { if (m.TryGetCustomAttribute <SynthesisOrder>(out var order)) { return order.Order; } else { return int.MaxValue; } })); }
public static SettingsNodeVM[] Factory(SettingsParameters param) { return(GetMemberInfos(param) .Select(m => { try { var node = m switch { PropertyInfo prop => MemberFactory(param with { TargetType = prop.PropertyType, DefaultVal = param.DefaultVal == null ? null : prop.GetValue(param.DefaultVal) }, prop), FieldInfo field => MemberFactory(param with { TargetType = field.FieldType, DefaultVal = param.DefaultVal == null ? null : field.GetValue(param.DefaultVal) }, field), _ => throw new ArgumentException(), }; return node; } catch (Exception ex) { throw new Exception($"{param.TargetType} failed to retrieve property {m}", ex); } }) .ToArray()); }
public ObjectSettingsVM(SettingsParameters param, string memberName, Type t) : base(memberName) { _nodes = Factory(param, t) .ToDictionary(x => x.MemberName); Nodes = new ObservableCollection <SettingsNodeVM>(_nodes.Values); }
public void SoundButtonPressed() { SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); myUniqueController.flipSoundSetting(); SettingsParameters.SaveSettings(); }
public static SettingsNodeVM Factory(SettingsParameters param, string memberName, Type type, object?defaultVal) { return(new EnumerableFormLinkSettingsVM( param.LinkCache, type, memberName, defaultVal as IEnumerable <IFormLink> ?? Enumerable.Empty <IFormLink>())); }
/*public void ValidateGameButtonPressed() { * SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); * myUniqueController.setGameMode (AllGameParameters.GAME_MODE_CAMPAIGN); * SceneManager.LoadScene ("WaitScreen"); * }*/ public void ExitButtonPressed() { SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); // Save preferences SettingsParameters.SaveSettings(); Application.Quit(); }
public void MainMenuButtonPressed() { SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); // Save preferences SettingsParameters.SaveSettings(); SceneManager.LoadScene("StartMenu"); }
public static EnumerableObjectSettingsVM Factory(SettingsParameters param, FieldMeta fieldMeta) { var proto = new ObjectSettingsVM(param with { DefaultVal = null }, FieldMeta.Empty with { Parent = fieldMeta.Parent, MainVM = fieldMeta.MainVM, IsPassthrough = true, });
public static EnumerableObjectSettingsVM Factory <TItem, TWrapper>(SettingsParameters param, string memberName, object?defaultVal, Type t) where TWrapper : BasicSettingsVM <TItem>, new() { var ret = new EnumerableObjectSettingsVM(param, memberName, t); if (defaultVal != null) { throw new NotImplementedException(); } return(ret); }
// Use this for initialization void Start() { // Read preferences SettingsParameters.InitializeSettings(); // Start to play the TITLE music myMusicController.startTheMusic(GameMusicController.MUSIC_GAME); // Set the score SetTextValue(); }
public void YesYesButtonPressed() { SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_COIN); SettingsParameters.ResetSettings(); // Get rid of confirmation button Utils.ConfirmationPopUpRemove(); // Start initialization parameters Start(); }
// Use this for initialization void Start() { // Read preferences SettingsParameters.InitializeSettings(); // Reset score and levels myUniqueController.resetScore(); myUniqueController.setCurrenLevel(0); // Start to play the TITLE music myMusicController.startTheMusic(GameMusicController.MUSIC_TITLE); }
// Use this for initialization void Start() { // Initialize data SettingsParameters.InitializeSettings(); levelToDisplay = (SettingsParameters.currentlyReachedLevel + 1); if (levelToDisplay > SettingsParameters.LEVEL_NUMBER) { levelToDisplay = SettingsParameters.LEVEL_NUMBER; } // by default, activate padlock (Cadenas) myCadena.SetActive(true); }
////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // Set all parameters at awake of the scene void Awake() { if (mySettingsParameters == null) { // Create the manager DontDestroyOnLoad(gameObject); mySettingsParameters = this; } else if (mySettingsParameters != this) { // Destroy it to have always only one manager (Singleton Design Pattern) Destroy(gameObject); } }
// Use this for initialization void Start() { // Read preferences SettingsParameters.InitializeSettings(); if (SettingsParameters.settingPlayMusic == true) { myMusicController.startTheMusic(); } else { myMusicController.stopTheMusic(); } }
public ReflectionSettingsVM( SettingsParameters param, Type type, string nickname, string settingsFolder, string settingsSubPath) { Nickname = nickname; SettingsFolder = settingsFolder; SettingsSubPath = settingsSubPath; _nodes = SettingsNodeVM.Factory(param, type) .ToDictionary(x => x.MemberName); Nodes = new ObservableCollection <SettingsNodeVM>(_nodes.Values); CompositeDisposable.Add(_nodes.Values); }
public void MusicButtonPressed() { myUniqueController.flipMusicSetting(); if (SettingsParameters.settingPlayMusic == true) { myMusicController.startTheMusic(); } else { myMusicController.stopTheMusic(); } SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); SettingsParameters.SaveSettings(); }
public static SettingsNodeVM Factory(SettingsParameters param, FieldMeta fieldMeta, string typeName, object?defaultVal) { var defaultKeys = new List <FormKey>(); if (defaultVal is IEnumerable e) { var targetType = e.GetType().GenericTypeArguments[0]; var getter = targetType.GetProperty("FormKey") !; foreach (var item in e) { defaultKeys.Add(FormKey.Factory(getter.GetValue(item) !.ToString())); } } return(new EnumerableFormLinkSettingsVM( param.LinkCache, fieldMeta: fieldMeta, typeName: typeName, defaultKeys)); }
public ReflectionSettingsVM( SettingsParameters param, string nickname, string settingsFolder, string settingsSubPath) { Nickname = nickname; SettingsFolder = settingsFolder; SettingsSubPath = settingsSubPath; ObjVM = new ObjectSettingsVM( param with { MainVM = this }, FieldMeta.Empty with { DisplayName = "Top Level", MainVM = this });
public static DictionarySettingsVM Factory(SettingsParameters param, FieldMeta fieldMeta) { var vals = GetDefaultValDictionary(param.DefaultVal); var proto = SettingsNodeVM.MemberFactory(param with { DefaultVal = null }, member: null); proto.WrapUp(); return(new DictionarySettingsVM( fieldMeta, vals.Select(defVal => { return new KeyValuePair <string, SettingsNodeVM>( defVal.Key.ToString() !, SettingsNodeVM.MemberFactory(param with { DefaultVal = defVal.Value }, member: null)); }).ToArray(), prototype: proto)); }
public static IEnumerable <MemberInfo> GetMemberInfos(SettingsParameters param) { return(param.TargetType.GetMembers() .Where(m => m.MemberType == MemberTypes.Property || m.MemberType == MemberTypes.Field) .Where(m => { return m switch { PropertyInfo prop => !Noggog.MemberInfoExt.IsStatic(prop) && prop.GetSetMethod() != null, FieldInfo field => !field.IsStatic && !field.IsInitOnly, _ => true, }; }) .Where(m => !m.TryGetCustomAttributeByName(nameof(SynthesisIgnoreSetting), out var _)) .OrderBy(m => { return m.GetCustomAttributeValueByName(nameof(SynthesisOrder), nameof(SynthesisOrder.Order), int.MaxValue); })); }
// Use this for initialization void Start() { // Set the stars according to the time SetStarValues(); // Save number of stars for this level in Campaign mode if (myUniqueController.getGameMode() == AllGameParameters.GAME_MODE_CAMPAIGN) { int curLevel = myUniqueController.getCurrenLevel(); if (curLevel > 0) { if (curLevelStars > SettingsParameters.starsForLevel [curLevel - 1]) { // Save stars for this level SettingsParameters.starsForLevel [curLevel - 1] = curLevelStars; // Save parameters in persistant data SettingsParameters.SaveSettings(); } } } }
public static SettingsNodeVM[] Factory(SettingsParameters param, Type type) { var defaultObj = Activator.CreateInstance(type); return(type.GetMembers() .Where(m => m.MemberType == MemberTypes.Property || m.MemberType == MemberTypes.Field) .Select(m => { switch (m) { case PropertyInfo prop: return MemberFactory(param, m.Name, prop.PropertyType, prop.GetValue(defaultObj)); case FieldInfo field: return MemberFactory(param, m.Name, field.FieldType, field.GetValue(defaultObj)); default: throw new ArgumentException(); } }) .ToArray()); }
public static EnumDictionarySettingsVM Factory(SettingsParameters param, FieldMeta fieldMeta, Type enumType) { var vals = GetDefaultValDictionary(param.DefaultVal); var proto = SettingsNodeVM.MemberFactory(param with { DefaultVal = null }, member: null); proto.WrapUp(); return(new EnumDictionarySettingsVM( fieldMeta, Enum.GetNames(enumType).Select(e => { if (!vals.TryGetValue(e, out var defVal)) { defVal = null; } return new KeyValuePair <string, SettingsNodeVM>( e, SettingsNodeVM.MemberFactory(param with { DefaultVal = defVal }, member: null)); }).ToArray(), proto)); }
public void InitializeStarTime() { startTime = SettingsParameters.AdjustValueAccordingToDifficulty(AllGameParameters.TIME_START_MEDIUM, AllGameParameters.TIME_START_DIFFERENCE); }
////////////////////////////////////////////////////////////////////////////////// // Update is called once per frame ////////////////////////////////////////////////////////////////////////////////// void Update() { carafeObject sourceCarafe; carafeObject destinationCarafe; string timeStr; timeStr = myUniqueController.timeMngt(); if (timeStr == null) { // GAME OVER : Timeout !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_GAME_OVER); // Save score in GGPS (and level) GGPS_GameEndManagement(myUniqueController.getGameMode(), myUniqueController.getScore(), myUniqueController.getCurrenLevel()); // Come back to main screen SceneManager.LoadScene("StartMenu"); } else { // Check if bip for last 3 seconds BipForLast3Seconds(); } // Update score text SetTextValue(timeStr); // MOUSE BUTTON DOWN if (Input.GetMouseButtonDown(0)) { // Get the position when the mouse button was DOWN posDown = getMouseClick(); // And get echiquier position clickPosDown = getEchiquerClick(posDown); SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_CLICK); } // MOUSE BUTTON UP if (Input.GetMouseButtonUp(0)) { // Get the position when the mouse button was UP posUp = getMouseClick(); int n = GetCadran(posDown, posUp); clickPosUp = GetPositionFromCadran(clickPosDown, n); // We have to load new Recipient and unload current one if ((GetPositionBoundaries(clickPosUp) == false) || (GetPositionBoundaries(clickPosDown) == false)) { return; } sourceCarafe = theCases[clickPosDown.x, clickPosDown.y].getCaseCarafe(); if (sourceCarafe.getCarafeVolume() == AllGameParameters.VOLUME_0) { return; } // Check if loading FinalCarafe if (checkFinalCarafeMovement()) { // Yes, we load FinaleCarafe SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_COIN); int remainingVolume; remainingVolume = theFinalCarafe.loadCarafe(sourceCarafe.getCarafeVolume(), sourceCarafe.getCarafeColor()); sourceCarafe.unloadCarafe(remainingVolume); // Check if carafe is ACID type if (sourceCarafe.getCarafeType() == AllGameParameters.LIQUID_TYPE_ACID) { sourceCarafe.setCarafeVolume(AllGameParameters.VOLUME_0); sourceCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_WATER); } if (theFinalCarafe.getCarafeVolume() >= 0) { theFinalCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_WATER); } else { // If volume is negative, it is an ACID bottle theFinalCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_ACID); } // Update the display UpdateCarafeInPosition(sourceCarafe, clickPosDown.x, clickPosDown.y); UpdateFinalCarafe(); // CHECK IF PLAYER HAS WIN ! if ((theFinalCarafe.getCarafeColor() == theFinalCarafeTarget.getCarafeColor()) && (theFinalCarafe.getCarafeVolume() == theFinalCarafeTarget.getCarafeVolume())) { // LEVEL FINISHED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_FINISH); // Give score (depends on remaining time) myUniqueController.setTimeValue(); myUniqueController.increaseScore(myUniqueController.giveScoreBonus()); // Check if an Achievement (trophe) can be done for the time GGPS_Manager.GGPS_GainTimeAchievement(myUniqueController.getPassedTimeInSecondsWithDecimal()); // Increment current Level value myUniqueController.incrementCurrenLevel(); // Check if an Achievement (trophe) can be done for the level reached GGPS_Manager.GGPS_GainAchievement(myUniqueController.getGameMode(), myUniqueController.getCurrenLevel()); // Save last reached level in Campaign mode if (myUniqueController.getGameMode() == AllGameParameters.GAME_MODE_CAMPAIGN) { int curLevel = myUniqueController.getCurrenLevel(); // Debug.Log ("FINISHED !! - cureLevel=" + curLevel + " - currentlyReachedLevel=" + SettingsParameters.currentlyReachedLevel); if (curLevel >= SettingsParameters.currentlyReachedLevel) { // Save new game level SettingsParameters.currentlyReachedLevel = curLevel; } // Save parameters in persistant data SettingsParameters.SaveSettings(); // Check if we reached last Screen in Campaign mode if (curLevel == SettingsParameters.LEVEL_NUMBER) { // We reached last level ==> Finished SceneManager.LoadScene("FinishScreen"); return; } } // Load WaiScreen scene SceneManager.LoadScene("WaitScreen"); } return; } // Check if movement is possible (just around current position) if (checkMovement()) { // Determine the source & destination carafes sourceCarafe = theCases[clickPosDown.x, clickPosDown.y].getCaseCarafe(); destinationCarafe = theCases[clickPosUp.x, clickPosUp.y].getCaseCarafe(); // Check if source of destination is a WALL, in this case nothing happens if ((sourceCarafe.getCarafeType() == AllGameParameters.LIQUID_TYPE_WALL) || (destinationCarafe.getCarafeType() == AllGameParameters.LIQUID_TYPE_WALL)) { return; } // movement is OK SoundManager.gameSoundManager.PlaySound(SoundManager.SOUND_COIN); // We have to load new Recipient and unload current one int remainingVolume; remainingVolume = destinationCarafe.loadCarafe(sourceCarafe.getCarafeVolume(), sourceCarafe.getCarafeColor()); sourceCarafe.unloadCarafe(remainingVolume); // Check if carafe is ACID type if (sourceCarafe.getCarafeType() == AllGameParameters.LIQUID_TYPE_ACID) { sourceCarafe.setCarafeVolume(AllGameParameters.VOLUME_0); sourceCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_WATER); } if (destinationCarafe.getCarafeVolume() >= 0) { destinationCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_WATER); } else { // If volume is negative, it is an ACID bottle destinationCarafe.setCarafeType(AllGameParameters.LIQUID_TYPE_ACID); } // Update the display UpdateCarafeInPosition(sourceCarafe, clickPosDown.x, clickPosDown.y); UpdateCarafeInPosition(destinationCarafe, clickPosUp.x, clickPosUp.y); myUniqueController.increaseScore(1); } else { // Debug.LogWarning ("MOV KO"); // TO REMOVE clickPosDown = resetPosition(); clickPosUp = resetPosition(); } } }
public EnumerableObjectSettingsVM(SettingsParameters param, string memberName, Type t) : base(memberName) { _prototype = new ObjectSettingsVM(param, string.Empty, t); Init(); }
public static SettingsNodeVM MemberFactory(SettingsParameters param, MemberInfo?member) { string displayName = GetDisplayName(member); string diskName = GetDiskName(member); string?tooltip = null; if (member != null && member.TryGetCustomAttribute <SynthesisTooltip>(out var toolTipAttr)) { tooltip = toolTipAttr.Text; } var meta = new FieldMeta( DisplayName: displayName, DiskName: diskName, Tooltip: tooltip, MainVM: param.MainVM, Parent: param.Parent, IsPassthrough: false); switch (param.TargetType.Name) { case "Boolean": return(new BoolSettingsVM(meta, param.DefaultVal)); case "SByte": return(new Int8SettingsVM(meta, param.DefaultVal)); case "Int16": return(new Int16SettingsVM(meta, param.DefaultVal)); case "Int32": return(new Int32SettingsVM(meta, param.DefaultVal)); case "Int64": return(new Int64SettingsVM(meta, param.DefaultVal)); case "Byte": return(new UInt8SettingsVM(meta, param.DefaultVal)); case "UInt16": return(new UInt16SettingsVM(meta, param.DefaultVal)); case "UInt32": return(new UInt32SettingsVM(meta, param.DefaultVal)); case "UInt64": return(new UInt64SettingsVM(meta, param.DefaultVal)); case "Double": return(new DoubleSettingsVM(meta, param.DefaultVal)); case "Single": return(new FloatSettingsVM(meta, param.DefaultVal)); case "Decimal": return(new DecimalSettingsVM(meta, param.DefaultVal)); case "String": return(new StringSettingsVM(meta, param.DefaultVal)); case "ModKey": return(new ModKeySettingsVM(param.DetectedLoadOrder.Transform(x => x.Listing.ModKey), meta, param.DefaultVal)); case "FormKey": return(new FormKeySettingsVM(meta, param.DefaultVal)); case "Array`1": case "List`1": case "IEnumerable`1": case "HashSet`1": { var firstGen = param.TargetType.GenericTypeArguments[0]; switch (firstGen.Name) { case "SByte": return(EnumerableNumericSettingsVM.Factory <sbyte, Int8SettingsVM>(meta, param.DefaultVal, new Int8SettingsVM())); case "Int16": return(EnumerableNumericSettingsVM.Factory <short, Int16SettingsVM>(meta, param.DefaultVal, new Int16SettingsVM())); case "Int32": return(EnumerableNumericSettingsVM.Factory <int, Int32SettingsVM>(meta, param.DefaultVal, new Int32SettingsVM())); case "Int64": return(EnumerableNumericSettingsVM.Factory <long, Int64SettingsVM>(meta, param.DefaultVal, new Int64SettingsVM())); case "Byte": return(EnumerableNumericSettingsVM.Factory <byte, UInt8SettingsVM>(meta, param.DefaultVal, new UInt8SettingsVM())); case "UInt16": return(EnumerableNumericSettingsVM.Factory <ushort, UInt16SettingsVM>(meta, param.DefaultVal, new UInt16SettingsVM())); case "UInt32": return(EnumerableNumericSettingsVM.Factory <uint, UInt32SettingsVM>(meta, param.DefaultVal, new UInt32SettingsVM())); case "UInt64": return(EnumerableNumericSettingsVM.Factory <ulong, UInt64SettingsVM>(meta, param.DefaultVal, new UInt64SettingsVM())); case "Double": return(EnumerableNumericSettingsVM.Factory <double, DoubleSettingsVM>(meta, param.DefaultVal, new DoubleSettingsVM())); case "Single": return(EnumerableNumericSettingsVM.Factory <float, FloatSettingsVM>(meta, param.DefaultVal, new FloatSettingsVM())); case "Decimal": return(EnumerableNumericSettingsVM.Factory <decimal, DecimalSettingsVM>(meta, param.DefaultVal, new DecimalSettingsVM())); case "ModKey": return(EnumerableModKeySettingsVM.Factory(param, meta, param.DefaultVal)); case "FormKey": return(EnumerableFormKeySettingsVM.Factory(meta, param.DefaultVal)); case "String": return(EnumerableStringSettingsVM.Factory(meta, param.DefaultVal)); default: { if (firstGen.Name.Contains("FormLink") && firstGen.IsGenericType && firstGen.GenericTypeArguments.Length == 1) { var formLinkGen = firstGen.GenericTypeArguments[0]; return(EnumerableFormLinkSettingsVM.Factory(param, meta, formLinkGen.FullName ?? string.Empty, param.DefaultVal)); } var foundType = param.Assembly.GetType(firstGen.FullName !); if (foundType != null) { if (foundType.IsEnum) { return(EnumerableEnumSettingsVM.Factory(meta, param.DefaultVal, foundType)); } else { return(EnumerableObjectSettingsVM.Factory(param with { TargetType = foundType }, meta)); } } return(new UnknownSettingsVM(meta)); } } } case "Dictionary`2": { var firstGen = param.TargetType.GenericTypeArguments[0]; var secondGen = param.TargetType.GenericTypeArguments[1]; if (member != null && firstGen.IsEnum && (!member.TryGetCustomAttribute <SynthesisStaticEnumDictionary>(out var staticEnumAttr) || staticEnumAttr.Enabled)) { return(EnumDictionarySettingsVM.Factory(param with { TargetType = secondGen }, meta, firstGen)); }
public static SettingsNodeVM MemberFactory(SettingsParameters param, string memberName, Type targetType, object?defaultVal) { switch (targetType.Name) { case "Boolean": return(new BoolSettingsVM(memberName, defaultVal)); case "SByte": return(new Int8SettingsVM(memberName, defaultVal)); case "Int16": return(new Int16SettingsVM(memberName, defaultVal)); case "Int32": return(new Int32SettingsVM(memberName, defaultVal)); case "Int64": return(new Int64SettingsVM(memberName, defaultVal)); case "Byte": return(new UInt8SettingsVM(memberName, defaultVal)); case "UInt16": return(new UInt16SettingsVM(memberName, defaultVal)); case "UInt32": return(new UInt32SettingsVM(memberName, defaultVal)); case "UInt64": return(new UInt64SettingsVM(memberName, defaultVal)); case "Double": return(new DoubleSettingsVM(memberName, defaultVal)); case "Single": return(new FloatSettingsVM(memberName, defaultVal)); case "Decimal": return(new DecimalSettingsVM(memberName, defaultVal)); case "ModKey": return(new ModKeySettingsVM(param.DetectedLoadOrder.Transform(x => x.Listing.ModKey), memberName, defaultVal)); case "FormKey": return(new FormKeySettingsVM(memberName, defaultVal)); case "Array`1": case "List`1": case "IEnumerable`1": { var firstGen = targetType.GenericTypeArguments[0]; switch (firstGen.Name) { case "SByte": return(EnumerableNumericSettingsVM.Factory <sbyte, Int8SettingsVM>(memberName, defaultVal, new Int8SettingsVM())); case "Int16": return(EnumerableNumericSettingsVM.Factory <short, Int16SettingsVM>(memberName, defaultVal, new Int16SettingsVM())); case "Int32": return(EnumerableNumericSettingsVM.Factory <int, Int32SettingsVM>(memberName, defaultVal, new Int32SettingsVM())); case "Int64": return(EnumerableNumericSettingsVM.Factory <long, Int64SettingsVM>(memberName, defaultVal, new Int64SettingsVM())); case "Byte": return(EnumerableNumericSettingsVM.Factory <byte, UInt8SettingsVM>(memberName, defaultVal, new UInt8SettingsVM())); case "UInt16": return(EnumerableNumericSettingsVM.Factory <ushort, UInt16SettingsVM>(memberName, defaultVal, new UInt16SettingsVM())); case "UInt32": return(EnumerableNumericSettingsVM.Factory <uint, UInt32SettingsVM>(memberName, defaultVal, new UInt32SettingsVM())); case "UInt64": return(EnumerableNumericSettingsVM.Factory <ulong, UInt64SettingsVM>(memberName, defaultVal, new UInt64SettingsVM())); case "Double": return(EnumerableNumericSettingsVM.Factory <double, DoubleSettingsVM>(memberName, defaultVal, new DoubleSettingsVM())); case "Single": return(EnumerableNumericSettingsVM.Factory <float, FloatSettingsVM>(memberName, defaultVal, new FloatSettingsVM())); case "Decimal": return(EnumerableNumericSettingsVM.Factory <decimal, DecimalSettingsVM>(memberName, defaultVal, new DecimalSettingsVM())); case "ModKey": return(EnumerableModKeySettingsVM.Factory(param, memberName, defaultVal)); case "FormKey": return(EnumerableFormKeySettingsVM.Factory(memberName, defaultVal)); default: { if (firstGen.Name.Contains("FormLink") && firstGen.IsGenericType && firstGen.GenericTypeArguments.Length == 1) { var formLinkGen = firstGen.GenericTypeArguments[0]; if (!LoquiRegistration.TryGetRegister(formLinkGen, out var regis)) { throw new ArgumentException($"Can't create a formlink control for type: {formLinkGen}"); } return(EnumerableFormLinkSettingsVM.Factory(param, memberName, regis.GetterType, defaultVal)); } var foundType = param.Assembly.GetType(firstGen.FullName !); if (foundType != null) { return(new EnumerableObjectSettingsVM(param, memberName, foundType)); } } return(new UnknownSettingsVM(memberName)); } } case "HashSet`1": { var firstGen = targetType.GenericTypeArguments[0]; switch (firstGen.Name) { case "ModKey": return(EnumerableModKeySettingsVM.Factory(param, memberName, defaultVal)); case "FormKey": return(EnumerableFormKeySettingsVM.Factory(memberName, defaultVal)); default: { if (firstGen.Name.Contains("FormLink") && firstGen.IsGenericType && firstGen.GenericTypeArguments.Length == 1) { var formLinkGen = firstGen.GenericTypeArguments[0]; if (!LoquiRegistration.TryGetRegister(formLinkGen, out var regis)) { throw new ArgumentException($"Can't create a formlink control for type: {formLinkGen}"); } return(EnumerableFormLinkSettingsVM.Factory(param, memberName, regis.GetterType, defaultVal)); } var foundType = param.Assembly.GetType(firstGen.FullName !); if (foundType != null) { return(new EnumerableObjectSettingsVM(param, memberName, foundType)); } } return(new UnknownSettingsVM(memberName)); } } default: { if (targetType.Name.Contains("FormLink") && targetType.IsGenericType && targetType.GenericTypeArguments.Length == 1) { return(new FormLinkSettingsVM(param.LinkCache, memberName, targetType)); } var foundType = param.Assembly.GetType(targetType.FullName !); if (foundType != null) { return(new ObjectSettingsVM(param, memberName, foundType)); } } return(new UnknownSettingsVM(memberName)); } }