public void AddSaveablePrefab(SaveGameObject prefab) { if (!SaveablePrefabs.Contains(prefab)) { SaveablePrefabs.Add(prefab); } }
void ISerializationCallbackReceiver.OnBeforeSerialize() { if (Application.isEditor) { SaveGameObject prefab = this; if (PrefabUtility.GetPrefabType(this) != PrefabType.Prefab) { prefab = (SaveGameObject)PrefabUtility.GetPrefabParent(this); } if (prefab != null) { PrefabName = AssetDatabase.GetAssetPath(prefab); } } }
public void saveGame() { if (!Directory.Exists(Application.persistentDataPath)) { Directory.CreateDirectory(Application.persistentDataPath); } SaveGameObject save = new SaveGameObject(); BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Create(Application.persistentDataPath + "/save.bin"); bf.Serialize(file, save); file.Close(); }
public void loadGame() { if (!File.Exists(Application.persistentDataPath + "/save.bin")) { HighScoreManager.high_score = 0; return; } BinaryFormatter bf = new BinaryFormatter(); FileStream file = File.Open(Application.persistentDataPath + "/save.bin", FileMode.Open); SaveGameObject save = (SaveGameObject)bf.Deserialize(file); file.Close(); HighScoreManager.high_score = save.high_score; }
// Walk the scene searching for saveable objects. Cannot use GameObject.FindObjectsByType because // it does not return results in hierarchy order which is important to ensure correct prefab // reattachment and predictable serialization order. void FindSaveableObjects(Transform root, List <SaveGameObject> prefabs, List <ISaveable> saveables) { SaveGameObject saveGame = root.GetComponent <SaveGameObject>(); if (saveGame != null) { prefabs.Add(saveGame); } foreach (ISaveable saveable in root.GetComponents <ISaveable>()) { saveables.Add(saveable); } foreach (Transform child in root) { FindSaveableObjects(child, prefabs, saveables); } }
public override void OnInspectorGUI() { DrawDefaultInspector(); if (GUILayout.Button("Add prefabs used in scene")) { SaveGame saveGame = (SaveGame)target; foreach (var savegameobj in GameObject.FindObjectsOfType <SaveGameObject>()) { SaveGameObject prefab = (SaveGameObject)PrefabUtility.GetPrefabParent(savegameobj); if (prefab) { saveGame.AddSaveablePrefab(prefab); } } } }
private static void DeserializeSaveGame() { indexedMonsters.Clear(); List <Lump> lumps = Lump.Cull(loadedMission, new string[5] { "MONSTERS", "PROJECTILES", "SKILLS", "LEVELOBJECTS", "PICKUPS", }); foreach (Lump l in lumps) { string spawnName = l.lumpName; if (!ThingDesignator.Designations.ContainsKey(spawnName)) { Debug.LogError("SaveLoadSystem: LoadGame: spawn name designation \"" + spawnName + "\" not found in designator"); return; } GameObject g = UnityEngine.GameObject.Instantiate(ThingDesignator.Designations[spawnName], LevelLoader.DynamicObjects); SaveGameObject s = g.GetComponent <SaveGameObject>(); s.SpawnName = spawnName; s.Deserialize(l.data); } foreach (Transform t in LevelLoader.DynamicObjects) { SaveGameObject s = t.GetComponent <SaveGameObject>(); if (s == null) { Debug.Log("SaveLoadSystem: LoadGame: non-savegame object found in LevelLoader.DynamicObjects"); return; } s.AfterCreated(); } }
public static void SaveGame() { if (!GameNeedsSave || CurrentPlayerSlot == -1) { return; } Wad.WriteWad("Games/" + CurrentPlayerSlot + "/player.wad", "PWAD", 1, PlayerInfo.Serialize()); if (!LevelLoader.LevelLoaded || !PlayerInfo.CurrentLocal.PlayerHasBeenInitialized) { Wad.DeleteWad("Games/" + CurrentPlayerSlot + "/mission.wad"); return; } List <SaveGameObject> monsters = new List <SaveGameObject>(); List <SaveGameObject> projectiles = new List <SaveGameObject>(); List <SaveGameObject> skills = new List <SaveGameObject>(); List <SaveGameObject> levelobjects = new List <SaveGameObject>(); List <SaveGameObject> itempickups = new List <SaveGameObject>(); foreach (Transform t in LevelLoader.DynamicObjects) { SaveGameObject s = t.GetComponent <SaveGameObject>(); if (s == null) { Debug.Log("SaveLoadSystem: SaveGame: non-savegame object \"" + t.name + "\" found in LevelLoader.DynamicObjects"); continue; } switch (s.ObjectType) { case SaveObjectType.Monster: s.SaveIndex = monsters.Count; monsters.Add(s); break; case SaveObjectType.Projectile: s.SaveIndex = projectiles.Count; projectiles.Add(s); break; case SaveObjectType.Skill: s.SaveIndex = skills.Count; skills.Add(s); break; case SaveObjectType.LevelObject: s.SaveIndex = levelobjects.Count; levelobjects.Add(s); break; case SaveObjectType.Pickup: s.SaveIndex = itempickups.Count; levelobjects.Add(s); break; } } List <Lump> lumps = new List <Lump>(); { lumps.Add(new Lump("MONSTERS", new byte[0])); foreach (SaveGameObject m in monsters) { lumps.Add(new Lump(m.SpawnName, m.Serialize())); } lumps.Add(new Lump("PROJECTILES", new byte[0])); foreach (SaveGameObject p in projectiles) { lumps.Add(new Lump(p.SpawnName, p.Serialize())); } lumps.Add(new Lump("SKILLS", new byte[0])); foreach (SaveGameObject s in skills) { lumps.Add(new Lump(s.SpawnName, s.Serialize())); } lumps.Add(new Lump("LEVELOBJECTS", new byte[0])); foreach (SaveGameObject l in levelobjects) { lumps.Add(new Lump(l.SpawnName, l.Serialize())); } lumps.Add(new Lump("PICKUPS", new byte[0])); foreach (SaveGameObject i in itempickups) { lumps.Add(new Lump(i.SpawnName, i.Serialize())); } } Wad.WriteWad("Games/" + CurrentPlayerSlot + "/mission.wad", "MWAD", 1, lumps); GameNeedsSave = false; NeedLoadInfos = true; }