Exemplo n.º 1
0
        internal static string Serialize(AICanvas canvas)
        {
            var root = new StageElement(
                ElementName.Canvas,
                SerializationMaster.Stage(ElementName.Offset, canvas.offset),
                SerializationMaster.ToStageValue(ElementName.Zoom, canvas.zoom));

            var views   = canvas.views;
            int svCount = views.Count;

            for (int i = 0; i < svCount; i++)
            {
                var          view = views[i];
                StageElement viewElement;

                if (view is SelectorView)
                {
                    viewElement = WriteSelectorView((SelectorView)view);
                }
                else if (view is AILinkView)
                {
                    viewElement = WriteAILinkView((AILinkView)view);
                }
                else
                {
                    throw new NotImplementedException("The view type has not been implemented for serialization.");
                }

                root.Add(viewElement);
            }

            return(SerializationMaster.Serialize(root));
        }
Exemplo n.º 2
0
        internal static string Serialize(IList <TopLevelView> items)
        {
            var aiPart = new StageElement(ElementName.AIPart);
            var uiPart = new StageElement(ElementName.UIPart);
            var root   = new StageElement(ElementName.ViewSnippet, aiPart, uiPart);

            root.AddTextAttribute(AttributeName.SnippetType, ElementName.ViewSnippet);

            var referencePos = new Vector2(float.MaxValue, float.MaxValue);

            for (int i = 0; i < items.Count; i++)
            {
                var view = items[i];

                var selectorView = view as SelectorView;
                if (selectorView != null)
                {
                    var item = selectorView.selector;

                    var aiItem = SerializationMaster.Stage(typeof(Selector).Name, item);
                    aiPart.Add(aiItem);

                    var viewItem = WriteSelectorView(selectorView);
                    uiPart.Add(viewItem);

                    //Even though reid also happens on paste we have to do it here as well, otherwise copying linked selectors will fail.
                    item.RegenerateId();
                }

                var linkView = view as AILinkView;
                if (linkView != null)
                {
                    var viewItem = WriteAILinkView(linkView);
                    uiPart.Add(viewItem);
                }

                if (view.viewArea.xMin < referencePos.x)
                {
                    referencePos.x = view.viewArea.xMin;
                }

                if (view.viewArea.yMin < referencePos.y)
                {
                    referencePos.y = view.viewArea.yMin;
                }
            }

            uiPart.AddValue(ElementName.ReferencePosition, referencePos);

            return(SerializationMaster.Serialize(root));
        }
Exemplo n.º 3
0
        internal void Save(string newName)
        {
            if (_ai == null || _ai.rootSelector == null)
            {
                return;
            }

            // new name is not null or empty when using 'Save As'
            if (!string.IsNullOrEmpty(newName))
            {
                this.name = StoredAIs.EnsureValidName(newName, _aiStorage);

                // If we are saving under a new name (as opposed to saving a new AI), we need to save copy of the current AI with new Ids.
                if (_aiStorage != null)
                {
                    _aiStorage = null;
                    _ai.RegenerateIds();
                }
            }

            bool saveNew = (_aiStorage == null);

            if (saveNew)
            {
                _aiStorage = AIStorage.Create(_ai.id.ToString(), this.name);
                StoredAIs.AIs.Add(_aiStorage);
                AssetPath.EnsurePath(AIGeneralSettings.instance.storagePath);
                var assetPath = AssetPath.Combine(AIGeneralSettings.instance.storagePath, this.name + ".asset");
                AssetDatabase.CreateAsset(_aiStorage, assetPath);
            }

            _aiStorage.version             = _aiVersion.version;
            _aiStorage.configuration       = SerializationMaster.Serialize(_ai);
            _aiStorage.editorConfiguration = GuiSerializer.Serialize(this.canvas);

            EditorUtility.SetDirty(_aiStorage);
            AssetDatabase.SaveAssets();
            this.isDirty = false;
            _undoRedo.SetSavePoint();

            if (saveNew && UserSettings.instance.autoGenerateNameMap)
            {
                AINameMapGenerator.WriteNameMapFile();
            }
        }
Exemplo n.º 4
0
        internal static string Serialize(QualifierView qualifier)
        {
            var aiPart = new StageElement(ElementName.AIPart);
            var uiPart = new StageElement(ElementName.UIPart);
            var root   = new StageElement(ElementName.QualifierSnippet, aiPart, uiPart);

            root.AddTextAttribute(AttributeName.SnippetType, ElementName.QualifierSnippet);

            var aiItem = SerializationMaster.Stage(ElementName.Qualifier, qualifier.qualifier);

            aiPart.Add(aiItem);

            var viewItem = WriteQualifierView(qualifier);

            uiPart.Add(viewItem);

            return(SerializationMaster.Serialize(root));
        }
