/// <summary> /// Serialize the effect /// </summary> /// <param name="writer">Writer instance</param> public override void Write(BinaryWriter writer) { base.Write(writer); writer.Write(mSourcePos); writer.Write(mTargetPos); writer.Write(mTargetEntity); writer.Write(mAlphaFade); writer.Write(mProjecticleColor); writer.Write(mProjecticleSprite); writer.Write(mProjecticleSprite45); writer.Write(mRotate); writer.Write(SoundSerializer.Serialize(mLaunchSound)); writer.Write(SoundSerializer.Serialize(mLandSound)); }
/// <summary> /// Save game /// </summary> /// <param name="filename">File name</param> /// <param name="player">Player</param> /// <param name="gameMap">Map</param> /// <param name="console">Console</param> /// <param name="gameState">Current game state</param> public static void SaveGame(string filename, EntityID player, GameMap gameMap, Console console, GameState gameState) { // Create data folder if it doesn't exist if (!Directory.Exists(Application.persistentDataPath + "/" + C.SAVE_FOLDER)) { Directory.CreateDirectory(Application.persistentDataPath + "/" + C.SAVE_FOLDER); } if (!Directory.Exists(Application.persistentDataPath + "/" + C.SAVE_FOLDER)) { console.Log(C.FSTR.Set("Can't create Save folder!")); return; } FileStream file = null; string fullFilename = Application.persistentDataPath + "/" + C.SAVE_FOLDER + "/" + filename; try { file = File.Open(fullFilename, FileMode.Create); } catch { // Do nothing return; } if (file == null) { console.Log(C.FSTR.Set("Failed to save to ").Append(fullFilename).Append(", can't open file.")); return; } #if !DEBUG_SAVES var writer = new BinaryWriter(file); #else var writer = new GameWriter(file); #endif EntityStore.Write(writer); writer.Write(player); // Write GameMap writer.Write(gameMap.size); // Write terrain tiles for (int x = 0; x < gameMap.size.width; x++) { for (int y = 0; y < gameMap.size.height; y++) { writer.Write(gameMap.terrain[x, y]); } } // Write FOV tiles for (int x = 0; x < gameMap.size.width; x++) { for (int y = 0; y < gameMap.size.height; y++) { writer.Write(gameMap.fov[x, y]); } } // Write background color writer.Write(gameMap.backgroundColor); // Write music writer.Write(SoundSerializer.Serialize(gameMap.music)); // Write dungeon level writer.Write(gameMap.dungeonLevel); // Write Console contents writer.Write(Console.LOG_LINES); var consoleLogLines = console.GetLogLines(); var consoleLine = consoleLogLines.Last; while (consoleLine != null) { writer.Write(consoleLine.Value); consoleLine = consoleLine.Previous; } // Write the effects manager EffectManager.Instance.Write(writer); writer.Write((int)gameState); file.Flush(); writer.Flush(); writer.Close(); file.Close(); // On WebGL we should sync the file system by calling out to Javascript, if we don't do this // the game might not actually flush out to the filesystem (IndexDB) before the game quits or page is reloaded. #if UNITY_WEBGL try { WebGLSyncFS(); } catch { // Do nothing } #endif }