13 public static string pathBackup
17 return CorePath.RootSave +
"Backup/";
23 public static string pathSaveRoot
27 return CorePath.RootSave;
33 public static string pathCurrentSave
37 return GameIO.pathSaveRoot + Game.id +
"/";
43 public static string pathTemp
47 return GameIO.pathCurrentSave +
"Temp/";
53 public static bool compressSave
57 return EClass.core.config.compressSave && !
EClass.debug.dontCompressSave;
62 public static void ResetTemp()
64 DirectoryInfo directoryInfo =
new DirectoryInfo(
GameIO.pathTemp);
65 if (directoryInfo.Exists)
67 directoryInfo.Delete(
true);
69 IO.CreateDirectory(
GameIO.pathTemp);
73 public static void ClearTemp()
75 DirectoryInfo directoryInfo =
new DirectoryInfo(
GameIO.pathTemp);
76 if (directoryInfo.Exists)
78 DirectoryInfo[] directories = directoryInfo.GetDirectories();
79 for (
int i = 0; i < directories.Length; i++)
81 directories[i].Delete(
true);
83 FileInfo[] files = directoryInfo.GetFiles();
84 for (
int i = 0; i < files.Length; i++)
92 public static void SaveGame()
94 if (
EClass.core.config.game.backupOnSave)
98 string text = JsonConvert.SerializeObject(
EClass.core.game,
GameIO.formatting,
GameIO.jsWriteGame);
99 string path = GameIO.pathCurrentSave +
"game.txt";
100 IO.SaveFile(
GameIO.pathCurrentSave +
"index.txt",
new GameIndex().Create(
EClass.core.game),
false,
null);
103 IO.Compress(path, text);
107 File.WriteAllText(path, text);
109 foreach (DirectoryInfo directoryInfo
in new DirectoryInfo(
GameIO.pathCurrentSave).GetDirectories())
112 if (
int.TryParse(directoryInfo.Name, out key) && !
EClass.game.spatials.map.ContainsKey(key))
114 IO.DeleteDirectory(directoryInfo.FullName);
115 Debug.Log(
"Deleting unused map:" + directoryInfo.FullName);
122 public static void MakeBackup()
128 public static void MakeBackup(
string id,
string suffix =
"")
130 IO.CreateDirectory(
GameIO.pathBackup);
131 string text = GameIO.pathBackup +
id + suffix;
132 IO.DeleteDirectory(text);
133 IO.CopyDir(
GameIO.pathSaveRoot +
id +
"/", text +
"/", (
string s) => s ==
"Temp");
137 public static Game LoadGame(
string id)
141 string path = GameIO.pathSaveRoot +
id +
"/game.txt";
142 return JsonConvert.DeserializeObject<
Game>(IO.IsCompressed(path) ? IO.Decompress(path) : File.ReadAllText(path),
GameIO.jsReadGame);
146 public static void SaveFile(
string path,
object obj)
148 IO.SaveFile(path, obj,
GameIO.compressSave,
GameIO.jsWriteGame);
152 public static T LoadFile<T>(
string path) where T :
new()
154 return IO.LoadFile<T>(path,
GameIO.compressSave,
GameIO.jsReadGame);
158 public static bool FileExist(
string id)
160 return File.Exists(
string.Concat(
new string[]
171 public static void DeleteGame(
string id)
173 if (!Directory.Exists(
GameIO.pathSaveRoot +
id))
177 DirectoryInfo directoryInfo =
new DirectoryInfo(
GameIO.pathSaveRoot +
id);
178 if (directoryInfo.Exists)
180 directoryInfo.Delete(
true);
185 public static void MakeDirectories(
string id)
187 if (!Directory.Exists(
GameIO.pathSaveRoot +
id))
189 Directory.CreateDirectory(
GameIO.pathSaveRoot +
id);
191 if (!Directory.Exists(
GameIO.pathSaveRoot +
id +
"/Temp"))
193 Directory.CreateDirectory(
GameIO.pathSaveRoot +
id +
"/Temp");
198 public static GameIndex LoadIndex(
string id)
200 return IO.LoadFile<
GameIndex>(GameIO.pathSaveRoot +
id +
"/index.txt",
false,
null);
204 public static List<GameIndex> GetGameList()
206 List<GameIndex> list =
new List<GameIndex>();
207 foreach (DirectoryInfo directoryInfo
in new DirectoryInfo(
GameIO.pathSaveRoot).GetDirectories())
209 DirectoryInfo directoryInfo2 = directoryInfo;
210 if (File.Exists(((directoryInfo2 !=
null) ? directoryInfo2.ToString() :
null) +
"/index.txt"))
215 gameIndex.id = directoryInfo.Name;
228 public static void DeleteEmptyGameFolders()
230 foreach (DirectoryInfo directoryInfo
in new DirectoryInfo(
GameIO.pathSaveRoot).GetDirectories())
232 if (directoryInfo.Name !=
"Backup")
234 DirectoryInfo directoryInfo2 = directoryInfo;
235 if (!File.Exists(((directoryInfo2 !=
null) ? directoryInfo2.ToString() :
null) +
"/game.txt"))
237 directoryInfo.Delete(
true);
244 public static string GetNewId()
247 for (
int i = 1; i < 999999; i++)
249 text =
"world " + i.ToString();
250 if (!Directory.Exists(
GameIO.pathSaveRoot + text))
259 public static JsonSerializerSettings jsReadGame =
new JsonSerializerSettings
261 NullValueHandling = NullValueHandling.Ignore,
262 DefaultValueHandling = DefaultValueHandling.Ignore,
263 PreserveReferencesHandling = PreserveReferencesHandling.Objects,
264 TypeNameHandling = TypeNameHandling.Auto,
265 Error =
new EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>(IO.OnError)
269 public static JsonSerializerSettings jsWriteGame =
new JsonSerializerSettings
271 NullValueHandling = NullValueHandling.Ignore,
272 DefaultValueHandling = DefaultValueHandling.Ignore,
273 PreserveReferencesHandling = PreserveReferencesHandling.Objects,
274 TypeNameHandling = TypeNameHandling.Auto,
275 ContractResolver = ShouldSerializeContractResolver.Instance,
276 Error =
new EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>(IO.OnError)
280 public static Formatting formatting = Formatting.Indented;