Elin Decompiled Documentation EA 23.253 Nightly
Loading...
Searching...
No Matches
GameIO Class Reference
Inheritance diagram for GameIO:
EClass

Static Public Member Functions

static void Init ()
 
static void ResetTemp ()
 
static void ClearTemp ()
 
static GameIndex SaveGame ()
 
static void MakeBackup (GameIndex index, string suffix="")
 
static bool CanLoad (string root)
 
static Game LoadGame (string id, string root, bool cloud)
 
static void PrepareSteamCloud (string id, string path="")
 
static bool TryLoadSteamCloud (string pathSave)
 
static void UpdateGameIndex (GameIndex i)
 
static void SaveFile (string path, object obj)
 
static T LoadFile< T > (string path)
 
static void DeleteGame (string id, bool cloud, bool deleteBackup=true)
 
static List< GameIndexGetGameList (string path, bool sortByName=false, bool includeEmptyFolder=false)
 
static void DeleteEmptyGameFolders (string path)
 
static string GetNewId (string path, string prefix="", int start=1)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (int _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

Static Public Attributes

static JsonSerializerSettings jsReadGame
 
static JsonSerializerSettings jsWriteGame
 
static Formatting formatting = Formatting.Indented
 
- Static Public Attributes inherited from EClass
static Core core
 

Properties

static string pathCurrentSave [get]
 
static string pathTemp [get]
 
static int NumBackup [get]
 
static bool compressSave [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Detailed Description

Definition at line 10 of file GameIO.cs.

Member Function Documentation

◆ CanLoad()

static bool GameIO.CanLoad ( string  root)
inlinestatic

Definition at line 147 of file GameIO.cs.

148 {
149 GameIndex gameIndex = IO.LoadFile<GameIndex>(root + "/index.txt");
150 return EClass.core.version.IsSaveCompatible(gameIndex.version);
151 }
Version version
Definition: BaseCore.cs:17
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
Version version
Definition: GameIndex.cs:21
Definition: IO.cs:11
bool IsSaveCompatible(Version v)
Definition: Version.cs:82

References EClass.core, Version.IsSaveCompatible(), GameIndex.version, and BaseCore.version.

Referenced by Game.TryLoad().

◆ ClearTemp()

static void GameIO.ClearTemp ( )
inlinestatic

Definition at line 64 of file GameIO.cs.

65 {
66 DirectoryInfo directoryInfo = new DirectoryInfo(pathTemp);
67 if (directoryInfo.Exists)
68 {
69 DirectoryInfo[] directories = directoryInfo.GetDirectories();
70 for (int i = 0; i < directories.Length; i++)
71 {
72 directories[i].Delete(recursive: true);
73 }
74 FileInfo[] files = directoryInfo.GetFiles();
75 for (int i = 0; i < files.Length; i++)
76 {
77 files[i].Delete();
78 }
79 }
80 }
static string pathTemp
Definition: GameIO.cs:36

References pathTemp.

Referenced by Game.Load(), and SaveGame().

◆ DeleteEmptyGameFolders()

static void GameIO.DeleteEmptyGameFolders ( string  path)
inlinestatic

Definition at line 343 of file GameIO.cs.

344 {
345 DirectoryInfo[] directories = new DirectoryInfo(path).GetDirectories();
346 foreach (DirectoryInfo directoryInfo in directories)
347 {
348 if (!File.Exists(directoryInfo?.ToString() + "/game.txt"))
349 {
350 directoryInfo.Delete(recursive: true);
351 }
352 }
353 }

Referenced by Core.OnApplicationQuit().

◆ DeleteGame()

static void GameIO.DeleteGame ( string  id,
bool  cloud,
bool  deleteBackup = true 
)
inlinestatic

Definition at line 267 of file GameIO.cs.

268 {
269 string path = (cloud ? CorePath.RootSaveCloud : CorePath.RootSave) + id;
270 if (!Directory.Exists(path))
271 {
272 return;
273 }
274 DirectoryInfo directoryInfo = new DirectoryInfo(path);
275 if (directoryInfo.Exists)
276 {
277 directoryInfo.Delete(recursive: true);
278 }
279 if (deleteBackup)
280 {
281 directoryInfo = new DirectoryInfo((cloud ? CorePath.PathBackupCloud : CorePath.PathBackup) + id);
282 if (directoryInfo.Exists)
283 {
284 directoryInfo.Delete(recursive: true);
285 }
286 }
287 }
static string RootSave
Definition: CorePath.cs:206
static string PathBackup
Definition: CorePath.cs:216
static string PathBackupCloud
Definition: CorePath.cs:218

References CorePath.PathBackup, CorePath.PathBackupCloud, and CorePath.RootSave.

Referenced by Scene.OnUpdate().

◆ GetGameList()

static List< GameIndex > GameIO.GetGameList ( string  path,
bool  sortByName = false,
bool  includeEmptyFolder = false 
)
inlinestatic

Definition at line 289 of file GameIO.cs.

290 {
291 List<GameIndex> list = new List<GameIndex>();
292 DirectoryInfo directoryInfo = new DirectoryInfo(path);
293 if (!directoryInfo.Exists)
294 {
295 return list;
296 }
297 DirectoryInfo[] directories = directoryInfo.GetDirectories();
298 foreach (DirectoryInfo directoryInfo2 in directories)
299 {
300 if (File.Exists(directoryInfo2?.ToString() + "/index.txt"))
301 {
302 try
303 {
304 GameIndex gameIndex = IO.LoadFile<GameIndex>(directoryInfo2?.ToString() + "/index.txt");
305 gameIndex.id = directoryInfo2.Name;
306 gameIndex.path = directoryInfo2.FullName;
307 list.Add(gameIndex);
308 }
309 catch (Exception message)
310 {
311 Debug.Log(message);
312 goto IL_0097;
313 }
314 continue;
315 }
316 goto IL_0097;
317 IL_0097:
318 if (includeEmptyFolder && Directory.Exists(CorePath.PathBackup + directoryInfo2.Name))
319 {
320 GameIndex gameIndex2 = new GameIndex();
321 gameIndex2.id = directoryInfo2.Name;
322 gameIndex2.path = directoryInfo2.FullName;
323 gameIndex2.date = (gameIndex2.real = new Date());
324 list.Add(gameIndex2);
325 }
326 }
327 if (sortByName)
328 {
329 list.Sort(delegate(GameIndex a, GameIndex b)
330 {
331 int.TryParse(a.id, out var result);
332 int.TryParse(b.id, out var result2);
333 return result2 - result;
334 });
335 }
336 else
337 {
338 list.Sort((GameIndex a, GameIndex b) => b.real.GetRawReal() - a.real.GetRawReal());
339 }
340 return list;
341 }
Definition: Date.cs:4
int GetRawReal(int offsetHours=0)
Definition: Date.cs:321
string id
Definition: GameIndex.cs:13
Date real
Definition: GameIndex.cs:11

References Debug, Date.GetRawReal(), GameIndex.id, CorePath.PathBackup, and GameIndex.real.

Referenced by LayerFeedback.OnInit(), LayerLoadGame.RefreshInfo(), and LayerLoadGame.RefreshList().

◆ GetNewId()

static string GameIO.GetNewId ( string  path,
string  prefix = "",
int  start = 1 
)
inlinestatic

Definition at line 355 of file GameIO.cs.

356 {
357 string text = "";
358 for (int i = start; i < 999999; i++)
359 {
360 text = prefix + i;
361 if (!Directory.Exists(path + text))
362 {
363 break;
364 }
365 }
366 return text;
367 }

Referenced by Game.Create(), and MakeBackup().

◆ Init()

static void GameIO.Init ( )
inlinestatic

Definition at line 42 of file GameIO.cs.

43 {
44 JsonSerializerSettings jsonSerializerSettings = jsReadGame;
45 jsonSerializerSettings.Error = (EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>)Delegate.Combine(jsonSerializerSettings.Error, (EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>)delegate(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
46 {
47 if (args.ErrorContext.Error.Message.Contains("UnknownTypePlaceholder"))
48 {
49 args.ErrorContext.Handled = true;
50 }
51 });
52 }
static JsonSerializerSettings jsReadGame
Definition: GameIO.cs:12

References jsReadGame.

Referenced by Core.Init().

◆ LoadFile< T >()

static T GameIO.LoadFile< T > ( string  path)
inlinestatic
Type Constraints
T :new() 

Definition at line 262 of file GameIO.cs.

262 : new()
263 {
264 return IO.LoadFile<T>(path, compressSave, jsReadGame);
265 }
static bool compressSave
Definition: GameIO.cs:40

References compressSave, and jsReadGame.

◆ LoadGame()

static Game GameIO.LoadGame ( string  id,
string  root,
bool  cloud 
)
inlinestatic

Definition at line 153 of file GameIO.cs.

154 {
155 Game.id = id;
156 GameIndex gameIndex = IO.LoadFile<GameIndex>(root + "/index.txt");
157 string path = root + "/game.txt";
158 foreach (KeyValuePair<string, string> fallbackType in gameIndex.fallbackTypes)
159 {
160 ModUtil.fallbackTypes[fallbackType.Key] = fallbackType.Value;
161 }
162 if (cloud)
163 {
164 gameIndex.cloud = true;
165 Debug.Log(TryLoadSteamCloud(root));
166 }
167 else if (!File.Exists(path))
168 {
169 Debug.Log(TryLoadSteamCloud(root));
170 }
171 return JsonConvert.DeserializeObject<Game>(IO.IsCompressed(path) ? IO.Decompress(path) : File.ReadAllText(path), jsReadGame);
172 }
static bool TryLoadSteamCloud(string pathSave)
Definition: GameIO.cs:206
Dictionary< string, string > fallbackTypes
Definition: GameIndex.cs:45
Definition: Game.cs:8
static string Decompress(string path)
Definition: IO.cs:226
static bool IsCompressed(string path)
Definition: IO.cs:202
static Dictionary< string, string > fallbackTypes
Definition: ModUtil.cs:10

References Debug, ModUtil.fallbackTypes, jsReadGame, and TryLoadSteamCloud().

Referenced by Game.Load().

◆ MakeBackup()

static void GameIO.MakeBackup ( GameIndex  index,
string  suffix = "" 
)
inlinestatic

Definition at line 115 of file GameIO.cs.

116 {
117 Debug.Log("Start backup:" + index.id);
118 string id = index.id;
119 bool cloud = index.cloud;
121 string text = (cloud ? CorePath.PathBackupCloud : CorePath.PathBackup) + id;
122 IO.CreateDirectory(text);
123 Debug.Log(text);
124 List<DirectoryInfo> dirs = new DirectoryInfo(text).GetDirectories().ToList();
125 dirs.ForeachReverse(delegate(DirectoryInfo i)
126 {
127 if (!int.TryParse(i.Name, out var _))
128 {
129 dirs.Remove(i);
130 }
131 });
132 dirs.Sort((DirectoryInfo a, DirectoryInfo b) => int.Parse(a.Name) - int.Parse(b.Name));
133 int count = dirs.Count;
134 Debug.Log("Deleting excess backup:" + dirs.Count + "/" + NumBackup);
135 if (count > NumBackup)
136 {
137 for (int j = 0; j < count - NumBackup; j++)
138 {
139 IO.DeleteDirectory(dirs[j].FullName);
140 }
141 }
142 Debug.Log("Copying backup:");
143 string newId = GetNewId(text + "/", "", (dirs.Count == 0) ? 1 : int.Parse(dirs.LastItem().Name));
144 IO.CopyDir((cloud ? CorePath.RootSaveCloud : CorePath.RootSave) + id + "/", text + "/" + newId, (string s) => s == "Temp");
145 }
static string RootSaveCloud
Definition: CorePath.cs:208
static int NumBackup
Definition: GameIO.cs:38
static string GetNewId(string path, string prefix="", int start=1)
Definition: GameIO.cs:355
bool cloud
Definition: GameIndex.cs:41
static void DeleteDirectory(string path)
Definition: IO.cs:353
static void CreateDirectory(string path)
Definition: IO.cs:345
static void CopyDir(string sourceDirectory, string targetDirectory, Func< string, bool > funcExclude=null)
Definition: IO.cs:245

References GameIndex.cloud, Debug, GetNewId(), GameIndex.id, NumBackup, CorePath.PathBackup, CorePath.PathBackupCloud, CorePath.RootSave, and CorePath.RootSaveCloud.

Referenced by Game.Save().

◆ PrepareSteamCloud()

static void GameIO.PrepareSteamCloud ( string  id,
string  path = "" 
)
inlinestatic

Definition at line 174 of file GameIO.cs.

175 {
176 if (path.IsEmpty())
177 {
178 path = CorePath.RootSaveCloud + "/" + id;
179 }
180 Debug.Log("Prepareing Steam Cloud:" + id + ": " + path);
181 string text = CorePath.RootSaveCloud + "/cloud.zip";
182 string text2 = path + "/cloud.zip";
183 try
184 {
185 if (File.Exists(text))
186 {
187 File.Delete(text);
188 }
189 if (File.Exists(text2))
190 {
191 File.Delete(text2);
192 }
193 ZipFile.CreateFromDirectory(path, text);
194 if (File.Exists(text2))
195 {
196 File.Delete(text2);
197 }
198 File.Move(text, text2);
199 }
200 catch (Exception ex)
201 {
202 EClass.ui.Say(ex.Message);
203 }
204 }
static UI ui
Definition: EClass.cs:17

References Debug, and EClass.ui.

Referenced by SaveGame().

◆ ResetTemp()

static void GameIO.ResetTemp ( )
inlinestatic

Definition at line 54 of file GameIO.cs.

55 {
56 DirectoryInfo directoryInfo = new DirectoryInfo(pathTemp);
57 if (directoryInfo.Exists)
58 {
59 directoryInfo.Delete(recursive: true);
60 }
62 }

References pathTemp.

Referenced by Game.Create().

◆ SaveFile()

static void GameIO.SaveFile ( string  path,
object  obj 
)
inlinestatic

Definition at line 257 of file GameIO.cs.

258 {
259 IO.SaveFile(path, obj, compressSave, jsWriteGame);
260 }
static JsonSerializerSettings jsWriteGame
Definition: GameIO.cs:22
static void SaveFile(string path, object obj, bool compress=false, JsonSerializerSettings setting=null)
Definition: IO.cs:89

References compressSave, and jsWriteGame.

Referenced by MapSubset.Save(), and Map.Save().

◆ SaveGame()

static GameIndex GameIO.SaveGame ( )
inlinestatic

Definition at line 82 of file GameIO.cs.

83 {
84 string text = JsonConvert.SerializeObject(EClass.core.game, formatting, jsWriteGame);
85 string path = pathCurrentSave + "game.txt";
86 GameIndex gameIndex = new GameIndex().Create(EClass.core.game);
87 gameIndex.id = Game.id;
88 gameIndex.cloud = EClass.game.isCloud;
89 IO.SaveFile(pathCurrentSave + "index.txt", gameIndex);
90 if (compressSave)
91 {
92 IO.Compress(path, text);
93 }
94 else
95 {
96 File.WriteAllText(path, text);
97 }
98 DirectoryInfo[] directories = new DirectoryInfo(pathCurrentSave).GetDirectories();
99 foreach (DirectoryInfo directoryInfo in directories)
100 {
101 if (int.TryParse(directoryInfo.Name, out var result) && !EClass.game.spatials.map.ContainsKey(result))
102 {
103 IO.DeleteDirectory(directoryInfo.FullName);
104 Debug.Log("Deleting unused map:" + directoryInfo.FullName);
105 }
106 }
107 ClearTemp();
108 if (gameIndex.cloud)
109 {
110 PrepareSteamCloud(gameIndex.id);
111 }
112 return gameIndex;
113 }
Game game
Definition: Core.cs:72
static Game game
Definition: EClass.cs:9
static string pathCurrentSave
Definition: GameIO.cs:34
static Formatting formatting
Definition: GameIO.cs:32
static void ClearTemp()
Definition: GameIO.cs:64
static void PrepareSteamCloud(string id, string path="")
Definition: GameIO.cs:174
GameIndex Create(Game game)
Definition: GameIndex.cs:70
static string id
Definition: Game.cs:147
SpatialManager spatials
Definition: Game.cs:152
bool isCloud
Definition: Game.cs:245
static void Compress(string path, string text)
Definition: IO.cs:217
GlobalSpatialList map

References ClearTemp(), compressSave, EClass.core, GameIndex.Create(), Debug, formatting, Core.game, EClass.game, Game.id, Game.isCloud, jsWriteGame, SpatialManager.map, pathCurrentSave, PrepareSteamCloud(), and Game.spatials.

Referenced by Game.Save().

◆ TryLoadSteamCloud()

static bool GameIO.TryLoadSteamCloud ( string  pathSave)
inlinestatic

Definition at line 206 of file GameIO.cs.

207 {
208 Debug.Log("LoadGame using cloud save");
209 string text = pathSave + "/cloud.zip";
210 string text2 = CorePath.RootSaveCloud + "/cloud.zip";
211 bool flag = false;
212 try
213 {
214 if (!File.Exists(text))
215 {
216 EClass.ui.Say("Steam Cloud save not found:" + text);
217 return true;
218 }
219 if (File.Exists(text2))
220 {
221 File.Delete(text2);
222 }
223 File.Move(text, text2);
224 IO.DeleteDirectory(pathSave);
225 flag = true;
226 Directory.CreateDirectory(pathSave);
227 ZipFile.ExtractToDirectory(text2, pathSave);
228 if (File.Exists(text))
229 {
230 File.Delete(text);
231 }
232 File.Move(text2, text);
233 }
234 catch (Exception ex)
235 {
236 EClass.ui.Say(ex.Message);
237 if (flag)
238 {
239 Debug.Log("Try restore backup:");
240 if (Directory.Exists(pathSave))
241 {
242 Directory.Delete(pathSave);
243 }
244 File.Move(text2, text);
245 return true;
246 }
247 return false;
248 }
249 return true;
250 }

References Debug, and EClass.ui.

Referenced by LoadGame().

◆ UpdateGameIndex()

static void GameIO.UpdateGameIndex ( GameIndex  i)
inlinestatic

Definition at line 252 of file GameIO.cs.

253 {
254 IO.SaveFile(i.path + "/index.txt", i);
255 }
string path
Definition: GameIndex.cs:48

References GameIndex.path.

Member Data Documentation

◆ formatting

Formatting GameIO.formatting = Formatting.Indented
static

Definition at line 32 of file GameIO.cs.

Referenced by SaveGame().

◆ jsReadGame

JsonSerializerSettings GameIO.jsReadGame
static
Initial value:
= new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Auto,
Error = IO.OnError,
SerializationBinder = GameSerializationBinder.Instance
}
static void OnError(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs args)
Definition: IO.cs:66

Definition at line 12 of file GameIO.cs.

Referenced by Init(), LoadFile< T >(), and LoadGame().

◆ jsWriteGame

JsonSerializerSettings GameIO.jsWriteGame
static
Initial value:
= new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DefaultValueHandling = DefaultValueHandling.Ignore,
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Auto,
Error = IO.OnError
}
static readonly ShouldSerializeContractResolver Instance

Definition at line 22 of file GameIO.cs.

Referenced by SaveFile(), and SaveGame().

Property Documentation

◆ compressSave

bool GameIO.compressSave
staticget

Definition at line 40 of file GameIO.cs.

Referenced by LoadFile< T >(), SaveFile(), and SaveGame().

◆ NumBackup

int GameIO.NumBackup
staticget

Definition at line 38 of file GameIO.cs.

Referenced by MakeBackup().

◆ pathCurrentSave

string GameIO.pathCurrentSave
staticget

◆ pathTemp

string GameIO.pathTemp
staticget

Definition at line 36 of file GameIO.cs.

Referenced by ClearTemp(), and ResetTemp().


The documentation for this class was generated from the following file: