mirror of
https://github.com/Strongleong/ScrapModLoader.git
synced 2024-08-15 00:03:19 +00:00
Refactored methods that do filesystem stuff from ScrapMod
to ModsLauncher
This commit is contained in:
parent
ca870eb66b
commit
8da74ffa6d
2 changed files with 78 additions and 69 deletions
|
@ -1,7 +1,10 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
||||
using Ionic.Zip;
|
||||
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace ScrapModLoader
|
||||
|
@ -9,18 +12,22 @@ namespace ScrapModLoader
|
|||
public class ModsLauncher
|
||||
{
|
||||
public List<ScrapMod> Mods { get; private set; }
|
||||
public List<String> ModsPathes { get; set; }
|
||||
public String ScraplandPath { get; set; }
|
||||
public String ScraplandRemasteredPath { get; set; }
|
||||
public String SelectedGameVersion { get; set; }
|
||||
public String LauncherVersion { get; set; }
|
||||
public String SelectedGamePath { get; set; }
|
||||
|
||||
public ModsLauncher()
|
||||
{
|
||||
Mods = new List<ScrapMod>();
|
||||
ModsPathes = Utils.StringCollectionToList(Settings.Default.ModsPathes);
|
||||
ScraplandPath = Settings.Default.ScraplandPath;
|
||||
ScraplandRemasteredPath = Settings.Default.ScraplandRemasteredPath;
|
||||
SelectedGameVersion = "0.0";
|
||||
LauncherVersion = "0.3";
|
||||
SelectedGamePath = String.Empty;
|
||||
}
|
||||
|
||||
public void ScanMods()
|
||||
|
@ -63,9 +70,12 @@ namespace ScrapModLoader
|
|||
if (displayName == null)
|
||||
continue;
|
||||
|
||||
if (displayName == "Scrapland")
|
||||
if (displayName == "Scrapland" || displayName == "American McGee presents Scrapland")
|
||||
{
|
||||
ScraplandPath = subkey.GetValue("InstallLocation")?.ToString() ?? "";
|
||||
if (ScraplandPath == null || ScraplandPath == String.Empty)
|
||||
throw new KeyNotFoundException("Installed Scrapland found, but unable to locate the instalation folder");
|
||||
|
||||
Settings.Default.ScraplandPath = ScraplandPath;
|
||||
isFound = true;
|
||||
}
|
||||
|
@ -73,6 +83,9 @@ namespace ScrapModLoader
|
|||
if (displayName == "Scrapland Remastered")
|
||||
{
|
||||
ScraplandRemasteredPath = subkey.GetValue("InstallLocation")?.ToString() ?? "";
|
||||
if (ScraplandRemasteredPath == null || ScraplandRemasteredPath == String.Empty)
|
||||
throw new KeyNotFoundException("Installed Scrapland Remastered found, but unable to locate the instalation folder");
|
||||
|
||||
Settings.Default.ScraplandRemasteredPath = ScraplandRemasteredPath;
|
||||
isFound = true;
|
||||
}
|
||||
|
@ -84,21 +97,78 @@ namespace ScrapModLoader
|
|||
|
||||
public void LoadMods()
|
||||
{
|
||||
String gamePath = SelectedGameVersion == "1.0" ? ScraplandPath : ScraplandRemasteredPath;
|
||||
SelectedGamePath = SelectedGameVersion == "1.0" ? ScraplandPath : ScraplandRemasteredPath;
|
||||
|
||||
foreach (ScrapMod mod in Mods)
|
||||
{
|
||||
// TODO: Warning about not loading mods that not supports selected version
|
||||
if (!mod.SupportedGameVersions.Contains(SelectedGameVersion) ||
|
||||
Single.Parse(mod.RequiredLauncher) < Single.Parse(LauncherVersion))
|
||||
Single.Parse(mod.RequiredLauncher, CultureInfo.InvariantCulture) < Single.Parse(LauncherVersion, CultureInfo.InvariantCulture))
|
||||
continue;
|
||||
|
||||
if (mod.Checked)
|
||||
if (!mod.IsEnabled(gamePath))
|
||||
mod.Enable(gamePath, SelectedGameVersion);
|
||||
else
|
||||
if (mod.IsEnabled(gamePath))
|
||||
mod.Disable(gamePath);
|
||||
{
|
||||
if (!IsEnabled(mod))
|
||||
Enable(mod);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (IsEnabled(mod))
|
||||
Disable(mod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean IsLoaded(ScrapMod mod) =>
|
||||
Directory.Exists(SelectedGamePath + @"Mods\" + mod.Name);
|
||||
|
||||
public Boolean IsEnabled(ScrapMod mod)
|
||||
{
|
||||
if (!IsLoaded(mod))
|
||||
return false;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.disabled", SearchOption.AllDirectories))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Enable(ScrapMod mod)
|
||||
{
|
||||
if (!IsLoaded(mod))
|
||||
LoadModToGame(mod);
|
||||
|
||||
if (IsEnabled(mod))
|
||||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.disabled", SearchOption.AllDirectories))
|
||||
File.Move(file, Path.ChangeExtension(file, null));
|
||||
}
|
||||
|
||||
public void Disable(ScrapMod mod)
|
||||
{
|
||||
if (!IsEnabled(mod))
|
||||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(SelectedGamePath + @"Mods\" + mod.Name, "*.packed", SearchOption.AllDirectories))
|
||||
File.Move(file, file + ".disabled");
|
||||
}
|
||||
|
||||
private void LoadModToGame(ScrapMod mod)
|
||||
{
|
||||
String modPath = SelectedGamePath + @"Mods\" + mod.Name;
|
||||
Directory.CreateDirectory(modPath);
|
||||
|
||||
using (ZipFile zipFile = ZipFile.Read(mod.ModPath))
|
||||
{
|
||||
foreach (ZipEntry zipEntry in zipFile)
|
||||
{
|
||||
if (!Path.GetFullPath(zipEntry.FileName).Contains(SelectedGameVersion))
|
||||
continue;
|
||||
|
||||
if (Path.GetExtension(zipEntry.FileName) == ".packed")
|
||||
zipEntry.Extract(modPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,65 +40,6 @@ namespace ScrapModLoader
|
|||
|
||||
}
|
||||
|
||||
|
||||
public Boolean IsLoaded(String gamePath) => Directory.Exists(gamePath + @"Mods\" + Name);
|
||||
|
||||
public Boolean IsEnabled(String gamePath)
|
||||
{
|
||||
if (IsLoaded(gamePath))
|
||||
{
|
||||
foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name))
|
||||
{
|
||||
if (Path.GetExtension(file) == ".disabled")
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Enable(String gamePath, String gameVersion)
|
||||
{
|
||||
if (!IsLoaded(gamePath))
|
||||
LoadModToGame(gamePath, gameVersion);
|
||||
|
||||
if (IsEnabled(gamePath))
|
||||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name))
|
||||
if (Path.GetExtension(file) == ".disabled")
|
||||
File.Move(file, Path.ChangeExtension(file, null));
|
||||
}
|
||||
|
||||
public void Disable(String gamePath)
|
||||
{
|
||||
if (!IsEnabled(gamePath))
|
||||
return;
|
||||
|
||||
foreach (String file in Directory.EnumerateFiles(gamePath + @"Mods\" + Name))
|
||||
if (Path.GetExtension(file) == ".packed")
|
||||
File.Move(file, file + ".disabled");
|
||||
}
|
||||
|
||||
private void LoadModToGame(String gamePath, String gameVersion)
|
||||
{
|
||||
gamePath += @"Mods\" + Name;
|
||||
Directory.CreateDirectory(gamePath);
|
||||
|
||||
using (ZipFile zipFile = ZipFile.Read(ModPath))
|
||||
{
|
||||
foreach (ZipEntry zipEntry in zipFile)
|
||||
{
|
||||
if (!Path.GetFullPath(zipEntry.FileName).Contains(gameVersion))
|
||||
continue;
|
||||
|
||||
if (Path.GetExtension(zipEntry.FileName) == ".packed")
|
||||
zipEntry.Extract(gamePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static ScrapMod LoadFromFile(String path)
|
||||
{
|
||||
using ZipFile zipFile = ZipFile.Read(path);
|
||||
|
@ -117,8 +58,6 @@ namespace ScrapModLoader
|
|||
return mod;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static void LoadConfig(ScrapMod mod, Byte[] buffer)
|
||||
{
|
||||
using MemoryStream sourceStream = new MemoryStream(buffer);
|
||||
|
|
Loading…
Reference in a new issue