示例#1
0
    private void DisplayArray(object obj, ES2EditorType valueType, ES2Header header, string tag)
    {
        object[] array = obj as object[];

        if (currentArrayFoldouts == null)
        {
            currentArrayFoldouts = new bool[array.Length];
        }

        EditorGUILayout.IntField("Length", array.Length);
        EditorGUILayout.Space();



        for (int i = 0; i < array.Length; i++)
        {
            if (currentArrayFoldouts[i] = EditorGUILayout.Foldout(currentArrayFoldouts[i], i.ToString()))
            {
                EditorGUI.indentLevel++;
                object guiFields = valueType.DisplayGUI(array[i]);
                EditorGUI.indentLevel--;

                if (guiFields == null)
                {
                    EditorGUILayout.LabelField("This type cannot be viewed.");
                }
                else
                {
                    array[i] = guiFields;
                }
            }
        }

        currentValue = array;
    }
示例#2
0
    private void DisplayList(object obj, ES2EditorType valueType, ES2Header header, string tag)
    {
        List <object> array = obj as List <object>;
        int           count = array.Count;

        if (currentArrayFoldouts == null)
        {
            currentArrayFoldouts = new bool[count];
        }

        EditorGUILayout.IntField("Length", count);
        EditorGUILayout.Space();

        // If lengths are not equal, user has modified length field.

        /*if((Event.current.type == EventType.KeyUp) && (Event.current.keyCode == KeyCode.Return) && GUI.GetNameOfFocusedControl()=="arrayLength")
         * {
         *      if(length > array.Length)
         *      {
         *              int difference = length-array.Length;
         *              for(int i=0; i<difference; i++)
         *                      ArrayUtility.Add<object>(ref array, null);
         *      }
         *      else if(length < array.Length)
         *      {
         *              int difference = array.Length-length;
         *              for(int i=0; i<difference; i++)
         *                      ArrayUtility.RemoveAt<object>(ref array, array.Length-difference);
         *      }
         *
         *      es2Data.loadedData[tag] = array;
         * }*/

        for (int i = 0; i < count; i++)
        {
            if (currentArrayFoldouts[i] = EditorGUILayout.Foldout(currentArrayFoldouts[i], i.ToString()))
            {
                EditorGUI.indentLevel++;
                object guiFields = valueType.DisplayGUI(array[i]);
                EditorGUI.indentLevel--;

                if (guiFields == null)
                {
                    EditorGUILayout.LabelField("This type cannot be viewed.");
                }
                else
                {
                    array[i] = guiFields;
                }
            }
        }

        currentValue = array;
    }
示例#3
0
    private void SaveCurrentTag(ES2Header header)
    {
        try
        {
            ES2Type valueType = ES2TypeManager.GetES2Type(header.valueType);
            ES2Type keyType   = ES2TypeManager.GetES2Type(header.keyType);

            ES2Settings settings = new ES2Settings(currentFilePath);
            settings.encrypt            = header.settings.encrypt;
            settings.encryptionType     = header.settings.encryptionType;
            settings.encryptionPassword = header.settings.encryptionPassword;

            using (ES2Writer writer = new ES2Writer(settings))
            {
                if (header.collectionType == ES2Keys.Key._Null)
                {
                    writer.Write(currentValue, currentTag, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._NativeArray)
                {
                    writer.Write(currentValue as object[], currentTag, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._Dictionary)
                {
                    writer.Write(currentValue as Dictionary <object, object>, currentTag, keyType, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._List)
                {
                    writer.Write(currentValue as List <object>, currentTag, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._Queue)
                {
                    writer.Write(currentValue as Queue <object>, currentTag, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._Stack)
                {
                    writer.Write(currentValue as Stack <object>, currentTag, valueType);
                }
                else if (header.collectionType == ES2Keys.Key._HashSet)
                {
                    writer.Write(currentValue as HashSet <object>, currentTag, valueType);
                }

                writer.Save();
            }
        }
        catch (Exception e)
        {
            EditorUtility.DisplayDialog("Could not save file", "An error was thrown when trying to save to this file. See below for details.\n\n" + "Details: " + e.Message, "Ok");
        }
    }
示例#4
0
    protected void ProcessHeader(ES2Keys.Key expectedCollectionType, ES2Type expectedValue, ES2Type expectedKey, string tag)
    {
        if (ScanToTag(tag) == false)
        {
            Debug.LogError("Easy Save 2 Error: The data, tag, file or folder you are looking for does not exist. Please ensure that ES2.Exists(string identifier) returns true before calling this method.");
        }

        ES2Header header = ReadHeader();


        /* Check that we're loading the correct types */
        if (expectedValue == null)
        {
            Debug.LogError("This type is not supported by Easy Save, but you may be able to add support by going to 'Manage Types' in the 'Assets/Easy Save 2' menu.");
        }

        if (expectedCollectionType != header.collectionType)
        {
            // If the user is trying to load a non-collection with a collection method ...
            if (expectedCollectionType == ES2Keys.Key._Null)
            {
                Debug.LogError("Easy Save 2 Error: The data you are trying to load is a Collection. Please use the Load method for that type of collection (for example, ES2.LoadArray or ES2.LoadDictionary)");
            }
            else
            {
                Debug.LogError("Easy Save 2 Error: The data you are trying to load is not a Collection, but you are using a Collection method to use it. Use ES2.Load instead.");
            }
        }

        if (expectedKey != null)
        {
            if (header.keyType != expectedKey.hash)
            {
                Debug.LogError("Easy Save 2 Error: The type of key in the Dictionary you are loading does not match the key you are trying to load with.");
            }
        }

        if (expectedValue != null)
        {
            if (header.valueType != expectedValue.hash)
            {
                Debug.LogError("Easy Save 2 Error: The data you are trying to load does not match the Load method you are using to load it. ");
            }
        }

        if (header.settings.encrypt)
        {
            this.settings.encrypt = true;
        }
    }
示例#5
0
    /*
     *  Reads an object from the file, using the header data to determine type
     *	and load appropriately using self-assigning method. Must be positioned before a tag before using.
     *	Should not be used to load collections or non-value types.
     */
    public void ReadObject(object obj)
    {
        ES2Header header = ReadHeader();

        ES2Type es2Type = ES2TypeManager.GetES2Type(header.valueType);

        // Handle encrypted data
        if (header.settings.encrypt)
        {
            ReadEncrypted <System.Object>(es2Type, obj);
        }
        else
        {
            Read <System.Object>(es2Type, obj);
        }
    }
示例#6
0
 private string GetTypeName(ES2Header header, ES2EditorType valueType)
 {
     if (header.collectionType == ES2Keys.Key._Null)
     {
         return(valueType.type.ToString());
     }
     else if (header.collectionType == ES2Keys.Key._NativeArray)
     {
         return(valueType.type.ToString() + "[]");
     }
     else if (header.collectionType == ES2Keys.Key._Dictionary)
     {
         return("Dictionary<" + ES2TypeManager.GetES2Type(header.keyType).type.ToString() + "," + valueType.type.ToString() + ">");
     }
     else
     {
         string enumName = header.collectionType.ToString();
         return(enumName.Substring(1, enumName.Length - 1) + "<" + valueType.type.ToString() + ">");
     }
 }
示例#7
0
    /*
     *  Reads a Component from the file into Component on provided GameObject,
     *	using the header data to determine exact type.
     *  If GameObject doesn't contain Component, it will be added.
     */
    public void ReadComponent(GameObject go)
    {
        ES2Header header = ReadHeader();

        ES2Type es2Type = ES2TypeManager.GetES2Type(header.valueType);

        // Get Component from GameObject, or add it if it doesn't have one.
        Component c = go.GetComponent(es2Type.type);

        if (c == null)
        {
            c = go.AddComponent(es2Type.type);
        }

        // Handle encrypted data
        if (header.settings.encrypt)
        {
            ReadEncrypted <System.Object>(es2Type, c);
        }
        else
        {
            Read <System.Object>(es2Type, c);
        }
    }
示例#8
0
    private void DisplayDictionary(object obj, ES2EditorType valueType, ES2Header header, string tag)
    {
        Dictionary <object, object> dict = obj as Dictionary <object, object>;
        int count = dict.Count;

        object[] keys = dict.Keys.ToArray();

        if (currentArrayFoldouts == null)
        {
            currentArrayFoldouts = new bool[count];
        }

        EditorGUILayout.IntField("Count", count);
        EditorGUILayout.Space();

        // If lengths are not equal, user has modified length field.

        /*if((Event.current.type == EventType.KeyUp) && (Event.current.keyCode == KeyCode.Return) && GUI.GetNameOfFocusedControl()=="arrayLength")
         * {
         *      if(length > array.Length)
         *      {
         *              int difference = length-array.Length;
         *              for(int i=0; i<difference; i++)
         *                      ArrayUtility.Add<object>(ref array, null);
         *      }
         *      else if(length < array.Length)
         *      {
         *              int difference = array.Length-length;
         *              for(int i=0; i<difference; i++)
         *                      ArrayUtility.RemoveAt<object>(ref array, array.Length-difference);
         *      }
         *
         *      es2Data.loadedData[tag] = array;
         * }*/

        for (int i = 0; i < count; i++)
        {
            if (currentArrayFoldouts[i] = EditorGUILayout.Foldout(currentArrayFoldouts[i], i.ToString()))
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.LabelField("Key", EditorStyles.boldLabel);
                EditorGUILayout.Space();

                EditorGUI.indentLevel++;
                // Display Key
                object keyFields = ES2EditorType.Get(header.keyType).DisplayGUI(keys[i]);
                if (keyFields == null)
                {
                    EditorGUILayout.LabelField("This type cannot be viewed.");
                }
                EditorGUI.indentLevel--;

                EditorGUILayout.LabelField("Value", EditorStyles.boldLabel);
                EditorGUILayout.Space();

                EditorGUI.indentLevel++;
                // Display Value
                object valueFields = valueType.DisplayGUI(dict[keys[i]]);
                if (valueFields == null)
                {
                    EditorGUILayout.LabelField("This type cannot be viewed.");
                }
                else
                {
                    dict[keys[i]] = valueFields;
                    currentValue  = dict;
                }
                EditorGUI.indentLevel--;

                EditorGUI.indentLevel--;
            }
        }
    }
示例#9
0
    private void DisplayTagInfo()
    {
        // If a tag has been selected but requires a password, show password field...
        if (currentTag != null && this.currentTagRequiresPassword)
        {
            EditorGUILayout.LabelField("This tag requires a password to view");
            this.encryptionPassword = EditorGUILayout.TextField("Password", this.encryptionPassword);
            if (GUILayout.Button("Decrypt"))
            {
                OnTagChange();
            }
        }
        // If a tag has been selected and doesn't explicity require a password...
        else if (currentTag != null && currentValue != null)
        {
            // Get type names from ES2Header data.
            ES2Header     header    = headers[currentTag];
            ES2EditorType valueType = ES2EditorType.Get(header.valueType);

            // Only display this data if it's there's an ES2EditorType for it.
            if (valueType != null)
            {
                EditorGUILayout.BeginVertical();
                rightScrollPosition = EditorGUILayout.BeginScrollView(rightScrollPosition);

                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.BeginVertical();
                EditorGUILayout.LabelField("Type", EditorStyles.boldLabel);
                EditorGUILayout.Space();
                EditorGUI.indentLevel++;
                EditorGUILayout.LabelField(GetTypeName(header, valueType));
                EditorGUI.indentLevel--;
                EditorGUILayout.EndVertical();

                EditorGUILayout.BeginVertical();
                EditorGUILayout.LabelField("Encryption", EditorStyles.boldLabel);
                EditorGUILayout.Space();
                EditorGUI.indentLevel++;
                EditorGUILayout.BeginHorizontal();
                var tempLabelWidth = EditorGUIUtility.labelWidth;
                EditorGUIUtility.labelWidth = 90;
                header.settings.encrypt     = EditorGUILayout.Toggle("Encrypt?", header.settings.encrypt);
                if (header.settings.encrypt)
                {
                    header.settings.encryptionPassword = EditorGUILayout.TextField(header.settings.encryptionPassword);
                }
                EditorGUIUtility.labelWidth = tempLabelWidth;
                EditorGUILayout.EndHorizontal();
                EditorGUI.indentLevel--;
                EditorGUILayout.EndVertical();

                EditorGUILayout.EndHorizontal();
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Value", EditorStyles.boldLabel);

                EditorGUILayout.Space();
                EditorGUI.indentLevel++;

                if (header.collectionType == ES2Keys.Key._Null)
                {
                    DisplayObject(currentValue, valueType, currentTag);
                }
                else if (header.collectionType == ES2Keys.Key._NativeArray)
                {
                    DisplayArray(currentValue, valueType, header, currentTag);
                }
                else if (header.collectionType == ES2Keys.Key._Dictionary)
                {
                    DisplayDictionary(currentValue, valueType, header, currentTag);
                }
                else if (header.collectionType == ES2Keys.Key._List)
                {
                    DisplayList(currentValue, valueType, header, currentTag);
                }
                else
                {
                    EditorGUILayout.LabelField("The File Editor does not currently support Collections of this type.");
                }

                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
                EditorGUILayout.Space();

                EditorGUILayout.EndScrollView();

                // Save / Delete Tag Buttons
                EditorGUILayout.BeginHorizontal();

                if (valueType != null)
                {
                    if (GUILayout.Button("Save Tag", EditorStyles.toolbarButton))
                    {
                        SaveCurrentTag(header);
                    }
                }

                if (GUILayout.Button("Delete Tag", EditorStyles.toolbarButton))
                {
                    if (EditorUtility.DisplayDialog("Delete this Tag?", "Are you sure you want to permanently delete this tag?", "Delete Tag", "Cancel"))
                    {
                        DeleteCurrentTag();
                    }
                }

                // If adding something after 'delete tag', make sure tag hasn't been deleted first.

                EditorGUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }
            else
            {             // There's not an ES2EditorType for this data.
                EditorGUILayout.LabelField("The File Editor does not currently support this type.");
            }
        }
    }
示例#10
0
    public System.Object ReadObject()
    {
        ES2Header header = ReadHeader();

        ES2Type es2Type = ES2TypeManager.GetES2Type(header.valueType);

        // Handle encrypted data
        if (header.settings.encrypt)
        {
            // Handle non-encrypted data
            if (header.collectionType != ES2Keys.Key._Null)
            {
                if (header.collectionType == ES2Keys.Key._NativeArray)
                {
                    return(ReadEncryptedArray <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._List)
                {
                    return(ReadEncryptedList <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Queue)
                {
                    return(ReadEncryptedQueue <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Stack)
                {
                    return(ReadEncryptedStack <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._HashSet)
                {
                    return(ReadEncryptedHashSet <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Dictionary)
                {
                    ES2Type keyType = ES2TypeManager.GetES2Type(header.keyType);
                    return(ReadEncryptedDictionary <System.Object, System.Object>(keyType, es2Type));
                }
            }
            else
            {
                return(ReadEncrypted <System.Object>(es2Type));
            }
        }
        else
        {
            // Handle non-encrypted data
            if (header.collectionType != ES2Keys.Key._Null)
            {
                if (header.collectionType == ES2Keys.Key._NativeArray)
                {
                    return(ReadArray <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._List)
                {
                    return(ReadList <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Queue)
                {
                    return(ReadQueue <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Stack)
                {
                    return(ReadStack <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._HashSet)
                {
                    return(ReadHashSet <System.Object>(es2Type));
                }
                else if (header.collectionType == ES2Keys.Key._Dictionary)
                {
                    ES2Type keyType = ES2TypeManager.GetES2Type(header.keyType);
                    return(ReadDictionary <System.Object, System.Object>(keyType, es2Type));
                }
            }
            else
            {
                return(Read <System.Object>(es2Type));
            }
        }

        return(null);
    }