/*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); }
/** Main serializer function. * Serializes all graphs to a byte array * A similar function exists in the AstarPathEditor.cs script to save additional info */ public byte[] SerializeGraphs (SerializeSettings settings, out uint checksum) { AstarPath.active.BlockUntilPathQueueBlocked(); var sr = new AstarSerializer(this, settings); sr.OpenSerialize(); SerializeGraphsPart (sr); var bytes = sr.CloseSerialize(); checksum = sr.GetChecksum (); return bytes; }