NorbiPeti
b4d64c50d0
Fixed the game folder method returning the library file Checking the game's exe when starting Added support for the preview branch of the game Added support for preview versions of mods
148 lines
5 KiB
C#
148 lines
5 KiB
C#
using GCMM.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace GCMM
|
|
{
|
|
partial class MainForm
|
|
{
|
|
public void UpdateButton(Button button, bool enabled)
|
|
{
|
|
if (enabled)
|
|
{
|
|
button.ForeColor = Color.Lime;
|
|
button.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 40, 0);
|
|
button.FlatAppearance.MouseDownBackColor = Color.Green;
|
|
}
|
|
else
|
|
{
|
|
button.ForeColor = Color.Green;
|
|
button.FlatAppearance.MouseOverBackColor = Color.Black;
|
|
button.FlatAppearance.MouseDownBackColor = Color.Black;
|
|
}
|
|
}
|
|
|
|
public string GetGameFolder()
|
|
{ //TODO
|
|
string libs;
|
|
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
|
libs = @"C:\Program Files (x86)\Steam\steamapps\libraryfolders.vdf";
|
|
else
|
|
return null;
|
|
foreach (var line in File.ReadAllLines(libs).Concat(new[] {@"C:\Program Files (x86)\Steam\"}))
|
|
{
|
|
var regex = new Regex("\\t\"\\d+\"\\t\\t\"(.+)\"");
|
|
var match = regex.Match(line);
|
|
if (!match.Success)
|
|
continue;
|
|
string library = match.Groups[1].Value.Replace("\\\\", "\\");
|
|
library += @"\steamapps\common\";
|
|
if (GetExe(library + "Gamecraft") != null)
|
|
return library + "Gamecraft";
|
|
if (GetExe(library + "RobocraftX") != null)
|
|
return library + "RobocraftX";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public string SelectGameFolder()
|
|
{
|
|
var ofd = new OpenFileDialog();
|
|
ofd.Filter = "Gamecraft executable|Gamecraft.exe|Gamecraft Preview executable|GamecraftPreview.exe";
|
|
ofd.Title = "Game location";
|
|
ofd.InitialDirectory = @"C:\Program Files (x86)\Steam\steamapps\common\"; //TODO
|
|
ofd.CheckFileExists = true;
|
|
ofd.ShowDialog();
|
|
if (string.IsNullOrWhiteSpace(ofd.FileName))
|
|
return null;
|
|
return Directory.GetParent(ofd.FileName).FullName;
|
|
}
|
|
|
|
private void CheckStartGame(object sender, EventArgs e)
|
|
{
|
|
Action act = () =>
|
|
{
|
|
if (((sender as Process)?.ExitCode ?? 0) != 0)
|
|
{
|
|
status.Text = "Status: Patching failed";
|
|
return;
|
|
}
|
|
if ((CheckIfPatched() ?? false) || unpatched.Checked)
|
|
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
|
|
Process.Start("steam://run/1078000/");
|
|
else
|
|
Process.Start("xdg-open", "steam://run/1078000/");
|
|
};
|
|
if (InvokeRequired)
|
|
Invoke(act);
|
|
else
|
|
act();
|
|
EndWork(false);
|
|
}
|
|
|
|
public WebClient GetClient()
|
|
{
|
|
var client = new WebClient();
|
|
if (!Settings.Default.UseProxy)
|
|
client.Proxy = null;
|
|
client.Headers.Clear();
|
|
client.Headers[HttpRequestHeader.Accept] = "application/json";
|
|
client.BaseAddress = "https://git.exmods.org";
|
|
return client;
|
|
}
|
|
|
|
private bool working = false;
|
|
/// <summary>
|
|
/// Some simple "locking", only allow one operation at a time
|
|
/// </summary>
|
|
/// <returns>Whether the work can begin</returns>
|
|
public bool BeginWork()
|
|
{
|
|
if (working) return false;
|
|
working = true;
|
|
UpdateButton(playbtn, false);
|
|
UpdateButton(installbtn, false);
|
|
UpdateButton(uninstallbtn, false);
|
|
UpdateButton(settingsbtn, false);
|
|
return true;
|
|
}
|
|
|
|
public void EndWork(bool desc = true)
|
|
{
|
|
working = false;
|
|
UpdateButton(playbtn, true);
|
|
UpdateButton(settingsbtn, true);
|
|
if (desc)
|
|
modlist_SelectedIndexChanged(modlist, null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Path must start with \
|
|
/// </summary>
|
|
/// <param name="path"></param>
|
|
/// <param name="gamepath"></param>
|
|
/// <returns></returns>
|
|
public string GamePath(string path, string gamepath = null)
|
|
{
|
|
return ((gamepath ?? Settings.Default.GamePath) + path).Replace('\\', Path.DirectorySeparatorChar);
|
|
}
|
|
|
|
public string GetExe(string path = null)
|
|
{
|
|
if (File.Exists(GamePath("\\Gamecraft.exe", path)))
|
|
return "Gamecraft.exe";
|
|
if (File.Exists(GamePath("\\GamecraftPreview.exe", path)))
|
|
return "GamecraftPreview.exe";
|
|
return null;
|
|
}
|
|
}
|
|
}
|