Skip to content

Commit 9094544

Browse files
committed
Storing user preferences to XML and loading them on startup
1 parent 6945e53 commit 9094544

File tree

6 files changed

+153
-11
lines changed

6 files changed

+153
-11
lines changed

Form1.cs

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace QuantumOfSolace
1010
{
1111
public partial class Form1 : Form
1212
{
13+
UserPreferences userPreferences;
1314
// Base address value for pointers.
1415
int baseAddress = 0x0;
1516

@@ -39,28 +40,59 @@ public partial class Form1 : Form
3940
bool disableBalancing;
4041

4142
string labelUrl = "www.pcgamingwiki.com";
42-
string DonateURL = "https://www.twitchalerts.com/donate/suicidemachine";
4343

4444
//Keyboard hook
4545
KeyboardHook.LowLevelKeyboardHook keyboardHook;
4646
Keys toggleKey;
4747

48+
bool initialized = false;
49+
4850

4951
/*------------------
5052
-- INITIALIZATION --
5153
------------------*/
5254
public Form1()
5355
{
56+
userPreferences = UserPreferences.Load();
5457
InitializeComponent();
5558
processName = "JB_LiveEngine_s";
56-
toggleKey = Keys.F5;
59+
LoadUserPreferences();
60+
}
61+
62+
private void LoadUserPreferences()
63+
{
64+
fov = userPreferences.DesiredFOV;
65+
autoModeFOV = userPreferences.DesiredFOVHackEnabled;
66+
67+
fps = userPreferences.DesiredFPS;
68+
autoModeFPS = userPreferences.DesiredFPSHackEnabled;
69+
70+
if (!userPreferences.FullScreenMode)
71+
{
72+
autoModeFullscreen = true;
73+
fullscreen = 0;
74+
}
75+
76+
disableBalancing = userPreferences.NoBalancingMiniGame;
77+
toggleKey = userPreferences.DesiredFPSToggleKey;
5778
}
5879

5980
private void Form1_Shown(object sender, EventArgs e)
6081
{
6182
keyboardHook = new KeyboardHook.LowLevelKeyboardHook();
6283
RegisterHotkeys();
6384
keyboardHook.KeyPressed += KeyboardHook_KeyPressed;
85+
86+
//Set toggles, textboxes
87+
C_AutoModeFOV.Checked = autoModeFOV;
88+
T_InputFOV.Text = fov.ToString();
89+
90+
C_AutoModeFPS.Checked = autoModeFPS;
91+
T_InputFPS.Text = fps.ToString();
92+
93+
C_balance.Checked = disableBalancing;
94+
C_fullscreen.Checked = fullscreen != 0;
95+
initialized = true;
6496
}
6597

6698
private void RegisterHotkeys()
@@ -73,10 +105,10 @@ private void RegisterHotkeys()
73105

74106
private void KeyboardHook_KeyPressed(object sender, KeyEventArgs e)
75107
{
76-
if(C_AutoModeFOV.InvokeRequired)
108+
if (C_AutoModeFOV.InvokeRequired)
77109
{
78110
KeyboardHook_KeyPressedDelagate d = new KeyboardHook_KeyPressedDelagate(ToggleFPSLock);
79-
this.Invoke(d, e );
111+
this.Invoke(d, e);
80112
}
81113
else
82114
{
@@ -118,7 +150,6 @@ private void Timer_Tick(object sender, EventArgs e)
118150
{
119151
System.Threading.Thread.Sleep(100);
120152
//baseAddress = myProcess[0].MainModule.BaseAddress.ToInt32();
121-
//var lenght = myProcess[0].MainModule.ModuleMemorySize;
122153
}
123154
foundProcess = true;
124155

@@ -242,18 +273,21 @@ void freezeBalance()
242273
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
243274
{
244275
keyboardHook.KeyPressed -= KeyboardHook_KeyPressed;
276+
userPreferences.Save();
245277
}
246278

247279
private void C_AutoModeFOV_CheckedChanged(object sender, EventArgs e)
248280
{
249281
autoModeFOV = C_AutoModeFOV.Checked;
282+
userPreferences.DesiredFOVHackEnabled = autoModeFOV;
250283
}
251284

252285
private void B_set_Click(object sender, EventArgs e)
253286
{
254287
if (float.TryParse(T_InputFOV.Text, out float res))
255288
{
256289
fov = res;
290+
userPreferences.DesiredFOV = fov;
257291
}
258292
}
259293

@@ -262,6 +296,7 @@ private void B_setFPS_Click(object sender, EventArgs e)
262296
if (int.TryParse(T_InputFPS.Text, out int resFPS))
263297
{
264298
fps = resFPS;
299+
userPreferences.DesiredFPS = fps;
265300
}
266301
}
267302

@@ -273,6 +308,7 @@ private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs
273308
private void C_AutoModeFPS_CheckedChanged(object sender, EventArgs e)
274309
{
275310
autoModeFPS = C_AutoModeFPS.Checked;
311+
userPreferences.DesiredFPSHackEnabled = autoModeFPS;
276312
}
277313

278314
private void C_windowed_CheckedChanged(object sender, EventArgs e)
@@ -285,20 +321,18 @@ private void C_windowed_CheckedChanged(object sender, EventArgs e)
285321
else
286322
{
287323
autoModeFullscreen = true;
288-
MessageBox.Show("The game will not run in proper windowed mode! The feature is buggy.\n Basically the game, will always remain on top, no matter what.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
324+
if (initialized)
325+
MessageBox.Show("The game will not run in proper windowed mode! The feature is buggy.\n Basically the game, will always remain on top, no matter what.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
289326
fullscreen = 0;
290327
}
328+
userPreferences.FullScreenMode = fullscreen != 0;
291329
}
292330

293331

294332
private void C_balance_CheckedChanged(object sender, EventArgs e)
295333
{
296334
disableBalancing = C_balance.Checked;
297-
}
298-
299-
private void pictureBox1_Click(object sender, EventArgs e)
300-
{
301-
Process.Start(DonateURL);
335+
userPreferences.NoBalancingMiniGame = disableBalancing;
302336
}
303337

304338
private void TB_ToggleKey_KeyDown(object sender, KeyEventArgs e)

QuantumOfSolaceTool.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@
6868
<DependentUpon>Resources.resx</DependentUpon>
6969
</Compile>
7070
<Compile Include="Trainer.cs" />
71+
<Compile Include="UserPreferences.cs" />
72+
<Compile Include="XMLSerialization.cs" />
7173
<EmbeddedResource Include="Form1.resx">
7274
<DependentUpon>Form1.cs</DependentUpon>
7375
</EmbeddedResource>

Release/QuantumOfSolace.exe

2.5 KB
Binary file not shown.

Release/QuantumOfSolace.pdb

8 KB
Binary file not shown.

UserPreferences.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows.Forms;
8+
9+
namespace QuantumOfSolace
10+
{
11+
public class UserPreferences
12+
{
13+
private const string CONFIG_FILE = "QuantumOfSolaceTool.xml";
14+
15+
public bool FullScreenMode { get; set; }
16+
public bool NoBalancingMiniGame { get; set; }
17+
18+
public float DesiredFOV { get; set; }
19+
public bool DesiredFOVHackEnabled { get; set; }
20+
21+
public int DesiredFPS { get; set; }
22+
public bool DesiredFPSHackEnabled { get; set; }
23+
24+
public Keys DesiredFPSToggleKey { get; set; }
25+
26+
27+
public UserPreferences()
28+
{
29+
FullScreenMode = false;
30+
NoBalancingMiniGame = false;
31+
DesiredFOV = 80;
32+
DesiredFOVHackEnabled = false;
33+
DesiredFPS = 60;
34+
DesiredFPSHackEnabled = false;
35+
DesiredFPSToggleKey = Keys.F5;
36+
}
37+
38+
public static UserPreferences Load()
39+
{
40+
if (File.Exists(CONFIG_FILE))
41+
{
42+
var readFile = XMLSerialization.ReadFromXMLFile<UserPreferences>(CONFIG_FILE);
43+
return readFile;
44+
}
45+
else
46+
return new UserPreferences();
47+
}
48+
49+
public void Save()
50+
{
51+
XMLSerialization.SaveObjectToXML<UserPreferences>(this, CONFIG_FILE);
52+
}
53+
}
54+
}

XMLSerialization.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.IO;
3+
using System.Xml.Serialization;
4+
5+
namespace QuantumOfSolace
6+
{
7+
public class XMLSerialization
8+
{
9+
public static T ReadFromXMLFile<T>(string filePath) where T : new()
10+
{
11+
StreamReader reader = null;
12+
try
13+
{
14+
if (!File.Exists(filePath))
15+
return new T();
16+
17+
XmlSerializer serializer = new XmlSerializer(typeof(T));
18+
reader = new StreamReader(filePath);
19+
return (T)serializer.Deserialize(reader);
20+
}
21+
finally
22+
{
23+
if (reader != null)
24+
reader.Close();
25+
}
26+
}
27+
28+
public static void SaveObjectToXML<T>(T objectToStore, string filePath) where T : new()
29+
{
30+
if (!Directory.Exists(Directory.GetParent(filePath).FullName))
31+
Directory.CreateDirectory(Directory.GetParent(filePath).FullName);
32+
33+
StreamWriter writter = null;
34+
35+
try
36+
{
37+
XmlSerializer serializer = new XmlSerializer(typeof(T));
38+
writter = new StreamWriter(filePath);
39+
serializer.Serialize(writter, objectToStore);
40+
}
41+
catch (Exception e)
42+
{
43+
throw e;
44+
}
45+
finally
46+
{
47+
if (writter != null)
48+
writter.Close();
49+
}
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)