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)); }
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)); }
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(); } }
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)); }
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)); }
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"); } } } }
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]); } } }