public HighScoreDataObject LoadHighScores() { // Check that the save file actually exists if (File.Exists(Application.persistentDataPath + "/highscores.dat")) { // Create a formatter for deserializing the data BinaryFormatter formatter = new BinaryFormatter(); // Open the save file FileStream savefile = File.Open(Application.persistentDataPath + "/highscores.dat", FileMode.Open); // Deserialize the save file HighScoreDataObject savedata = (HighScoreDataObject)formatter.Deserialize(savefile); // Close the save file savefile.Close(); return(savedata); } else { // If the file isn't there because derp, return a highscore of 0 return(new HighScoreDataObject(0)); } }
// Saves the given data object to save.dat public void SaveHighScores(HighScoreDataObject highscoredataobject) { // Create a formatter for serializing the data BinaryFormatter formatter = new BinaryFormatter(); // Create the save file FileStream savefile = File.Create(Application.persistentDataPath + "/highscores.dat"); // Serialize and save the data formatter.Serialize(savefile, highscoredataobject); // Close the save file savefile.Close(); }
void Update() { if (Input.GetButtonDown("Back")) { GameManager.savecontroller.SaveGame(new GameSaveDataObject( gamestate, score, level, lines, rows, hexelcolor, nexthexel, gameovercount, previouslevel, originalhighscore, newhighscore, GameManager.boardcontroller.GetGrid())); gamestate = "stopped"; Application.LoadLevel("Pause"); } switch (gamestate) { case "stopped": break; case "start": // Retrieve the highscore data object HighScoreDataObject highscoredata = GameManager.savecontroller.LoadHighScores(); originalhighscore = highscoredata.highscore; highscore = originalhighscore; hexelcolor = random.Next(0, GameManager.hexelprefabs.Length); score = 0; level = 0; lines = 0; gamestate = "spawnhexel"; break; case "load": gamestate = "opensave"; break; case "opensave": // Retrieve the save data object GameSaveDataObject savedata = GameManager.savecontroller.LoadGame(); // Unpack the object gamestate = savedata.gamestate; score = savedata.score; level = savedata.level; rows = savedata.rows; hexelcolor = savedata.hexelcolor; nexthexel = savedata.nexthexel; gameovercount = savedata.gameovercount; previouslevel = savedata.previouslevel; originalhighscore = savedata.originalhighscore; newhighscore = savedata.newhighscore; GameManager.boardcontroller.LoadGrid(savedata.grid); // Retrieve the highscore data object HighScoreDataObject loadhighscoredata = GameManager.savecontroller.LoadHighScores(); highscore = loadhighscoredata.highscore; switch (gamestate) { case "running": currenthexel = Instantiate(GameManager.hexelprefabs[hexelcolor], new Vector3(0, 0), Quaternion.identity) as GameObject; hexelcontroller = currenthexel.GetComponent <HexelController>(); break; case "lineblink": timer = 0; counter = 0; break; case "waitfordrop": timer = 0; break; case "fill": counter = 0; rows = new bool[20]; break; case "wipe": rows = new bool[20]; counter = 0; break; default: break; } UIController.UpdateUI(highscore, score, lines, level, nexthexel); break; case "spawnhexel": hexelcolor = nexthexel; nexthexel = random.Next(0, GameManager.hexelprefabs.Length); currenthexel = Instantiate(GameManager.hexelprefabs[hexelcolor], new Vector3(0, 0), Quaternion.identity) as GameObject; hexelcontroller = currenthexel.GetComponent <HexelController>(); UIController.UpdateUI(highscore, score, lines, level, nexthexel); if (score >= originalhighscore && !newhighscore) { GameManager.soundcontroller.PlaySound(9); newhighscore = true; } gamestate = "running"; break; case "running": break; case "linecheck": score += hexelcontroller.softdrops; Destroy(currenthexel); currenthexel = null; hexelcontroller = null; rows = GameManager.rowcontroller.CheckForRows(); int numrows = 0; for (int row = 0; row < 15; row++) { if (rows[row]) { numrows++; } } previouslevel = level; score += linescores[numrows] * (level + 1); lines += numrows; level = lines / 10; if (level > previouslevel) { GameManager.soundcontroller.PlaySound(8); } if (score > highscore) { highscore = score; GameManager.savecontroller.SaveHighScores(new HighScoreDataObject(highscore)); } if (numrows != 0) { GameManager.soundcontroller.PlaySound(0); timer = 0; counter = 0; gamestate = "lineblink"; } else { GameManager.soundcontroller.PlaySound(1); gamestate = "spawnhexel"; } break; case "lineblink": if (counter == 2) { gamestate = "lineclear"; } else { if (timer == 0) { GameManager.rowcontroller.HideRows(rows); } if (timer == 25) { GameManager.rowcontroller.ShowRows(rows); } if (timer == 50) { timer = 0; counter++; } else { timer++; } } break; case "lineclear": GameManager.rowcontroller.ClearRows(rows); timer = 0; gamestate = "waitfordrop"; break; case "waitfordrop": timer++; if (timer == 60) { gamestate = "droplines"; } break; case "droplines": GameManager.soundcontroller.PlaySound(2); GameManager.rowcontroller.DropRows(rows); gamestate = "spawnhexel"; break; case "gameover": Destroy(currenthexel); currenthexel = null; hexelcontroller = null; counter = 0; rows = new bool[20]; gamestate = "fill"; break; case "fill": GameManager.soundcontroller.PlaySound(7); rows[counter] = true; counter++; GameManager.rowcontroller.FillRows(rows, 0); if (counter >= 20) { rows = new bool[20]; counter = 0; gamestate = "wipe"; } break; case "wipe": rows[counter] = true; counter++; GameManager.rowcontroller.ClearRows(rows); if (counter >= 20) { counter = 0; gamestate = "end"; } break; case "end": GameManager.savecontroller.DeleteSave(); gamestate = "stopped"; Application.LoadLevel("GameOver"); break; default: break; } }