示例#1
0
 public static void LoadLevel(int index)
 {
     GetObject.ClearReferences();
     Time.timeScale = 1;
     SceneManager.LoadScene(index);
     GameMaster.GamePaused = false;
 }
示例#2
0
 public static void LoadLevel(string name)
 {
     GetObject.ClearReferences();
     Time.timeScale = 1;
     RPG.LoadLevel(name, false);
     GameMaster.GamePaused = false;
 }
示例#3
0
        public bool Load(string savePathOrPPrefKey)
        {
            GetObject.ClearReferences();
#if (!UNITY_IOS && !UNITY_ANDROID)
            if (!File.Exists(savePathOrPPrefKey))
            {
                return(false);
            }
            Debug.Log("SavePath: " + savePathOrPPrefKey);
            var fileLoad       = File.ReadAllText(savePathOrPPrefKey);
            var jsonFromEncode = fileLoad;
            if (encryptFiles)
            {
                jsonFromEncode = new Xor().Decrypt(fileLoad, GameDataSaveLoadManager.Instance.EncryptKey);
            }
#else
            var jsonFromEncode = PlayerPrefs.GetString(savePathOrPPrefKey, "");
#endif

            if (string.IsNullOrEmpty(jsonFromEncode))
            {
                return(false);
            }

            var loadedPlayerSave = JsonConvert.DeserializeObject <PlayerSave>(jsonFromEncode, new JsonSerializerSettings
            {
                TypeNameHandling       = TypeNameHandling.Objects,
                TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple,
                ObjectCreationHandling = ObjectCreationHandling.Replace
            });

            var loadedScene = SceneManager.GetActiveScene().name;
            if (loadedScene != loadedPlayerSave.CurrentScene)
            {
                RPG.LoadLevel(loadedPlayerSave.CurrentScene, false);
            }

            //todo: check this
            var classDef = Rm_RPGHandler.Instance.Player.CharacterDefinitions.FirstOrDefault(c => c.ID == loadedPlayerSave.Character.PlayerCharacterID);
            if (classDef == null)
            {
                Debug.Log("Class not found for character you're trying to load. Try creating a new character.");
                return(false);
            }

            var className = classDef.Name;

            var gameObject     = Resources.Load(classDef.ClassPrefabPath) as GameObject;
            var spawnTransform = GetObject.SpawnPositionTransform;

            var spawnPosition = spawnTransform.transform.position;
            if (!string.IsNullOrEmpty(loadedPlayerSave.WorldMap.CurrentLocationID))
            {
                var location = Rm_RPGHandler.Instance.Customise.WorldMapLocations.First(w => w.ID == loadedPlayerSave.WorldMap.CurrentWorldAreaID).
                               Locations.First(l => l.ID == loadedPlayerSave.WorldMap.CurrentLocationID);

                if (location.UseCustomLocation)
                {
                    spawnPosition = location.CustomSpawnLocation;
                }
            }

            if (spawnTransform != null)
            {
                //Spawn Player
                Object.Instantiate(gameObject, spawnPosition, GetObject.SpawnPositionTransform.rotation);

                GetObject.RPGCamera.transform.position = spawnPosition - (GetObject.SpawnPositionTransform.forward * 2);
            }
            else
            {
                Debug.LogError("[RPGAIO] Did not find spawn position. This is required to spawn the player.");
            }


            GetObject.ClearReferences();
            var playerMono = GetObject.PlayerMono;
            playerMono.SetPlayerSave(loadedPlayerSave);


#if (!UNITY_IOS && !UNITY_ANDROID)
            //Todo: allow savables for mobile
            //Debug.Log("Loading savables");
            LoadSavableGameObjects(savePathOrPPrefKey);
#endif


            //Debug.Log("Loaded file with ID " + loadedPlayerSave.SaveID);
            UserSaveLoadManager.Instance.LoadUserData();
            TimeLastSaved = Time.time;
            return(true);
        }
示例#4
0
        //todo: check scene exists
        public static bool LoadLevel(string name, bool updatePlayerLevel, bool saveGame = true, WorldArea worldArea = null, Location location = null, bool forceReload = false)
        {
            //check we can load
            //if we can load then:

            if (updatePlayerLevel && GetObject.PlayerSave != null)
            {
                GetObject.PlayerSave.CurrentScene = name;
                if (worldArea != null)
                {
                    GetObject.PlayerSave.WorldMap.CurrentWorldAreaID = worldArea.ID;
                }

                if (location != null)
                {
                    GetObject.PlayerSave.WorldMap.CurrentLocationID = location.ID;
                }
            }

            if (location != null)
            {
                GetObject.PlayerSave.WorldMap.AddVisitedLocation(location.ID);
            }

            if (saveGame)
            {
                PlayerSaveLoadManager.Instance.SaveGame();
            }

            GetObject.ClearReferences();
            Time.timeScale = 1;

            var loadedPlayerSave = GetObject.PlayerSave;
            var saveToLoad       = PlayerSaveLoadManager.Instance.RecentSave();

            var loadedScene = SceneManager.GetActiveScene().name;

            if (forceReload || loadedScene != name || (loadedPlayerSave == null || loadedPlayerSave.SaveID != saveToLoad.SaveID)) //check it's the same save
            {
                SceneManager.LoadScene(name);
                return(true);
            }
            else
            {
                var spawnPosition = GetObject.SpawnPositionTransform.transform.position;
                var playerSave    = GetObject.PlayerSave;
                if (!string.IsNullOrEmpty(playerSave.WorldMap.CurrentLocationID))
                {
                    var newlocation = Rm_RPGHandler.Instance.Customise.WorldMapLocations.First(w => w.ID == playerSave.WorldMap.CurrentWorldAreaID).
                                      Locations.First(l => l.ID == playerSave.WorldMap.CurrentLocationID);

                    if (newlocation.UseCustomLocation)
                    {
                        spawnPosition = location.CustomSpawnLocation;
                    }
                }
                GetObject.PlayerController.Resume();
                GetObject.PlayerMonoGameObject.transform.position = spawnPosition;
            }

            return(false);
        }