Skip to content
Snippets Groups Projects
Commit 4bdf5c89 authored by bionic85's avatar bionic85
Browse files

Simplified the UserDataManager using build in setting thingy from .net

not done yet tho
parent 5b5e5a2b
No related branches found
No related tags found
No related merge requests found
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="PuzzlePlayer_Namespace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<PuzzlePlayer_Namespace.Properties.Settings>
<setting name="ThemeName" serializeAs="String">
<value>Dark</value>
</setting>
<setting name="FontName" serializeAs="String">
<value>Gotham</value>
</setting>
<setting name="FontSize" serializeAs="String">
<value>16</value>
</setting>
<setting name="Money" serializeAs="String">
<value>100</value>
</setting>
</PuzzlePlayer_Namespace.Properties.Settings>
</userSettings>
</configuration>
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace PuzzlePlayer_Namespace.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Dark")]
public string ThemeName {
get {
return ((string)(this["ThemeName"]));
}
set {
this["ThemeName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("Gotham")]
public string FontName {
get {
return ((string)(this["FontName"]));
}
set {
this["FontName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("16")]
public int FontSize {
get {
return ((int)(this["FontSize"]));
}
set {
this["FontSize"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("100")]
public int Money {
get {
return ((int)(this["Money"]));
}
set {
this["Money"] = value;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="PuzzlePlayer_Namespace.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="ThemeName" Type="System.String" Scope="User">
<Value Profile="(Default)">Dark</Value>
</Setting>
<Setting Name="FontName" Type="System.String" Scope="User">
<Value Profile="(Default)">Gotham</Value>
</Setting>
<Setting Name="FontSize" Type="System.Int32" Scope="User">
<Value Profile="(Default)">16</Value>
</Setting>
<Setting Name="Money" Type="System.Int32" Scope="User">
<Value Profile="(Default)">100</Value>
</Setting>
</Settings>
</SettingsFile>
\ No newline at end of file
......@@ -26,7 +26,6 @@ namespace PuzzlePlayer_Namespace
// For storing user settings
private UserData settings;
private static string filePath = "Settings.txt";
public SettingForm()
{
......@@ -42,8 +41,6 @@ namespace PuzzlePlayer_Namespace
Invalidate();
}
private void SetUpUI()
{
this.ClientSize = new Size(1115, 755);
......
......@@ -2,10 +2,12 @@
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using PuzzlePlayer_Namespace.Properties; // for accessing user settings
namespace PuzzlePlayer_Namespace
{
// struct for saving settings
// saves the current selected theme and the font name and size
internal struct UserData(string themeName, string fName, int fSize)
{
public const string prefix = "SETTINGS";
......@@ -76,155 +78,63 @@ namespace PuzzlePlayer_Namespace
// Class for managing and storing user data
internal class UserDataManager
{
private int money;
public int Money { get { return money; } set { UpdateMoney(value); } }
private UserData data;
// properties for getting various settings
public int Money { get { return Settings.Default.Money; } set { SetMoney(value); } }
public Font MainFont { get { return GetMainFont(); } }
public Theme Theme { get { return GetCurrentTheme(); } }
public UserData Data { get { return GetUserSettings(); } set { SetUserData(value); } }
private List<(Theme,bool)> unlockedThemes = new List<(Theme, bool)>();
private static string filePath = "Data.txt";
private const string dataFilePath = "Data.txt";
private const string themeFilePath = "Themes.txt";
private const string moneyPrefix = "DO_NOT_TOUCH_THE_MONEY_CHEATER";
public UserDataManager()
{
money = GetMoney();
data = GetUserSettings();
}
// reads the file and returns a array of strings of each line
private string[] GetDataFileContents()
private void SetMoney(int newValue)
{
if (!File.Exists(filePath)) // if the file doesn't exists then a new one is created with default settings
MakeNewDataFile();
List<String> result = new List<string>();
using (StreamReader reader = new StreamReader(System.IO.File.OpenRead(filePath)))
{
string s = "";
while ((s = reader.ReadLine()) != null)
{
result.Add(s);
}
}
if (result.Count > 0)
return result.ToArray();
else
MakeNewDataFile(); // is dit clean? of nah?
if (newValue < 0)
return;
return GetDataFileContents(); // is dit clean? of nah?
Settings.Default.Money = newValue;
Settings.Default.Save();
}
// writes to the file
private void WriteDataFileContent(string[] toWrite)
private UserData GetUserSettings()
{
if (!File.Exists(filePath)) // if the file doesn't exists then a new one is created with default settings
MakeNewDataFile();
string themeName = Settings.Default.ThemeName;
string fontName = Settings.Default.FontName;
int fontSize = Settings.Default.FontSize;
using (StreamWriter sw = new StreamWriter(filePath))
{
foreach(string s in toWrite)
sw.WriteLine(s);
}
return new UserData(themeName, fontName, fontSize);
}
private int GetMoney()
private void SetUserData(UserData newUserData)
{
string[] dataFile = GetDataFileContents();
foreach (string s in dataFile)
if(s.StartsWith(moneyPrefix))
{
string[] splitted = s.Split('|');
try
{
return int.Parse(splitted[1]);
}
catch (Exception)
{
MakeNewDataFile();
return 100; // default money if the file is broken
}
}
MakeNewDataFile();
return 100; // default money if the file is broken
Settings.Default.FontName = newUserData.fontName;
Settings.Default.FontSize = newUserData.fontSize;
Settings.Default.ThemeName = newUserData.currentThemeName;
Settings.Default.Save();
}
private void UpdateMoney(int newValue)
private Font GetMainFont()
{
if(newValue < 0)
return;
money = newValue;
string fontName = Settings.Default.FontName;
int fontSize = Settings.Default.FontSize;
// write the new value to the data file
// first read the old file and replace the line containing the information for the money with the new value
string[] dataFile = GetDataFileContents();
string newString = $"{moneyPrefix}|{newValue}";
for (int i = 0; i < dataFile.Length; i++)
{
if (dataFile[i].StartsWith(moneyPrefix))
{
dataFile[i] = newString;
break;
}
}
// after modifying write it back
WriteDataFileContent(dataFile);
return new Font(fontName, fontSize);
}
private UserData GetUserSettings()
public void SetMainFont(string fontName, int fontSize)
{
string[] dataFile = GetDataFileContents();
UserData? newSettings = null;
foreach (string s in dataFile)
if (s.StartsWith("SETTINGS"))
{
newSettings = UserData.FromString(s);
break;
}
if (newSettings != null)
return (UserData)newSettings;
else
MakeNewDataFile(); // if the settings could not be read then a new file must be made
return GetUserSettings(); // after the new file is made it is save to call getUserSettings again
Settings.Default.FontName = fontName;
Settings.Default.FontSize = fontSize;
Settings.Default.Save();
}
private void UpdateUserSettings(UserData newUserData)
private Theme GetCurrentTheme()
{
data = newUserData;
// write the new value to the data file
// first read the old file and replace the line containing the information for the money with the new value
string[] dataFile = GetDataFileContents();
for (int i = 0; i < dataFile.Length; i++)
{
if (dataFile[i].StartsWith(UserData.prefix))
{
dataFile[i] = newUserData.ToString();
break;
}
}
// after modifying write it back
WriteDataFileContent(dataFile);
}
// if there is no Settings.txt or it is damaged/modified/unreadable then a new one is created or overwritten
private void MakeNewDataFile()
{
using (StreamWriter writer = File.CreateText(filePath))
{
writer.WriteLine(SettingForm.defaultSettings.ToString()); // get the default settings from SettingsForm
writer.WriteLine($"{moneyPrefix}|100"); // default money is 100
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment