bool IsReady() { if (!dfUnity) dfUnity = DaggerfallUnity.Instance; if (itemHelper == null) itemHelper = new ItemHelper(); if (!dfUnity.IsReady || string.IsNullOrEmpty(dfUnity.Arena2Path)) return false; if (factionFile == null) factionFile = new FactionFile(Path.Combine(dfUnity.Arena2Path, FactionFile.Filename), FileUsage.UseMemory, true); if (saveGames == null || saveTrees == null || saveNames == null) { saveGames = new SaveGames(); saveNames = new GUIContent[6]; saveTrees = new SaveTree[6]; saveVars = new SaveVars[6]; saveTextures = new Texture2D[6]; if (saveGames.OpenSavesPath(Path.GetDirectoryName(DaggerfallUnity.Instance.Arena2Path))) { for (int i = 0; i < 6; i++) { if (saveGames.HasSave(i)) { saveGames.OpenSave(i); saveTrees[i] = saveGames.SaveTree; saveVars[i] = saveGames.SaveVars; saveNames[i] = new GUIContent(saveGames.SaveName); saveTextures[i] = TextureReader.CreateFromAPIImage(saveGames.SaveImage); saveTextures[i].filterMode = FilterMode.Point; } else { saveTrees[i] = null; saveVars[i] = null; saveTextures[i] = null; saveNames[i] = new GUIContent("Empty"); } } } } return true; }
void StartFromClassicSave() { DaggerfallUnity.ResetUID(); RaiseOnNewGameEvent(); ResetWeaponManager(); // Save index must be in range if (classicSaveIndex < 0 || classicSaveIndex >= 6) throw new IndexOutOfRangeException("classicSaveIndex out of range."); // Open saves in parent path of Arena2 folder string path = SaveLoadManager.Instance.DaggerfallSavePath; SaveGames saveGames = new SaveGames(path); if (!saveGames.IsPathOpen) throw new Exception(string.Format("Could not open Daggerfall saves path {0}", path)); // Open save index if (!saveGames.TryOpenSave(classicSaveIndex)) { string error = string.Format("Could not open classic save index {0}.", classicSaveIndex); DaggerfallUI.MessageBox(error); DaggerfallUnity.LogMessage(string.Format(error), true); return; } // Get required save data SaveTree saveTree = saveGames.SaveTree; SaveVars saveVars = saveGames.SaveVars; if (NoWorld) { playerEnterExit.DisableAllParents(); } else { // Set player to world position playerEnterExit.EnableExteriorParent(); StreamingWorld streamingWorld = FindStreamingWorld(); int worldX = saveTree.Header.CharacterPosition.Position.WorldX; int worldZ = saveTree.Header.CharacterPosition.Position.WorldZ; streamingWorld.TeleportToWorldCoordinates(worldX, worldZ); streamingWorld.suppressWorld = false; } // Set game time DaggerfallUnity.Instance.WorldTime.Now.FromClassicDaggerfallTime(saveVars.GameTime); // Get character record List<SaveTreeBaseRecord> records = saveTree.FindRecords(RecordTypes.Character); if (records.Count != 1) throw new Exception("SaveTree CharacterRecord not found."); // Get prototypical character document data CharacterRecord characterRecord = (CharacterRecord)records[0]; characterDocument = characterRecord.ToCharacterDocument(); // Assign data to player entity PlayerEntity playerEntity = FindPlayerEntity(); playerEntity.AssignCharacter(characterDocument, characterRecord.ParsedData.level, characterRecord.ParsedData.startingHealth); // Assign items to player entity playerEntity.AssignItems(saveTree); // Assign gold pieces playerEntity.GoldPieces = (int)characterRecord.ParsedData.physicalGold; // Start game DaggerfallUI.Instance.PopToHUD(); GameManager.Instance.PauseGame(false); DaggerfallUI.Instance.FadeHUDFromBlack(); DaggerfallUI.PostMessage(PostStartMessage); if (OnStartGame != null) OnStartGame(this, null); }
bool IsReady() { if (!dfUnity) dfUnity = DaggerfallUnity.Instance; if (!dfUnity.IsReady || string.IsNullOrEmpty(dfUnity.Arena2Path)) return false; if (saveGames == null || saveTrees == null || saveNames == null) { saveGames = new SaveGames(); saveNames = new GUIContent[6]; saveTrees = new SaveTree[6]; saveTextures = new Texture2D[6]; if (saveGames.OpenSavesPath(Path.GetDirectoryName(DaggerfallUnity.Instance.Arena2Path))) { for (int i = 0; i < 6; i++) { if (saveGames.HasSave(i)) { saveGames.OpenSave(i); saveTrees[i] = saveGames.SaveTree; saveNames[i] = new GUIContent(saveGames.SaveName); saveTextures[i] = TextureReader.CreateFromAPIImage(saveGames.SaveImage); saveTextures[i].filterMode = FilterMode.Point; } else { saveTrees[i] = null; saveTextures[i] = null; saveNames[i] = new GUIContent("Empty"); } } } } return true; }