Skip to content

Commit

Permalink
Merge pull request #226 from Aragas/dev
Browse files Browse the repository at this point in the history
v4.7.2
  • Loading branch information
Aragas authored Jun 18, 2022
2 parents 649b248 + bff4381 commit 6de7419
Show file tree
Hide file tree
Showing 13 changed files with 127 additions and 72 deletions.
8 changes: 4 additions & 4 deletions build/common.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@

<PropertyGroup>
<GameVersion>1.7.2</GameVersion>
<Version>4.7.1</Version>
<Version>4.7.2</Version>
<HarmonyVersion>2.2.1</HarmonyVersion>
<ButterLibVersion>2.1.3</ButterLibVersion>
<ButterLibVersion>2.1.4</ButterLibVersion>
<UIExtenderExVersion>2.2.0</UIExtenderExVersion>
<BuildResourcesVersion>1.0.1.68</BuildResourcesVersion>
<BUTRSharedVersion>2.0.0.82</BUTRSharedVersion>
<BUTRDependencyInjectionVersion>1.0.0.19</BUTRDependencyInjectionVersion>
<BUTRModuleManagerVersion>3.0.97</BUTRModuleManagerVersion>
<HarmonyExtensionsVersion>3.0.0.59</HarmonyExtensionsVersion>
<HarmonyAnalyzerVersion>1.0.1.32</HarmonyAnalyzerVersion>
<HarmonyExtensionsVersion>3.1.0.61</HarmonyExtensionsVersion>
<HarmonyAnalyzerVersion>1.0.1.42</HarmonyAnalyzerVersion>
<LangVersion>9.0</LangVersion>
<Nullable>enable</Nullable>
<PlatformTarget>x64</PlatformTarget>
Expand Down
5 changes: 5 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
---------------------------------------------------------------------------------------------------
Version: 4.7.2
Game Versions: e1.7.2,e1.8.0
* Possible ModLib InformationManager crash fix
* Fixed some Dropdown being empty
---------------------------------------------------------------------------------------------------
Version: 4.7.1
Game Versions: e1.7.2,e1.8.0
* Fixed Dropdown
Expand Down
9 changes: 5 additions & 4 deletions src/MCM.Adapter.ModLibV1.Substitute/Debugging/ModDebug.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
using System;
using ModLib.Utils;

using System;
using System.Diagnostics.CodeAnalysis;

using TaleWorlds.Core;
using TaleWorlds.Library;

namespace ModLib.Debugging
Expand All @@ -11,13 +12,13 @@ public static class ModDebug
[SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "<Pending>")]
public static void ShowError(string message, string title = "", Exception? exception = null)
{
InformationManager.DisplayMessage(new($"ModLibV1: {message}! {exception}", Colors.Red));
InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create($"ModLibV1: {message}! {exception}", Colors.Red));
}

[SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "<Pending>")]
public static void ShowMessage(string message, string title = "", bool nonModal = false)
{
InformationManager.DisplayMessage(new($"ModLibV1: {message}", Colors.Yellow));
InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create($"ModLibV1: {message}", Colors.Yellow));
}

[SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "<Pending>")]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using HarmonyLib.BUTR.Extensions;

using System;
using System.Linq;
using System.Reflection;

