/* * Static function that helps initializing this object without waiting for the scene * that contains it to be called! * It accept a savegame to be read in order to instantiate it correctly. */ public static void InstanceGameHandler(SaveManager.SaveGame SaveGame) { GameObject Temp = new GameObject("GameHandler"); Temp.AddComponent <GameHandler>(); GameHandler.Instance.Init(SaveGame); /* * Result.PlayerScore = GameHandler.Instance.GetPlayer().GetScore(); * Result.PlayerPosition = new SerializableVector3(GameHandler.Instance.GetPlayer().transform.position); * Result.EnemyPosition = new SerializableVector3[GameHandler.Instance.Enemies.Count]; * Index = 0; * foreach( EnemyAI Enemy in GameHandler.Instance.Enemies ) { * Result.EnemyPosition[Index] = new SerializableVector3(Enemy.transform.position); * * } * Result.ItemPosition = new SerializableVector3[GameHandler.Instance.Coins.Count]; * Index = 0; * foreach( Coin CoinPosition in GameHandler.Instance.Coins ) { * Result.ItemPosition[Index] = new SerializableVector3(CoinPosition.transform.position); * * } * Result.SceneName = SceneManager.GetActiveScene().name; */ }
private void InitFromSaveGame(SaveManager.SaveGame SaveGame) { LoadedFromSaveGame = true; Skill = SaveGame.Skill; GetPlayer().AddScore(SaveGame.PlayerScore); GetPlayer().gameObject.transform.position = SaveGame.Player.Position.ToVector3(); GetPlayer().RestoreRotation(SaveGame.Player.Rotation.ToQuaternion()); GetPlayer().SetHealth(SaveGame.PlayerHealth); // //GetPlayer().Flip(); //SavedPlayerTransform = SaveGame.Player; StartingFromSaveGame = true; if (Coins == null) { Coins = new List <Coin>(); } ClearCoinsArray(); for (int i = 0; i < SaveGame.ItemPosition.Length; i++) { GameObject CurrentCoin = null; Debug.Log("Got type: " + SaveGame.ItemPosition[i].Type); Type CoinType = Type.GetType(SaveGame.ItemPosition[i].Type); Vector3 CoinPosition = SaveGame.ItemPosition[i].Position.ToVector3(); if (CoinType == typeof(GoldCoin)) { CurrentCoin = Instantiate(Resources.Load("Prefabs/GoldCoin"), CoinPosition, Quaternion.identity) as GameObject; } else if (CoinType == typeof(SilverCoin)) { CurrentCoin = Instantiate(Resources.Load("Prefabs/SilverCoin"), CoinPosition, Quaternion.identity) as GameObject; } else if (CoinType == typeof(CopperCoin)) { CurrentCoin = Instantiate(Resources.Load("Prefabs/CopperCoin"), CoinPosition, Quaternion.identity) as GameObject; } else { Debug.Log("Unknown type: " + CoinType.ToString()); continue; } CurrentCoin.name = CurrentCoin.name + i; Coin TempCoin = CurrentCoin.GetComponent <Coin>(); Coins.Add(TempCoin); } if (SaveGame.DoorSwitch != null && SaveGame.DoorSwitch.UnLocked) { GameObject SwitchObject = GameObject.Find(SaveGame.DoorSwitch.Name); if (SwitchObject != null) { DoorSwitch Switch = SwitchObject.GetComponent <DoorSwitch>(); Switch.UnlockDoor(true); } } }
/* * Load Scene async and instance the game handler restoring the state from a savegame. */ public static IEnumerator LoadSceneAsync(SaveManager.SaveGame SavedGame) { AsyncOperation LoadLevel = SceneManager.LoadSceneAsync(SavedGame.SceneName); while (!LoadLevel.isDone) { yield return(null); } GameHandler.InstanceGameHandler(SavedGame); }