Skip to content

Commit

Permalink
Merge pull request #423 from Aragas/dev
Browse files Browse the repository at this point in the history
v5.9.0
  • Loading branch information
Aragas authored Jul 17, 2023
2 parents e1be7c7 + 56212b3 commit 2510fce
Show file tree
Hide file tree
Showing 30 changed files with 623 additions and 2,175 deletions.
2 changes: 1 addition & 1 deletion build/common.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

<PropertyGroup>
<GameVersion>1.0.0</GameVersion>
<Version>5.8.4</Version>
<Version>5.9.0</Version>
<HarmonyVersion>2.2.2</HarmonyVersion>
<ButterLibVersion>2.8.11</ButterLibVersion>
<UIExtenderExVersion>2.8.0</UIExtenderExVersion>
Expand Down
4 changes: 4 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
---------------------------------------------------------------------------------------------------
Version: 5.9.0
Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.2.0,v1.2.1
* Added the ability to save Settings Packs
---------------------------------------------------------------------------------------------------
Version: 5.8.4
Game Versions: v1.0.0,v1.0.1,v1.0.2,v1.0.3,v1.1.0,v1.1.1,v1.1.2,v1.1.3,v1.1.4,v1.1.5,v1.2.0,v1.2.1
* Fixed potential Preset import error
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ interface IGlobalSettingsContainer :
ISettingsContainerHasSettingsDefinitions,
ISettingsContainerCanOverride,
ISettingsContainerCanReset,
ISettingsContainerPresets
ISettingsContainerPresets,
ISettingsContainerHasSettingsPack
{

}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using MCM.Abstractions.Base;

using System.Collections.Generic;

namespace MCM.Abstractions
{
#if !BANNERLORDMCM_PUBLIC
internal
#else
public
# endif
interface ISettingsContainerHasSettingsPack
{
IEnumerable<SettingSnapshot> SaveAvailableSnapshots();
IEnumerable<BaseSettings> LoadAvailableSnapshots(IEnumerable<SettingSnapshot> snapshots);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Collections.Generic;

namespace MCM.Abstractions
{
/// <summary>
/// Interface that lists unavailable settings in the global menu
/// </summary>
#if !BANNERLORDMCM_PUBLIC
internal
#else
public
# endif
interface ISettingsContainerHasUnavailable
{
IEnumerable<UnavailableSetting> GetUnavailableSettings();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@
#else
public
# endif
interface IPerCampaignSettingsContainer : ISettingsContainer, ISettingsContainerHasSettingsDefinitions, ISettingsContainerCanOverride, ISettingsContainerCanReset
interface IPerCampaignSettingsContainer :
ISettingsContainer,
ISettingsContainerHasSettingsDefinitions,
ISettingsContainerCanOverride,
ISettingsContainerCanReset,
ISettingsContainerPresets,
ISettingsContainerHasUnavailable,
ISettingsContainerHasSettingsPack
{ }
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,14 @@
#else
public
# endif
interface IPerSaveSettingsContainer : ISettingsContainer, ISettingsContainerHasSettingsDefinitions, ISettingsContainerCanOverride, ISettingsContainerCanReset
interface IPerSaveSettingsContainer :
ISettingsContainer,
ISettingsContainerHasSettingsDefinitions,
ISettingsContainerCanOverride,
ISettingsContainerCanReset,
ISettingsContainerPresets,
ISettingsContainerHasUnavailable,
ISettingsContainerHasSettingsPack
{
void LoadSettings();
}
Expand Down
1 change: 1 addition & 0 deletions src/MCM.Abstractions/GameFeatures/IFileSystemProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,6 @@ interface IFileSystemProvider
bool WriteData(GameFile file, byte[]? data);
byte[]? ReadData(GameFile file);
string? GetSystemPath(GameFile file);
string? GetSystemPath(GameDirectory directory);
}
}
12 changes: 12 additions & 0 deletions src/MCM.Abstractions/Models/SettingSnapshot.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace MCM.Abstractions
{
#if !BANNERLORDMCM_INCLUDE_IN_CODE_COVERAGE
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage, global::System.Diagnostics.DebuggerNonUserCode]
#endif
#if !BANNERLORDMCM_PUBLIC
internal
#else
public
# endif
sealed record SettingSnapshot(string Path, string JsonContent);
}
12 changes: 12 additions & 0 deletions src/MCM.Abstractions/Models/UnavailableSetting.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace MCM.Abstractions
{
#if !BANNERLORDMCM_INCLUDE_IN_CODE_COVERAGE
[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage, global::System.Diagnostics.DebuggerNonUserCode]
#endif
#if !BANNERLORDMCM_PUBLIC
internal
#else
public
# endif
sealed record UnavailableSetting(string Id, string DisplayName, UnavailableSettingType Type);
}
13 changes: 13 additions & 0 deletions src/MCM.Abstractions/Models/UnavailableSettingType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace MCM.Abstractions
{
#if !BANNERLORDMCM_PUBLIC
internal
#else
public
# endif
enum UnavailableSettingType
{
PerCampaign,
PerSave
}
}
3 changes: 3 additions & 0 deletions src/MCM.Abstractions/Providers/BaseSettingsProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,8 @@ abstract class BaseSettingsProvider
public abstract void ResetSettings(BaseSettings settings);
public abstract void OverrideSettings(BaseSettings settings);
public abstract IEnumerable<ISettingsPreset> GetPresets(string id);
public abstract IEnumerable<UnavailableSetting> GetUnavailableSettings();
public abstract IEnumerable<SettingSnapshot> SaveAvailableSnapshots();
public abstract IEnumerable<BaseSettings> LoadAvailableSnapshots(IEnumerable<SettingSnapshot> snapshots);
}
}
7 changes: 7 additions & 0 deletions src/MCM.Bannerlord/GameFeatures/FileSystemProvider.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using MCM.Abstractions.GameFeatures;
using MCM.Internal.Extensions;