namespace ModLib.Utils
{
internal static class InformationManagerUtils
{
private delegate void DisplayMessageV1Delegate(object data);
private static readonly DisplayMessageV1Delegate? DisplayMessageV1;

static InformationManagerUtils()
{
var type = AccessTools2.TypeByName("TaleWorlds.Core.InformationManager") ??
AccessTools2.TypeByName("TaleWorlds.Library.InformationManager");
foreach (var methodInfo in HarmonyLib.AccessTools.GetDeclaredMethods(type) ?? Enumerable.Empty<MethodInfo>())
{
var @params = methodInfo.GetParameters();
if (@params.Length == 1 && @params[0].ParameterType.Name.Equals("InformationMessage", StringComparison.Ordinal))
{
DisplayMessageV1 = AccessTools2.GetDelegate<DisplayMessageV1Delegate>(methodInfo);
}
}
}

public static void DisplayMessage(InformationMessageWrapper? message)
{
if (message is null)
return;

if (DisplayMessageV1 is not null)
{
DisplayMessageV1(message.Object);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using HarmonyLib;
using HarmonyLib.BUTR.Extensions;

using System.Linq;
using System.Reflection;

using TaleWorlds.Library;

namespace ModLib.Utils
{
internal static class InformationMessageUtils
{
private delegate object CtorV1Delegate(string information, Color color);
private static readonly CtorV1Delegate? V1;

static InformationMessageUtils()
{
var type = AccessTools2.TypeByName("TaleWorlds.Core.InformationMessage") ??
AccessTools2.TypeByName("TaleWorlds.Library.InformationMessage");
foreach (var constructorInfo in AccessTools.GetDeclaredConstructors(type, false) ?? Enumerable.Empty<ConstructorInfo>())
{
var @params = constructorInfo.GetParameters();
if (@params.Length == 2 && @params[0].ParameterType == typeof(string) && @params[1].ParameterType == typeof(Color))
{
V1 = AccessTools2.GetDelegate<CtorV1Delegate>(constructorInfo);
}
}
}

public static InformationMessageWrapper? Create(string information, Color color)
{
if (V1 is not null)
{
var obj = V1(information, color);
return InformationMessageWrapper.Create(obj);
}

return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace ModLib.Utils
{
internal sealed record InformationMessageWrapper(object Object)
{
public static InformationMessageWrapper Create(object @object) => new(@object);
}
}
36 changes: 3 additions & 33 deletions src/MCM.UI/GUI/ViewModels/SettingsPropertyVM.Dropdown.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using MCM.Abstractions.Common.ViewModelWrappers;
using MCM.Abstractions.Common.Wrappers;
using MCM.Abstractions.Dropdown;
using MCM.UI.Actions;
using MCM.Utils;

using System.ComponentModel;

Expand All @@ -12,6 +10,8 @@ namespace MCM.UI.GUI.ViewModels
{
internal sealed partial class SettingsPropertyVM : ViewModel
{
private SelectorVMWrapper? _selectorVMWrapper;

[DataSourceProperty]
public bool IsDropdown { get; }
[DataSourceProperty]
Expand All @@ -20,37 +20,7 @@ internal sealed partial class SettingsPropertyVM : ViewModel
public bool IsDropdownCheckbox { get; }

[DataSourceProperty]
public SelectorVMWrapper DropdownValue
{
get => _selectorVMWrapper ??= new SelectorVMWrapper(IsDropdown
? new SelectorWrapper(PropertyReference.Value).Selector
: MCMSelectorVM<MCMSelectorItemVM>.Empty);
set
{
if (IsDropdown && DropdownValue != value)
{
// TODO
URS.Do(new ComplexReferenceTypeAction<object>(PropertyReference, selector =>
{
//selector.ItemList = DropdownValue.ItemList;
if (selector is not null)
{
var wrapper = new SelectedIndexWrapper(selector);
wrapper.SelectedIndex = DropdownValue.SelectedIndex;
}
}, selector =>
{
//selector.ItemList = DropdownValue.ItemList;
if (selector is not null)
{
var wrapper = new SelectedIndexWrapper(selector);
wrapper.SelectedIndex = DropdownValue.SelectedIndex;
}
}));
OnPropertyChanged(nameof(DropdownValue));
}
}
}
public SelectorVMWrapper DropdownValue => _selectorVMWrapper ??= new SelectorVMWrapper(new SelectorWrapper(PropertyReference.Value).Selector);

private void DropdownValue_PropertyChanged(object? obj, PropertyChangedEventArgs args)
{
Expand Down
3 changes: 1 addition & 2 deletions src/MCM.UI/GUI/ViewModels/SettingsPropertyVM.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MCM.Abstractions.Common.ViewModelWrappers;
using MCM.Abstractions.Common.Wrappers;
using MCM.Abstractions.Ref;
using MCM.Abstractions.Settings;
using MCM.Abstractions.Settings.Models;
Expand All @@ -15,8 +16,6 @@ namespace MCM.UI.GUI.ViewModels
{
internal sealed partial class SettingsPropertyVM : ViewModel
{
private SelectorVMWrapper? _selectorVMWrapper;

public ModOptionsVM MainView => SettingsVM.MainView;
public SettingsVM SettingsVM { get; }
public SettingsPropertyGroupVM Group { get; set; } = default!;
Expand Down
22 changes: 11 additions & 11 deletions src/MCM/Abstractions/Common/ViewModelWrappers/SelectorVMWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,28 +64,28 @@ public SelectorVMWrapper(object? @object) : base(@object ?? MCMSelectorVM<MCMSel

_getSelectedIndexDelegate = AccessTools2.GetPropertyGetterDelegate<GetSelectedIndexDelegate>(@object, type, nameof(SelectedIndex));
_setSelectedIndexDelegate = AccessTools2.GetPropertySetterDelegate<SetSelectedIndexDelegate>(@object, type, nameof(SelectedIndex));
_getItemList = AccessTools2.GetDeclaredPropertyGetterDelegate<GetItemListDelegate>(@object, type, nameof(ItemList));
_setItemList = AccessTools2.GetDeclaredPropertySetterDelegate<SetItemListDelegate>(@object, type, nameof(ItemList));
_getHasSingleItem = AccessTools2.GetDeclaredPropertyGetterDelegate<GetHasSingleItemDelegate>(@object, type, nameof(HasSingleItem));
_setHasSingleItem = AccessTools2.GetDeclaredPropertySetterDelegate<SetHasSingleItemDelegate>(@object, type, nameof(HasSingleItem));
_getSelectedItem = AccessTools2.GetDeclaredPropertyGetterDelegate<GetSelectedItemDelegate>(@object, type, nameof(SelectedItem));
_setSelectedItem = AccessTools2.GetDeclaredPropertySetterDelegate<SetSelectedItemDelegate>(@object, type, nameof(SelectedItem));
_setOnChangeAction = AccessTools2.GetDeclaredDelegate<SetOnChangeActionDelegate>(@object, type, nameof(SetOnChangeAction));
_getItemList = AccessTools2.GetPropertyGetterDelegate<GetItemListDelegate>(@object, type, nameof(ItemList));
_setItemList = AccessTools2.GetPropertySetterDelegate<SetItemListDelegate>(@object, type, nameof(ItemList));
_getHasSingleItem = AccessTools2.GetPropertyGetterDelegate<GetHasSingleItemDelegate>(@object, type, nameof(HasSingleItem));
_setHasSingleItem = AccessTools2.GetPropertySetterDelegate<SetHasSingleItemDelegate>(@object, type, nameof(HasSingleItem));
_getSelectedItem = AccessTools2.GetPropertyGetterDelegate<GetSelectedItemDelegate>(@object, type, nameof(SelectedItem));
_setSelectedItem = AccessTools2.GetPropertySetterDelegate<SetSelectedItemDelegate>(@object, type, nameof(SelectedItem));
_setOnChangeAction = AccessTools2.GetDelegate<SetOnChangeActionDelegate>(@object, type, nameof(SetOnChangeAction));
}

public void SetOnChangeAction(Action<SelectorVMWrapper>? onPresetsSelectorChange)
public void SetOnChangeAction(Action<SelectorVMWrapper>? onChangeAction)
{
void SelectorSetOnChangeAction(object selectorVM)
{
if (onPresetsSelectorChange is not null)
if (onChangeAction is not null)
{
onPresetsSelectorChange(this);
onChangeAction(this);
}
}

if (_setOnChangeAction is not null)
{
_setOnChangeAction((Action<object>)((x) => SelectorSetOnChangeAction(x)));
_setOnChangeAction((Action<object>)(SelectorSetOnChangeAction));
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/MCM/Abstractions/Dropdown/MCMSelectorVM.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public int SelectedIndex
if (value != _selectedIndex)
{
_selectedIndex = value;
OnPropertyChangedWithValue(value, nameof(SelectedIndex));
SelectedItem = GetCurrentItem();
OnPropertyChanged(nameof(SelectedIndex));
_onChange?.Invoke(this);
}
}
Expand Down
5 changes: 2 additions & 3 deletions src/MCM/Utils/InformationMessageUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ static InformationMessageUtils()
foreach (var constructorInfo in AccessTools.GetDeclaredConstructors(type, false) ?? Enumerable.Empty<ConstructorInfo>())
{
var @params = constructorInfo.GetParameters();
if (@params.Length == 9)
if (@params.Length == 2 && @params[0].ParameterType == typeof(string) && @params[1].ParameterType == typeof(Color))
{
V1 = AccessTools2.GetDelegate<CtorV1Delegate>(constructorInfo);
}
Expand All @@ -31,8 +31,7 @@ static InformationMessageUtils()
{
if (V1 is not null)
{
var obj = V1(information, color);
return InformationMessageWrapper.Create(obj);
return InformationMessageWrapper.Create(V1(information, color));
}

return null;
Expand Down
9 changes: 1 addition & 8 deletions src/MCM/Utils/InformationMessageWrapper.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
namespace MCM.Utils
{
public sealed class InformationMessageWrapper
public sealed record InformationMessageWrapper(object Object)
{
public static InformationMessageWrapper Create(object @object) => new(@object);

public object Object { get; }

private InformationMessageWrapper(object @object)
{
Object = @object;
}
}
}
13 changes: 7 additions & 6 deletions tests/MCMv4.Tests/TestSettingsV2.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using MCM.Abstractions.Attributes;
using MCM.Abstractions.Attributes.v2;
using MCM.Abstractions.Dropdown;
using MCM.Utils;

using System;

using TaleWorlds.Core;
using TaleWorlds.Library;

namespace MCMv4.Tests
{
Expand Down Expand Up @@ -183,16 +184,16 @@ public class CustomObject

[SettingPropertyButton("Property Button Default Empty", Content = "Default Empty", RequireRestart = false)]
[SettingPropertyGroup("Button")]
public Action PropertyButtonDefaultEmpty { get; set; } = () => { InformationManager.DisplayMessage(new("Default Empty")); };
public Action PropertyButtonDefaultEmpty { get; set; } = () => { InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create("Default Empty", Color.White)); };
[SettingPropertyButton("Property Button Default Text", Content = "Default Text", RequireRestart = false)]
[SettingPropertyGroup("Button")]
public Action PropertyButtonDefaultText { get; set; } = () => { InformationManager.DisplayMessage(new("Default Text")); };
public Action PropertyButtonDefaultText { get; set; } = () => { InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create("Default Text", Color.White)); };
[SettingPropertyButton("Property Button Require Restart", Content = "Require Restart")]
[SettingPropertyGroup("Button")]
public Action PropertyButtonRequireRestart { get; set; } = () => { InformationManager.DisplayMessage(new("Require Restart")); };
public Action PropertyButtonRequireRestart { get; set; } = () => { InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create("Require Restart", Color.White)); };
[SettingPropertyButton("Property Button With Hint", Content = "With Hint: Hint Text", RequireRestart = false, HintText = "Hint Text")]
[SettingPropertyGroup("Button")]
public Action PropertyButtonWithHint { get; set; } = () => { InformationManager.DisplayMessage(new("With Hint: Hint Text")); };
public Action PropertyButtonWithHint { get; set; } = () => { InformationManagerUtils.DisplayMessage(InformationMessageUtils.Create("With Hint: Hint Text", Color.White)); };

public class TestIntFormatter : IFormatProvider, ICustomFormatter
{
Expand All @@ -204,4 +205,4 @@ public string Format(string? format, object? arg, IFormatProvider? formatProvide
}
}
}
}
}

0 comments on commit 6de7419

Please sign in to comment.