/** Main serializer function, a similar one exists in the AstarEditor.cs script to save additional info */ public byte[] SerializeGraphs(AstarSerializer serializer) { serializer.OpenSerialize(); SerializeGraphsPart(serializer); serializer.Close(); byte[] bytes = (serializer.writerStream.BaseStream as System.IO.MemoryStream).ToArray(); Debug.Log("Got a whole bunch of data, " + bytes.Length + " bytes"); return(bytes); }
/** Main deserializer function (old). Loads from \a bytes variable \deprecated */ public void DeserializeGraphs_oldInternal(AstarSerializer serializer, byte[] bytes) { System.DateTime startTime = System.DateTime.UtcNow; if (bytes == null || bytes.Length == 0) { Debug.Log("No previous data, assigning default"); graphs = new NavGraph[0]; return; } Debug.Log("Deserializing..."); serializer = serializer.OpenDeserialize(bytes); DeserializeGraphsPart(serializer); serializer.Close(); System.DateTime endTime = System.DateTime.UtcNow; Debug.Log("Deserialization complete - Process took " + ((endTime - startTime).Ticks * 0.0001F).ToString("0.00") + " ms"); }
/*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 deserializer function (old). Loads from \a bytes variable \deprecated */ public void DeserializeGraphs_oldInternal(AstarSerializer serializer, byte[] bytes) { System.DateTime startTime = System.DateTime.UtcNow; if (bytes == null || bytes.Length == 0) { Debug.Log ("No previous data, assigning default"); graphs = new NavGraph[0]; return; } Debug.Log ("Deserializing..."); serializer = serializer.OpenDeserialize (bytes); DeserializeGraphsPart (serializer); serializer.Close (); System.DateTime endTime = System.DateTime.UtcNow; Debug.Log ("Deserialization complete - Process took "+((endTime-startTime).Ticks*0.0001F).ToString ("0.00")+" ms"); }
/** Main serializer function, a similar one exists in the AstarEditor.cs script to save additional info */ public byte[] SerializeGraphs(AstarSerializer serializer) { serializer.OpenSerialize (); SerializeGraphsPart (serializer); serializer.Close (); byte[] bytes = (serializer.writerStream.BaseStream as System.IO.MemoryStream).ToArray (); Debug.Log ("Got a whole bunch of data, "+bytes.Length+" bytes"); return bytes; }
/** Obsolete */ public AstarSerializer Loadx (bool runtime, out NavGraph graph, AstarSerializer.DeSerializationInterrupt interrupt) { float startTime = Time.realtimeSinceStartup; AstarSerializer serializer = new AstarSerializer (this); //serializer.DeSerialize (this, runtime, out graph,interrupt); if (runtime) { serializer.Close (); } graph = null; Debug.Log ("Loading took "+(Time.realtimeSinceStartup-startTime)+" s to complete"); return serializer; }
//The runtime variable is there to inform the script about that some variables might not get saved, like the sourceMesh reference in the NavmeshGraph which is a reference to the Unity asset database and cannot be saved or loaded during runtime. //When runtime is false, the stream won't be closed /** Obsolete */ public AstarSerializer Savex (NavGraph graph, bool runtime) { float startTime = Time.realtimeSinceStartup; if (isCalculatingPaths) { Debug.LogWarning ("The script is currently calculating paths, the serialization can interfere with the pathfinding"); } //Fill some variables with index values for each node which is usefull to the serializer //This can interfere with pathfinding so all pathfinding should be stopped before calling this function for (int i=0;i<graphs.Length;i++) { NavGraph graphx = graphs[i]; if (graphx.nodes == null) { continue; } for (int q=0;q<graphx.nodes.Length;q++) { graphx.nodes[q].g = q; graphx.nodes[q].h = i; } } AstarSerializer serializer = new AstarSerializer (this); serializer.compress = astarData.compress; //serializer.Serialize (graph,this, runtime); if (runtime) { serializer.Close (); } Debug.Log ("Saving took "+(Time.realtimeSinceStartup-startTime).ToString ("0.00")+" s to complete"); return serializer; }
public void DeserializeGraphs(AstarSerializer serializer, byte[] data) { serializer = serializer.OpenDeserialize (data); //Deserialize the main bulk of the data script.astarData.DeserializeGraphsPart (serializer); CheckGraphEditors (); //Deserialize editor data for (int i=0;i<script.graphs.Length;i++) { NavGraph graph = script.graphs[i]; GraphEditor graphEditor = graphEditors[i]; if (serializer.MoveToAnchor ("EditorSettings_"+i)) { ISerializableGraphEditor serializableEditor = graphEditor as ISerializableGraphEditor; if (serializableEditor != null) { //Set an unique prefix for all variables in this graph serializer.sPrefix = i.ToString ()+"E"; serializer.DeSerializeEditorSettings (graph,serializableEditor,script); //serializableEditor.DeSerializeSettings (graph,serializer); } } } serializer.Close (); }
public byte[] SerializeGraphs(AstarSerializer serializer) { //System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); //stopWatch.Start(); CheckGraphEditors (); serializer.OpenSerialize (); script.astarData.SerializeGraphsPart (serializer); for (int i=0;i<script.graphs.Length;i++) { NavGraph graph = script.graphs[i]; GraphEditor graphEditor = graphEditors[i]; serializer.AddAnchor ("EditorSettings_"+i); ISerializableGraphEditor serializableEditor = graphEditor as ISerializableGraphEditor; if (serializableEditor != null) { //@Add //Set an unique prefix for all variables in this graph serializer.sPrefix = i.ToString ()+"E"; serializer.SerializeEditorSettings (graph,serializableEditor,script); //serializableEditor.SerializeSettings (graph,serializer); } } serializer.Close (); byte[] bytes = (serializer.writerStream.BaseStream as System.IO.MemoryStream).ToArray (); //stopWatch.Stop(); //Debug.Log ("Serializing Graphs - Took "+stopWatch.Elapsed.ToString ()); return bytes; }