/// <summary>
    /// Converts a save file byte array to usable save objects list
    /// </summary>
    /// <param name="bytes"></param>
    /// <returns></returns>
    public void RestoreSave(byte[] bytes)
    {
        try {
            MemoryStream    memStream = new MemoryStream();
            BinaryFormatter binForm   = new BinaryFormatter();
            memStream.Write(bytes, 0, bytes.Length);
            memStream.Position = 0;
            saveObjects        = binForm.Deserialize(memStream) as List <SaveObject>;
        } catch (Exception e) {
            Debug.LogError(TAG + e.StackTrace);
            Debug.Log(TAG + "Error parsing old game data.. resetting save.");
            Init();
        }

        // Check if savegame versions match and migrate data if necessary
        SaveGameVersion currentVersion = new SaveGameVersion();

        if (GetSaveGameVersion() == null)
        {
            Debug.Log(TAG + "Save game is from before versions were implemented, we can overwrite all and make a clean file.");
            Init();
        }
        else if (currentVersion.GetVersion() > GetSaveGameVersion().GetVersion())
        {
            Debug.Log(TAG + "There is a new savegame version detected. ");

            // For new versions place migration code here...
            // ...
        }
    }
    private void Init()
    {
        saveObjects = new List <SaveObject>();

        // init all saveobjects
        OptionsSave            os  = new OptionsSave();
        PlayerSave             ps  = new PlayerSave();
        EndlessSessionSave     ess = new EndlessSessionSave();
        MultiplayerSessionSave mss = new MultiplayerSessionSave();
        SaveGameVersion        sgv = new SaveGameVersion();

        // add to list
        saveObjects.Add(os);
        saveObjects.Add(ps);
        saveObjects.Add(ess);
        saveObjects.Add(mss);
        saveObjects.Add(sgv);
    }