/// <summary> /// Restores the state of the game /// </summary> public void RestoreFromSave(MazeData maze, GameObject localPlayer, ScoreManager score) { Debug.Log("Restoring game state..."); // restore enemy states for (int i = 0; i < maze.enemies.Count; i++) { Enemy enemy = maze.enemies[i]; EnemySave enemySave = currentSave.enemies[i]; enemy.GetComponent <NavMeshAgent>().Warp(enemySave.position); enemy.transform.position = enemySave.position; if (enemySave.dead) { enemy.Die(); } } // set player position localPlayer.transform.position = currentSave.player.position; // set score score.SetScore(currentSave.score); }
/// <summary> /// Saves the game's state /// </summary> public void SaveGameState(MazeData maze, GameObject localPlayer, ScoreManager score) { if (currentSave == null) { currentSave = new GameProgress(); } currentSave.oldMaze = true; // Save enemies currentSave.enemies = new List <EnemySave>(); for (int i = 0; i < maze.enemies.Count; i++) { EnemySave enemySave = new EnemySave(); Enemy enemy = maze.enemies[i]; enemySave.position = enemy.transform.position; enemySave.dead = enemy.dead; currentSave.enemies.Add(enemySave); } // Save player currentSave.player = new EntitySave(); Vector3 pos = localPlayer.transform.position; pos.x = ((int)pos.x / 2) * 2f; pos.y = ((int)pos.y / 2) * 2f; pos.z = ((int)pos.z / 2) * 2f; currentSave.player.position = pos; // save score currentSave.score = score.currentScore; // save seed currentSave.mazeSeed = maze.seed; // save locally string saveString = GameProgressEncoder.Encode(currentSave); PlayerPrefs.SetString("Save", saveString); }
/// <summary> /// 加载 /// </summary> public void Load() { FileStream save = File.OpenRead(_saveFilePath + _EnemySaveFileName); EnemySave saveData = JsonUtility.FromJson <EnemySave>(ReadText(save)); GameObject[] enemys = GameObject.FindGameObjectsWithTag("Enemy"); if (ReadText(save) != "") { for (int i = 0; i < enemys.Length; i++) { enemys[i].transform.position = saveData.Enemyposition[i]; enemys[i].transform.rotation = saveData.EnemyRotation[i]; if (enemys[i].GetComponent <Enemy>()) { enemys[i].GetComponent <Enemy>().Health = saveData.EnemyHealth[i]; enemys[i].GetComponent <Enemy>().die = saveData.EnemyDeadFlag[i]; } } } save.Close(); SpawnPlayerAndCarmera(); }
/// <summary> /// 储存 /// </summary> public void Save() { EnemySave saveDate = new EnemySave(); // saveDate.player=PlayerController.Instance.transform; // saveDate.playerHealth=PlayerController.Instance.Healeth; GameObject[] enemys = GameObject.FindGameObjectsWithTag("Enemy"); for (int i = 0; i < enemys.Length; i++) { saveDate.Enemyposition.Add(enemys[i].transform.position); saveDate.EnemyRotation.Add(enemys[i].transform.rotation); if (enemys[i].GetComponent <Enemy>()) { saveDate.EnemyDeadFlag.Add(false); saveDate.EnemyHealth.Add(enemys[i].GetComponent <Enemy>().Health); } else { saveDate.EnemyDeadFlag.Add(true); saveDate.EnemyHealth.Add(-1); } } FileStream save = File.Create(_saveFilePath + _EnemySaveFileName); AddText(save, JsonUtility.ToJson(saveDate)); save.Close(); if (player != null && cameras != null) { playerProperties.position = player.transform.position; playerProperties.roatition = player.transform.rotation; playerProperties.HealthValue = PlayerController.Instance.Healeth; } }