using System;
using System.Linq;
Expand Down Expand Up @@ -85,5 +86,11 @@ public bool WriteData(GameFile file, byte[]? data)
var baseFile = new TWPlatformFilePath(new TWPlatformDirectoryPath((PlatformFileType) file.Owner.Type, file.Owner.Path), file.Name);
return PlatformFileHelper.GetFileFullPath(baseFile);
}

public string? GetSystemPath(GameDirectory directory)
{
var baseDirectory = new TWPlatformDirectoryPath((PlatformFileType) directory.Type, directory.Path);
return PlatformFileHelperPCExtended.GetDirectoryFullPath(baseDirectory);
}
}
}
39 changes: 38 additions & 1 deletion src/MCM.Implementation/Containers/BaseSettingsContainer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using MCM.Abstractions.Base;
using MCM.Abstractions.GameFeatures;

using System;
using System.Collections.Generic;
using System.Linq;

Expand All @@ -22,7 +23,8 @@ abstract class BaseSettingsContainer<TSettings> :
ISettingsContainerHasSettingsDefinitions,
ISettingsContainerCanOverride,
ISettingsContainerCanReset,
ISettingsContainerPresets
ISettingsContainerPresets,
ISettingsContainerHasSettingsPack
where TSettings : BaseSettings
{
protected virtual GameDirectory RootFolder { get; } =
Expand Down Expand Up @@ -120,5 +122,40 @@ public bool SavePresets(ISettingsPreset preset)

return preset.SavePreset(settings);
}

/// <inheritdoc />
public IEnumerable<SettingSnapshot> SaveAvailableSnapshots()
{
var jsonFormat = GenericServiceProvider.GetService<JsonSettingsFormat>();
if (jsonFormat is null) yield break;

foreach (var setting in LoadedSettings.Values)
{
var json = jsonFormat.SaveJson(setting);
var folderName = !string.IsNullOrEmpty(setting.FolderName) ? $"{setting.FolderName}/" : string.Empty;
var subFolderName = !string.IsNullOrEmpty(setting.SubFolder) ? $"{setting.SubFolder}/" : string.Empty;
var path = $"{folderName}{subFolderName}{setting.Id}.json";
yield return new(path, json);
}
}

/// <inheritdoc />
public IEnumerable<BaseSettings> LoadAvailableSnapshots(IEnumerable<SettingSnapshot> snapshots)
{
var jsonFormat = GenericServiceProvider.GetService<JsonSettingsFormat>();
if (jsonFormat is null) yield break;

var snapshotDict = snapshots.ToDictionary(x => x.Path, x => x.JsonContent);
foreach (var setting in LoadedSettings.Values)
{
var folderName = !string.IsNullOrEmpty(setting.FolderName) ? $"{setting.FolderName}/" : string.Empty;
var subFolderName = !string.IsNullOrEmpty(setting.SubFolder) ? $"{setting.SubFolder}/" : string.Empty;
var path = $"{folderName}{subFolderName}{setting.Id}.json";
if (snapshotDict.TryGetValue(path, out var json))
{
yield return jsonFormat.LoadFromJson(setting.CreateNew(), json);
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BUTR.DependencyInjection.Logger;
using BUTR.DependencyInjection;
using BUTR.DependencyInjection.Logger;

using MCM.Abstractions;
using MCM.Abstractions.Base;
Expand Down Expand Up @@ -111,5 +112,40 @@ public bool SavePresets(ISettingsPreset preset)

return preset.SavePreset(settings);
}

/// <inheritdoc />
public IEnumerable<SettingSnapshot> SaveAvailableSnapshots()
{
var jsonFormat = GenericServiceProvider.GetService<JsonSettingsFormat>();
if (jsonFormat is null) yield break;

foreach (var setting in LoadedSettings.Values)
{
var json = jsonFormat.SaveJson(setting);
var folderName = !string.IsNullOrEmpty(setting.FolderName) ? $"{setting.FolderName}/" : string.Empty;
var subFolderName = !string.IsNullOrEmpty(setting.SubFolder) ? $"{setting.SubFolder}/" : string.Empty;
var path = $"{folderName}{subFolderName}{setting.Id}.json";
yield return new(path, json);
}
}

/// <inheritdoc />
public IEnumerable<BaseSettings> LoadAvailableSnapshots(IEnumerable<SettingSnapshot> snapshots)
{
var jsonFormat = GenericServiceProvider.GetService<JsonSettingsFormat>();
if (jsonFormat is null) yield break;

var snapshotDict = snapshots.ToDictionary(x => x.Path, x => x.JsonContent);
foreach (var setting in LoadedSettings.Values)
{
var folderName = !string.IsNullOrEmpty(setting.FolderName) ? $"{setting.FolderName}/" : string.Empty;
var subFolderName = !string.IsNullOrEmpty(setting.SubFolder) ? $"{setting.SubFolder}/" : string.Empty;
var path = $"{folderName}{subFolderName}{setting.Id}.json";
if (snapshotDict.TryGetValue(path, out var json))
{
yield return jsonFormat.LoadFromJson(setting.CreateNew(), json);
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,5 +89,7 @@ public void Unregister(FluentPerCampaignSettings settings)

private void GameStarted() => LoadedSettings.Clear();
private void GameEnded() => LoadedSettings.Clear();

public IEnumerable<UnavailableSetting> GetUnavailableSettings() => Enumerable.Empty<UnavailableSetting>();
}
}
Loading

0 comments on commit 2510fce

Please sign in to comment.