Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- public class SaverLoader
- {
- static string SAVPATH = Application.dataPath+"\\save_games\\";
- FileStream file;
- List<SavableStaticInstance> savableObjects;
- Hashtable savableTempObjects;
- static SaverLoader instance = null;
- GameObject def;
- public static SaverLoader GetInstance()
- {
- if (instance == null)
- instance = new SaverLoader();
- return instance;
- }
- private SaverLoader()
- {
- savableObjects = new List<SavableStaticInstance>();
- savableTempObjects = new Hashtable();
- if (!Directory.Exists(SAVPATH))
- Directory.CreateDirectory(SAVPATH);
- }
- ~SaverLoader()
- {}
- public int RegisterSavable(SavableStaticInstance obj)
- {
- savableObjects.Add(obj);
- return savableObjects.Count - 1;
- }
- int nb = 0;
- public int RegisterTempObject(SavableDynamicInstance obj)
- {
- savableTempObjects.Add( nb, obj );
- nb++;
- return nb - 1;
- }
- public void KillTempObject(int id)
- {
- savableTempObjects.Remove(id);
- }
- public void SaveGame(string save)
- {
- file = File.Open(SAVPATH + save + ".sav", FileMode.OpenOrCreate);
- byte[] levelName = System.Convert.FromBase64String( Application.loadedLevelName );
- byte[] len = System.BitConverter.GetBytes(levelName.Length);
- file.Write(len, 0, sizeof(int));
- file.Write(levelName, 0, levelName.Length);
- for (int i = 0; i < savableObjects.Count; i++)
- {
- savableObjects[i].Serialize(file);
- }
- file.Write( System.BitConverter.GetBytes( savableTempObjects.Count ), 0, sizeof(int) );
- foreach(SavableDynamicInstance i in savableTempObjects.Values)
- {
- string s = i.gameObject.name;
- s = s.Replace("(Clone)", "");
- Debug.Log(s);
- len = System.BitConverter.GetBytes(s.Length);
- file.Write(len, 0, sizeof(int));
- for (int j = 0; j < s.Length; j++)
- {
- byte[] b = System.BitConverter.GetBytes(s[j]);
- file.Write(b, 0, sizeof(char));
- }
- i.Serialize(file);
- }
- file.Close();
- }
- public void LoadGame(string save)
- {
- file = File.Open(SAVPATH + save + ".sav", FileMode.Open);
- byte[] len = new byte[sizeof(int)];
- file.Read(len, 0, sizeof(int));
- int iLen = System.BitConverter.ToInt32(len,0);
- byte[] levelName = new byte[iLen];
- file.Read(levelName, 0, iLen);
- string lName = System.Convert.ToBase64String( levelName );
- if (lName != Application.loadedLevelName)
- {
- savableObjects.Clear();
- Application.LoadLevel(lName);
- def = new GameObject();
- def.AddComponent<LoadDeferrer>();
- }
- else
- {
- foreach(SavableDynamicInstance i in savableTempObjects.Values)
- {
- GameObject.Destroy(i.gameObject);
- }
- FinalizeLoad();
- }
- }
- public void FinalizeLoad()
- {
- for(int i = 0; i < savableObjects.Count; i++)
- {
- savableObjects[i].Deserialize(file);
- }
- byte[] b = new byte[sizeof(int)];
- file.Read(b, 0, sizeof(int));
- int max = System.BitConverter.ToInt32(b, 0);
- for (int i = 0; i < max; i++)
- {
- //GET PREFAB NAME AS "string s"
- b = new byte[sizeof(int)];
- file.Read(b, 0, sizeof(int));
- int len = System.BitConverter.ToInt32(b, 0);
- Debug.Log(len);
- string s = "";
- for ( int j = 0; j < len; j++ )
- {
- b = new byte[sizeof(char)];
- file.Read(b, 0, sizeof(char));
- s += System.BitConverter.ToChar(b, 0);
- }
- //----------------------
- //Instantiate the prefab
- if(s != "")
- {
- //Debug.Log(s);
- //Debug.Log(GameObject.Instantiate(Resources.Load(s)));
- GameObject go = (GameObject)GameObject.Instantiate(Resources.Load(s));
- go.GetComponent<SavableDynamicInstance>().Deserialize(file);
- //Deserialize the prefab
- //((SavableDynamicInstance)savableTempObjects[i]).Deserialize(file);
- }
- }
- file.Close();
- GameObject.Destroy(def);
- def = null;
- GUIMessage.GetInstance().DisplayMessage("Game Loaded!");
- }
- static public List<string> GetSaveFiles()
- {
- List<string> saveFiles = new List<string>();
- DirectoryInfo info = new DirectoryInfo(SAVPATH);
- FileInfo[] fileInfo = info.GetFiles();
- foreach (FileInfo file in fileInfo)
- {
- string path = file.ToString();
- path.Replace(SAVPATH, "");
- int idx = path.LastIndexOf("\\");
- path = path.Substring(idx+1);
- idx = path.LastIndexOf(".");
- path = path.Remove(idx);
- saveFiles.Add(path);
- }
- return saveFiles;
- }
- public void Reset()
- {
- savableObjects.Clear();
- savableTempObjects.Clear();
- nb = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement