From 9e2582cd3f5b2bf6f3e8c2d6434ab06ea97832a7 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 7 May 2017 20:04:31 -0400 Subject: Implement a proper save system --- TimeHACK.Engine/SaveSystem.cs | 87 +++++++++++++++++++++ TimeHACK.Engine/TimeHACK.Engine.csproj | 1 + TimeHACK.Engine/bin/Debug/TimeHACK.Engine.dll | Bin 21504 -> 188928 bytes TimeHACK.Engine/bin/Debug/TimeHACK.Engine.pdb | Bin 26112 -> 58880 bytes TimeHACK.Engine/bin/Release/TimeHACK.Engine.dll | Bin 185344 -> 187392 bytes TimeHACK.Engine/bin/Release/TimeHACK.Engine.pdb | Bin 48640 -> 54784 bytes .../DesignTimeResolveAssemblyReferencesInput.cache | Bin 9073 -> 9298 bytes .../TempPE/Properties.Resources.Designer.cs.dll | Bin 0 -> 5632 bytes .../TimeHACK.Engine.Properties.Resources.resources | Bin 0 -> 155443 bytes .../TimeHACK.Engine.Template.AboutBox95.resources | Bin 0 -> 180 bytes .../TimeHACK.Engine.Template.Infobox95.resources | Bin 0 -> 180 bytes .../TimeHACK.Engine.Template.Win9XBSOD.resources | Bin 0 -> 180 bytes .../TimeHACK.Engine.Template.WinClassic.resources | Bin 0 -> 4593 bytes .../TimeHACK.Engine.csproj.FileListAbsolute.txt | 11 +++ .../TimeHACK.Engine.csproj.GenerateResource.Cache | Bin 0 -> 2531 bytes TimeHACK.Engine/obj/Debug/TimeHACK.Engine.dll | Bin 0 -> 188928 bytes TimeHACK.Engine/obj/Debug/TimeHACK.Engine.pdb | Bin 0 -> 58880 bytes .../TimeHACK.Engine.csproj.GenerateResource.Cache | Bin 2531 -> 2531 bytes TimeHACK.Engine/obj/Release/TimeHACK.Engine.dll | Bin 185344 -> 187392 bytes TimeHACK.Engine/obj/Release/TimeHACK.Engine.pdb | Bin 48640 -> 54784 bytes 20 files changed, 99 insertions(+) create mode 100644 TimeHACK.Engine/SaveSystem.cs create mode 100644 TimeHACK.Engine/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Properties.Resources.resources create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.AboutBox95.resources create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Infobox95.resources create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Win9XBSOD.resources create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.WinClassic.resources create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.FileListAbsolute.txt create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.GenerateResource.Cache create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.dll create mode 100644 TimeHACK.Engine/obj/Debug/TimeHACK.Engine.pdb (limited to 'TimeHACK.Engine') diff --git a/TimeHACK.Engine/SaveSystem.cs b/TimeHACK.Engine/SaveSystem.cs new file mode 100644 index 0000000..c6e19a2 --- /dev/null +++ b/TimeHACK.Engine/SaveSystem.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace TimeHACK.Engine +{ + public static class SaveSystem + { + public static Save CurrentSave { get; private set; } + + public static string GameDirectory + { + get + { + return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "TimeHACK"); + } + } + + public static string ProfileDirectory + { + get + { + return Path.Combine(GameDirectory, "Profiles"); + } + } + + public static bool LoadSave() + { + if(File.Exists(Path.Combine(ProfileDirectory, "user.save"))) + { + //Read base64 string from file + string b64 = File.ReadAllText(Path.Combine(ProfileDirectory, "user.save")); + //Get Unicode byte array + byte[] bytes = Convert.FromBase64String(b64); + //Decode the Unicode + string json = Encoding.UTF8.GetString(bytes); + //Deserialize save object. + CurrentSave = JsonConvert.DeserializeObject(json); + return true; + } + else + { + NewGame(); + return false; + } + } + + public static void NewGame() + { + //TODO: User must set a username....somehow + if (!Directory.Exists(GameDirectory)) + Directory.CreateDirectory(GameDirectory); + + if (!Directory.Exists(ProfileDirectory)) + Directory.CreateDirectory(ProfileDirectory); + + var save = new Save(); + save.ExperiencedStories = new List(); + save.InstalledPrograms = new Dictionary(); + CurrentSave = save; + SaveGame(); + } + + public static void SaveGame() + { + //Serialize the save to JSON. + string json = JsonConvert.SerializeObject(CurrentSave); + //Get JSON bytes (Unicode format). + var bytes = Encoding.UTF8.GetBytes(json); + //Encode the array into Base64. + string b64 = Convert.ToBase64String(bytes); + //Write to disk. + File.WriteAllText(Path.Combine(ProfileDirectory, "user.save"), b64); + } + } + + public class Save + { + public string Username { get; set; } + public Dictionary InstalledPrograms { get; set; } + public List ExperiencedStories { get; set; } + } +} diff --git a/TimeHACK.Engine/TimeHACK.Engine.csproj b/TimeHACK.Engine/TimeHACK.Engine.csproj index ecb6b48..14707ae 100644 --- a/TimeHACK.Engine/TimeHACK.Engine.csproj +++ b/TimeHACK.Engine/TimeHACK.Engine.csproj @@ -47,6 +47,7 @@ + Form diff --git a/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.dll b/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.dll index e569db6..66cdf05 100644 Binary files a/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.dll and b/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.dll differ diff --git a/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.pdb b/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.pdb index 668c688..763326d 100644 Binary files a/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.pdb and b/TimeHACK.Engine/bin/Debug/TimeHACK.Engine.pdb differ diff --git a/TimeHACK.Engine/bin/Release/TimeHACK.Engine.dll b/TimeHACK.Engine/bin/Release/TimeHACK.Engine.dll index 4f815b0..25b26f2 100644 Binary files a/TimeHACK.Engine/bin/Release/TimeHACK.Engine.dll and b/TimeHACK.Engine/bin/Release/TimeHACK.Engine.dll differ diff --git a/TimeHACK.Engine/bin/Release/TimeHACK.Engine.pdb b/TimeHACK.Engine/bin/Release/TimeHACK.Engine.pdb index 8f7944b..fd4f046 100644 Binary files a/TimeHACK.Engine/bin/Release/TimeHACK.Engine.pdb and b/TimeHACK.Engine/bin/Release/TimeHACK.Engine.pdb differ diff --git a/TimeHACK.Engine/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/TimeHACK.Engine/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index bac2e0d..dc47b2a 100644 Binary files a/TimeHACK.Engine/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and b/TimeHACK.Engine/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/TimeHACK.Engine/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/TimeHACK.Engine/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll new file mode 100644 index 0000000..fc9ddba Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Properties.Resources.resources b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Properties.Resources.resources new file mode 100644 index 0000000..db7dda3 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Properties.Resources.resources differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.AboutBox95.resources b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.AboutBox95.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.AboutBox95.resources differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Infobox95.resources b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Infobox95.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Infobox95.resources differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Win9XBSOD.resources b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Win9XBSOD.resources new file mode 100644 index 0000000..6c05a97 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.Win9XBSOD.resources differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.WinClassic.resources b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.WinClassic.resources new file mode 100644 index 0000000..690267a Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.Template.WinClassic.resources differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.FileListAbsolute.txt b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..446887b --- /dev/null +++ b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\bin\Debug\TimeHACK.Engine.dll +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\bin\Debug\TimeHACK.Engine.pdb +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\bin\Debug\Newtonsoft.Json.dll +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.Properties.Resources.resources +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.Template.Win9XBSOD.resources +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.Template.AboutBox95.resources +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.Template.Infobox95.resources +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.Template.WinClassic.resources +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.csproj.GenerateResource.Cache +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.dll +C:\Users\Michael\Documents\TimeHACK\TimeHACK.Engine\obj\Debug\TimeHACK.Engine.pdb diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.GenerateResource.Cache b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.GenerateResource.Cache new file mode 100644 index 0000000..49ae6a2 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.csproj.GenerateResource.Cache differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.dll b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.dll new file mode 100644 index 0000000..66cdf05 Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.dll differ diff --git a/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.pdb b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.pdb new file mode 100644 index 0000000..763326d Binary files /dev/null and b/TimeHACK.Engine/obj/Debug/TimeHACK.Engine.pdb differ diff --git a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.csproj.GenerateResource.Cache b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.csproj.GenerateResource.Cache index 06332ab..832bf29 100644 Binary files a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.csproj.GenerateResource.Cache and b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.csproj.GenerateResource.Cache differ diff --git a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.dll b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.dll index 4f815b0..25b26f2 100644 Binary files a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.dll and b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.dll differ diff --git a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.pdb b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.pdb index 8f7944b..fd4f046 100644 Binary files a/TimeHACK.Engine/obj/Release/TimeHACK.Engine.pdb and b/TimeHACK.Engine/obj/Release/TimeHACK.Engine.pdb differ -- cgit v1.2.3