Esempio n. 1
0
 public void AddSaveablePrefab(SaveGameObject prefab)
 {
     if (!SaveablePrefabs.Contains(prefab))
     {
         SaveablePrefabs.Add(prefab);
     }
 }
Esempio n. 2
0
 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;
    }
Esempio n. 5
0
    // 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);
        }
    }
Esempio n. 6
0
    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);
                }
            }
        }
    }
Esempio n. 7
0
    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();
        }
    }
Esempio n. 8
0
    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;
    }