Exemplo n.º 5
0
        internal static string Serialize(ActionView action)
        {
            var aiPart = new StageElement(ElementName.AIPart);
            var uiPart = new StageElement(ElementName.UIPart);
            var root   = new StageElement(ElementName.ActionSnippet, aiPart, uiPart);

            root.AddTextAttribute(AttributeName.SnippetType, ElementName.ActionSnippet);

            var aiItem = SerializationMaster.Stage(ElementName.Action, action.action);

            aiPart.Add(aiItem);

            var viewItem = WriteActionView(action);

            uiPart.Add(viewItem);

            return(SerializationMaster.Serialize(root));
        }
Exemplo n.º 6
0
        public override void OnInspectorGUI()
        {
            var ai = (AIStorage)this.target;

            EditorGUILayout.Separator();
            EditorGUILayout.LabelField("Apex AI: " + ai.name);

            this.serializedObject.Update();
            EditorGUILayout.Separator();
            EditorGUILayout.PropertyField(_description);
            this.serializedObject.ApplyModifiedProperties();

            if (GUILayout.Button("Open"))
            {
                AIEditorWindow.Open(ai.aiId);
            }

            EditorGUILayout.Separator();
            _debug = EditorGUILayout.ToggleLeft("Show debug options", _debug);
            if (_debug)
            {
                if (GUILayout.Button("Copy AI Configuration to clipboard"))
                {
                    try
                    {
                        var json    = new StringBuilder();
                        var aiData  = SerializationMaster.Deserialize(ai.configuration);
                        var guiData = SerializationMaster.Deserialize(ai.editorConfiguration);
                        json.AppendLine(SerializationMaster.Serialize(aiData, true));
                        json.AppendLine(SerializationMaster.Serialize(guiData, true));
                        EditorGUIUtility.systemCopyBuffer = json.ToString();
                    }
                    catch
                    {
                        EditorUtility.DisplayDialog("Error", "Copying failed, unable to read AI Configuration.", "OK");
                    }
                }
            }
        }
Exemplo n.º 7
0
        internal void ExecuteRepairs()
        {
            RecordRepairedAIs();

            HashSet <string> unresolvedLookup = null;
            var hasUnresolvedTypes            = _status.resolvedTypesCount != _status.unresolvedTypesCount;

            if (hasUnresolvedTypes)
            {
                var unresolved = from urt in _typeResolution
                                 where urt.resolvedTypeName == null
                                 select urt.unresolvedTypeName.completeTypeName;

                unresolvedLookup = new HashSet <string>();
                foreach (var urtn in unresolved)
                {
                    unresolvedLookup.Add(urtn);
                }
            }

            if (hasUnresolvedTypes)
            {
                //Due to the separation of ai and editor data, the first thing we need to do is to handle the core elements of the ai
                //and ensure that any removals are also reflected in the editor data
                for (int i = 0; i < _stagedAis.Length; i++)
                {
                    RepairCoreElements(i, unresolvedLookup);
                }

                //Correct any additional type issues
                foreach (var urt in _typeResolution.Where(t => t.resolvedTypeName == null))
                {
                    foreach (var el in urt.elements)
                    {
                        el.Remove();
                    }
                }
            }

            //Next we handle members
            var hasUnresolvedMembers = _status.resolvedMembersCount != _status.unresolvedMembersCount;

            if (hasUnresolvedMembers)
            {
                foreach (var mr in _membersResolution)
                {
                    foreach (var mm in mr.unresolvedMembers.Where(um => um.resolvedName == null))
                    {
                        foreach (var el in mm.items)
                        {
                            el.Remove();
                        }
                    }
                }
            }

            //And finally mismatches
            foreach (var mm in _mismatchedMembers.Where(m => m.resolvedTypeName == null && m.resolvedValue == null))
            {
                mm.item.Remove();
            }

            for (int i = 0; i < _ais.Length; i++)
            {
                _ais[i].configuration = SerializationMaster.Serialize(_stagedAis[i]);

                if (_stagedEditorConfigs != null && _stagedEditorConfigs[i] != null)
                {
                    _ais[i].editorConfiguration = SerializationMaster.Serialize(_stagedEditorConfigs[i]);
                }
            }
        }