Exemple #1
0
    /*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);
    }