Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Assembly-CSharp/ModHooksGlobalSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,10 @@ public class ModHooksGlobalSettings
/// Maximum number of days to preserve modlogs for.
/// </summary>
public int ModlogMaxAge = 7;

/// <summary>
/// Path to load mods from, or null for default ([game folder]/Managed/Mods).
/// </summary>
public string ModsFolder = null;
}
}
37 changes: 21 additions & 16 deletions Assembly-CSharp/ModLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,18 +85,14 @@ public static IEnumerator LoadModsInit(GameObject coroutineHolder)

Logger.APILogger.Log("Starting mod loading");

string managed_path = SystemInfo.operatingSystemFamily switch
{
OperatingSystemFamily.Windows => Path.Combine(Application.dataPath, "Managed"),
OperatingSystemFamily.MacOSX => Path.Combine(Application.dataPath, "Resources", "Data", "Managed"),
OperatingSystemFamily.Linux => Path.Combine(Application.dataPath, "Managed"),
ModHooks.LoadGlobalSettings();
Logger.ClearOldModlogs();

OperatingSystemFamily.Other => null,
Logger.APILogger.LogDebug($"Loading assemblies and constructing mods");

_ => throw new ArgumentOutOfRangeException()
};
string mods = ModHooks.GlobalSettings.ModsFolder ?? GetDefaultModsFolder();

if (managed_path is null)
if (mods is null)
{
LoadState |= ModLoadState.Loaded;

Expand All @@ -105,13 +101,6 @@ public static IEnumerator LoadModsInit(GameObject coroutineHolder)
yield break;
}

ModHooks.LoadGlobalSettings();
Logger.ClearOldModlogs();

Logger.APILogger.LogDebug($"Loading assemblies and constructing mods");

string mods = Path.Combine(managed_path, "Mods");

string[] files = Directory.GetDirectories(mods)
.Except(new string[] { Path.Combine(mods, "Disabled") })
.SelectMany(d => Directory.GetFiles(d, "*.dll"))
Expand Down Expand Up @@ -294,6 +283,22 @@ Assembly Resolve(object sender, ResolveEventArgs args)
UObject.Destroy(coroutineHolder.gameObject);
}

private static string GetDefaultModsFolder()
{
string managed_path = SystemInfo.operatingSystemFamily switch
{
OperatingSystemFamily.Windows => Path.Combine(Application.dataPath, "Managed"),
OperatingSystemFamily.MacOSX => Path.Combine(Application.dataPath, "Resources", "Data", "Managed"),
OperatingSystemFamily.Linux => Path.Combine(Application.dataPath, "Managed"),

OperatingSystemFamily.Other => null,

_ => throw new ArgumentOutOfRangeException()
};

return Path.Combine(managed_path, "Mods");
}

private static void GetPreloads
(
ModInstance[] orderedMods,
Expand Down
Loading