Beispiel #1
0
 private void CloseAllFoldouts()
 {
     for (int i = 0; i < componentSaves.Count; i++)
     {
         ComponentSave test = componentSaves[i];
         test.boolItem     = false;
         componentSaves[i] = test;
     }
 }
Beispiel #2
0
        private void OnGUI()
        {
            scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUIStyle.none);

            closeAllButton = GUILayout.Button("Close all");
            if (closeAllButton)
            {
                CloseAllFoldouts();
            }

            for (int i = 0; i < componentSaves.Count; i++)
            {
                if (components[i].GetType() != typeof(SaveableIdentifier))
                {
                    //TODO: save the variables
                    List <System.Tuple <string, string, string> > variables = ScriptReflector.GetVariableNames(components[i]);
                    ComponentSave tempList = componentSaves[i];
                    tempList.boolItem = EditorGUILayout.BeginFoldoutHeaderGroup(componentSaves[i].boolItem, components[i].GetType().Name);
                    componentSaves[i] = tempList;

                    if (componentSaves[i].boolItem == true)
                    {
                        GUILayout.Space(10);
                        EditorGUI.indentLevel += 5;
                        for (int v = 0; v < variables.Count; v++)
                        {
                            GUILayout.BeginHorizontal();
                            EditorGUILayout.LabelField(variables[v].Item1);
                            GUILayout.Space(-250);
                            componentSaves[i].boolList[v] = EditorGUILayout.Toggle(componentSaves[i].boolList[v]);
                            GUILayout.EndHorizontal();
                        }
                        EditorGUI.indentLevel -= 5;
                        GUILayout.Space(20);
                    }
                    EditorGUILayout.EndFoldoutHeaderGroup();
                }
            }

            GUILayout.FlexibleSpace();
            saveButton = GUILayout.Button("Save");
            if (saveButton)
            {
                SaveToIdentifier();
                Close();
            }
            GUILayout.EndScrollView();
        }
Beispiel #3
0
        private void SaveToIdentifier()
        {
            for (int i = 0; i < componentSaves.Count; i++)
            {
                ComponentSave cSave = componentSaves[i];
                if (!componentSaves[i].boolList.Contains(true))
                {
                    cSave.boolItem = false;
                }
                else
                {
                    cSave.boolItem = true;
                }
                componentSaves[i] = cSave;
            }

            identifier.componentSaves = componentSaves;
            identifier.hasChanged     = true;
        }
Beispiel #4
0
        private static void AddToSave(GameObject obj, int id)
        {
            XmlNode              idNode     = GetCreateIdNode(id);
            Iidentifier          identifier = obj.GetComponent <Iidentifier>();
            List <ComponentSave> cSave      = identifier.componentSaves;

            foreach (Component component in obj.GetComponents <Component>())
            {
                ComponentSave componentSave = cSave.Find(x => x.componentTypeName == component.GetType().Name);

                if (
                    component.GetType() != typeof(SaveableIdentifier) &&
                    (GetChildNodeFromName(idNode, component.GetType().AssemblyQualifiedName) == null || identifier.hasChanged) &&
                    componentSave.boolItem == true
                    )
                {
                    MakeVariableNodes(component, MakeComponentNode(component, idNode), componentSave);
                }
            }
        }
Beispiel #5
0
        private static void MakeVariableNodes(Component component, XmlNode componentNode, ComponentSave componentSave)
        {
            List <System.Tuple <string, string, string> > componentFields = ScriptReflector.GetVariableNames(component);

            for (int i = 0; i < componentFields.Count; i++)
            {
                XmlElement fieldNode = GetChildNodeFromName(componentNode, componentFields[i].Item1);
                if (componentSave.boolList[i])
                {
                    if (fieldNode == null)
                    {
                        fieldNode = xmlDocument.CreateElement(componentFields[i].Item1);
                    }

                    fieldNode.SetAttribute("type", componentFields[i].Item2);
                    fieldNode.InnerText = componentFields[i].Item3;
                    componentNode.AppendChild(fieldNode);
                }
                else if (fieldNode != null)
                {
                    componentNode.RemoveChild(fieldNode);
                }
            }
        }