/** Saves all graphs and also user connections, but does not close, nor opens the stream */ public void SerializeGraphsPart(AstarSerializer serializer) { //AstarSerializer serializer = new AstarSerializer (); //serializer.OpenSerializeSettings (); SizeProfiler.Initialize(); SizeProfiler.Begin("File", serializer.writerStream, false); SizeProfiler.Begin("Graphs init", serializer.writerStream); serializer.writerStream.Write(graphs.Length); serializer.writerStream.Write(graphs.Length); SizeProfiler.End("Graphs init", serializer.writerStream); int[] masks = new int[graphs.Length]; for (int i = 0; i < graphs.Length; i++) { NavGraph graph = graphs[i]; int tmpMask = serializer.mask; SizeProfiler.Begin("Graphs type " + i, serializer.writerStream); serializer.AddAnchor("Graph" + i); serializer.writerStream.Write(graph.GetType().Name); serializer.writerStream.Write(graph.guid.ToString()); SizeProfiler.Begin("Graphs settings " + i, serializer.writerStream); //Set an unique prefix for all variables in this graph serializer.sPrefix = i.ToString(); serializer.SerializeSettings(graph, active); serializer.sPrefix = ""; masks[i] = serializer.mask; serializer.mask = tmpMask; SizeProfiler.End("Graphs settings " + i, serializer.writerStream); } SizeProfiler.Begin("User Connections", serializer.writerStream); serializer.SerializeUserConnections(userConnections); SizeProfiler.End("User Connections", serializer.writerStream); //data = (serializer.writerStream.BaseStream as System.IO.MemoryStream).ToArray (); //serializer.Close (); SizeProfiler.End("File", serializer.writerStream); SizeProfiler.Log(); }
/*public void OnDisableUndo () { return; if (!editor.enableUndo) { return; } if (undoState != null) { ScriptableObject.DestroyImmediate (undoState); undoState = null; } } private void ApplyUndo () { return; if (!editor.enableUndo) { return; } undoState.hasBeenReverted = false; if (AstarPath.active == null) { return; } byte[] bytes = GetSerializedBytes (target); bool isDifferent = false; //Check if the data is any different from the last saved data, if it isn't, don't load it if (undoState.data == null || bytes.Length != undoState.data.Length) { isDifferent = true; } else { for (int i=0;i<bytes.Length;i++) { if (bytes[i] != undoState.data[i]) { isDifferent = true; break; } } } if (isDifferent) { Debug.Log ("The undo is different "+ Event.current.type +" "+Event.current.commandName); //Event.current.Use (); AstarSerializer sz = new AstarSerializer (editor.script); sz.OpenDeserialize (undoState.data); sz.DeSerializeSettings (target,AstarPath.active); sz.Close (); } } public void ModifierKeysChanged () { return; if (!editor.enableUndo) { return; } if (undoState == null) { return; } //The user has tried to undo something, apply that if (undoState.hasBeenReverted) { ApplyUndo (); GUI.changed = true; editor.Repaint (); } } /** Handles undo operations for the graph * public void HandleUndo (NavGraph target) { return; if (!editor.enableUndo) { return; } if (undoState == null) { undoState = ScriptableObject.CreateInstance<GraphUndo>(); } Event e = Event.current; //ModifierKeysChanged (); //To serialize settings for a grid graph takes from 0.00 ms to 7.8 ms (usually 0.0, but sometimes jumps up to 7.8 (no values in between) if ((e.button == 0 && (e.type == EventType.MouseDown || e.type == EventType.MouseUp)) || (e.isKey && (e.keyCode == KeyCode.Tab || e.keyCode == KeyCode.Return))) { System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); stopWatch.Start(); //Serialize the settings of the graph byte[] bytes = GetSerializedBytes (target); bool isDifferent = false; if (undoState.data == null) { Debug.LogError ("UndoState.data == null - This should not happen"); return; } //Check if the data is any different from the last saved data, if it isn't, don't save it if (bytes.Length != undoState.data.Length) { isDifferent = true; } else { for (int i=0;i<bytes.Length;i++) { if (bytes[i] != undoState.data[i]) { isDifferent = true; break; } } } //Only save undo if the data was different from the last saved undo if (isDifferent) { //This flag is set to true so we can detect if the object has been reverted undoState.hasBeenReverted = true; Undo.RegisterUndo (undoState,"A* inspector"); //Assign the new data undoState.data = bytes; //Undo.SetSnapshotTarget(undoState,"A* inspector"); //Undo.CreateSnapshot (); //Undo.RegisterSnapshot(); undoState.hasBeenReverted = false; Debug.Log ("Saved "+bytes.Length+" bytes"); stopWatch.Stop(); Debug.Log ("Adding Undo "+stopWatch.Elapsed.ToString ()); } } }*/ /** Returns a byte array with the settings of the graph. This function serializes the graph's settings and stores them in a byte array, used for undo operations. This will not save any additional metadata such as which A* version we are working on. */ private byte[] GetSerializedBytes(NavGraph target) { //Serialize the settings of the graph AstarSerializer sz = new AstarSerializer (editor.script); sz.OpenSerialize (); sz.SerializeSettings (target,AstarPath.active); sz.Close (); byte[] bytes = (sz.writerStream.BaseStream as System.IO.MemoryStream).ToArray (); return bytes; }
/** Saves all graphs and also user connections, but does not close, nor opens the stream */ public void SerializeGraphsPart(AstarSerializer serializer) { //AstarSerializer serializer = new AstarSerializer (); //serializer.OpenSerializeSettings (); SizeProfiler.Initialize (); SizeProfiler.Begin ("File",serializer.writerStream,false); SizeProfiler.Begin ("Graphs init",serializer.writerStream); serializer.writerStream.Write (graphs.Length); serializer.writerStream.Write (graphs.Length); SizeProfiler.End ("Graphs init",serializer.writerStream); int[] masks = new int[graphs.Length]; for (int i=0;i<graphs.Length;i++) { NavGraph graph = graphs[i]; int tmpMask = serializer.mask; SizeProfiler.Begin ("Graphs type "+i,serializer.writerStream); serializer.AddAnchor ("Graph"+i); serializer.writerStream.Write (graph.GetType ().Name); serializer.writerStream.Write (graph.guid.ToString ()); SizeProfiler.Begin ("Graphs settings "+i,serializer.writerStream); //Set an unique prefix for all variables in this graph serializer.sPrefix = i.ToString (); serializer.SerializeSettings (graph,active); serializer.sPrefix = ""; masks[i] = serializer.mask; serializer.mask = tmpMask; SizeProfiler.End ("Graphs settings "+i,serializer.writerStream); } //Serialize nodes for (int i=0;i<graphs.Length;i++) { NavGraph graph = graphs[i]; serializer.mask = masks[i]; SizeProfiler.Begin ("Graphs nodes "+i,serializer.writerStream,false); serializer.AddAnchor ("GraphNodes_Graph"+i); serializer.writerStream.Write (masks[i]); serializer.sPrefix = i.ToString ()+"N"; serializer.SerializeNodes (graph,active); serializer.sPrefix = ""; SizeProfiler.End ("Graphs nodes "+i,serializer.writerStream); } SizeProfiler.Begin ("User Connections",serializer.writerStream); serializer.SerializeUserConnections (userConnections); SizeProfiler.End ("User Connections",serializer.writerStream); //data = (serializer.writerStream.BaseStream as System.IO.MemoryStream).ToArray (); //serializer.Close (); SizeProfiler.End ("File",serializer.writerStream); SizeProfiler.Log (); }