mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Make extra included games explicit
This commit is contained in:
parent
d3ea54f4e2
commit
59eb915475
@ -4,10 +4,13 @@ using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Wabbajack.Common.StoreHandlers;
|
||||
|
||||
namespace Wabbajack.Common
|
||||
{
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public enum Game
|
||||
{
|
||||
//MO2 GAMES
|
||||
|
@ -51,18 +51,18 @@ namespace Wabbajack.Common
|
||||
File.WriteAllText(filename, JsonConvert.SerializeObject(obj, Formatting.Indented, JsonSettings));
|
||||
}
|
||||
|
||||
public static void ToJson<T>(this T obj, Stream stream)
|
||||
public static void ToJson<T>(this T obj, Stream stream, bool useGenericSettings = false)
|
||||
{
|
||||
using var tw = new StreamWriter(stream, Encoding.UTF8, bufferSize: 1024, leaveOpen: true);
|
||||
using var writer = new JsonTextWriter(tw);
|
||||
var ser = JsonSerializer.Create(JsonSettings);
|
||||
var ser = JsonSerializer.Create(useGenericSettings ? GenericJsonSettings : JsonSettings);
|
||||
ser.Serialize(writer, obj);
|
||||
}
|
||||
|
||||
public static async ValueTask ToJsonAsync<T>(this T obj, AbsolutePath path)
|
||||
public static async ValueTask ToJsonAsync<T>(this T obj, AbsolutePath path, bool useGenericSettings = false)
|
||||
{
|
||||
await using var fs = await path.Create();
|
||||
obj.ToJson(fs);
|
||||
obj.ToJson(fs, useGenericSettings);
|
||||
}
|
||||
|
||||
public static string ToJson<T>(this T obj, bool useGenericSettings = false)
|
||||
|
@ -783,6 +783,14 @@ namespace Wabbajack.Common
|
||||
.Build();
|
||||
return d.Deserialize<T>(new StringReader(s));
|
||||
}
|
||||
|
||||
public static T FromYaml<T>(this AbsolutePath s)
|
||||
{
|
||||
var d = new DeserializerBuilder()
|
||||
.WithNamingConvention(PascalCaseNamingConvention.Instance)
|
||||
.Build();
|
||||
return d.Deserialize<T>(new StringReader((string)s));
|
||||
}
|
||||
public static void LogStatus(string s)
|
||||
{
|
||||
Status(s);
|
||||
|
19
Wabbajack.Lib/CompilerSettings.cs
Normal file
19
Wabbajack.Lib/CompilerSettings.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System.Threading.Tasks;
|
||||
using Wabbajack.Common;
|
||||
|
||||
namespace Wabbajack.Lib
|
||||
{
|
||||
public class CompilerSettings
|
||||
{
|
||||
public const string FileName = "compiler_settings.json";
|
||||
|
||||
public static async Task<CompilerSettings> Load(AbsolutePath folder)
|
||||
{
|
||||
var path = folder.Combine(FileName);
|
||||
return !path.IsFile ? new CompilerSettings() : path.FromJson<CompilerSettings>();
|
||||
}
|
||||
|
||||
public Game[] IncludedGames { get; set; } = new Game[0];
|
||||
public string[] OtherProfiles { get; set; } = new string[0];
|
||||
}
|
||||
}
|
@ -31,11 +31,8 @@ namespace Wabbajack.Lib
|
||||
public override AbsolutePath GamePath { get; }
|
||||
|
||||
public GameMetaData CompilingGame { get; }
|
||||
|
||||
/// <summary>
|
||||
/// All games available for sourcing during compilation (including the Compiling Game)
|
||||
/// </summary>
|
||||
public List<Game> AvailableGames { get; }
|
||||
|
||||
public CompilerSettings Settings { get; set; }
|
||||
|
||||
public override AbsolutePath ModListOutputFolder => ((RelativePath)"output_folder").RelativeToEntryPoint();
|
||||
|
||||
@ -66,8 +63,7 @@ namespace Wabbajack.Lib
|
||||
CompilingGame = GameRegistry.Games.First(g => g.Value.MO2Name == mo2game).Value;
|
||||
GamePath = new AbsolutePath((string)MO2Ini.General.gamePath.Replace("\\\\", "\\"));
|
||||
ModListOutputFile = outputFile;
|
||||
|
||||
AvailableGames = CompilingGame.CanSourceFrom.Cons(CompilingGame.Game).Where(g => g.MetaData().IsInstalled).ToList();
|
||||
Settings = new CompilerSettings();
|
||||
}
|
||||
|
||||
public AbsolutePath MO2DownloadsFolder
|
||||
@ -91,6 +87,11 @@ namespace Wabbajack.Lib
|
||||
Queue.SetActiveThreadsObservable(ConstructDynamicNumThreads(await RecommendQueueSize()));
|
||||
UpdateTracker.Reset();
|
||||
UpdateTracker.NextStep("Gathering information");
|
||||
|
||||
Utils.Log($"Loading compiler Settings");
|
||||
Settings = await CompilerSettings.Load(MO2ProfileDir);
|
||||
Settings.IncludedGames = Settings.IncludedGames.Add(CompilingGame.Game);
|
||||
|
||||
Info("Looking for other profiles");
|
||||
var otherProfilesPath = MO2ProfileDir.Combine("otherprofiles.txt");
|
||||
SelectedProfiles = new HashSet<string>();
|
||||
@ -121,7 +122,7 @@ namespace Wabbajack.Lib
|
||||
{
|
||||
MO2Folder, GamePath, MO2DownloadsFolder
|
||||
};
|
||||
roots.AddRange(AvailableGames.Select(g => g.MetaData().GameLocation()));
|
||||
roots.AddRange(Settings.IncludedGames.Select(g => g.MetaData().GameLocation()));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -206,7 +207,7 @@ namespace Wabbajack.Lib
|
||||
|
||||
if (UseGamePaths)
|
||||
{
|
||||
foreach (var ag in AvailableGames)
|
||||
foreach (var ag in Settings.IncludedGames)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -508,6 +508,11 @@ namespace Wabbajack.Test
|
||||
var profile = utils.AddProfile();
|
||||
var mod = await utils.AddMod();
|
||||
|
||||
await new CompilerSettings()
|
||||
{
|
||||
IncludedGames = new []{Game.Morrowind}
|
||||
}.ToJsonAsync(utils.MO2Folder.Combine("profiles", profile, CompilerSettings.FileName), true);
|
||||
|
||||
Game.SkyrimSpecialEdition.MetaData().CanSourceFrom = new[] {Game.Morrowind, Game.Skyrim};
|
||||
|
||||
// Morrowind file with different name
|
||||
|
Loading…
Reference in New Issue
Block a user