UndoRedo

Inherits: Object

Ayudante para gestionar las operaciones de deshacer/rehacer en el editor o las herramientas personalizadas.

Descripción

Ayudante para gestionar las operaciones de deshacer/rehacer en el editor o las herramientas personalizadas. Funciona registrando métodos y cambios de propiedades dentro de las "acciones".

El comportamiento común es crear una acción, luego agregar llamadas de hacer/deshacer a las funciones o cambios de propiedades, y luego confirmar la acción.

Aquí hay un ejemplo de cómo añadir una acción al propio editor de Godot UndoRedo, desde un plugin:

var undo_redo = get_undo_redo() # Método de EditorPlugin.

func do_something():
    pass # Ponga su código aquí.

func undo_something():
    pass # Ponga aquí el código que revierte lo que se hace con "do_something()".

func _on_MyButton_pressed():
    var node = get_node("MiNodo2D")
    undo_redo.create_action("Mover el nodo")
    undo_redo.add_do_method(self, "do_something")
    undo_redo.add_undo_method(self, "undo_something")
    undo_redo.add_do_property(node, "position", Vector2(100,100))
    undo_redo.add_undo_property(node, "position", node.position)
    undo_redo.commit_action()

create_action, add_do_method, add_undo_method, add_do_property, add_undo_property, y commit_action deberían ser llamados uno tras otro, como en el ejemplo. Si no se hace así, se pueden producir caídas.

Si no necesitas registrar un método, puedes dejar fuera add_do_method y add_undo_method; lo mismo vale para las propiedades. También puedes registrar más de un método/propiedad.

Métodos

void

add_do_method ( Object object, String method, ... ) vararg

void

add_do_property ( Object object, String property, Variant value )

void

add_do_reference ( Object object )

void

add_undo_method ( Object object, String method, ... ) vararg

void

add_undo_property ( Object object, String property, Variant value )

void

add_undo_reference ( Object object )

void

clear_history ( bool increase_version=true )

void

commit_action ( )

void

create_action ( String name, MergeMode merge_mode=0 )

String

get_current_action_name ( ) const

int

get_version ( ) const

bool

has_redo ( ) const

bool

has_undo ( ) const

bool

is_commiting_action ( ) const

bool

redo ( )

bool

undo ( )

Señales

  • version_changed ( )

Llamado cuando undo o redo fue llamado.

Enumeraciones

enum MergeMode:

  • MERGE_DISABLE = 0 --- Hace que las operaciones de "hacer"/"deshacer" se mantengan en acciones separadas.

  • MERGE_ENDS = 1 --- Hace que la operación "hacer" de la acción sea de la primera acción creada y la operación "deshacer" sea de la última acción posterior con el mismo nombre.

  • MERGE_ALL = 2 --- Hace que las acciones subsiguientes con el mismo nombre se fusionen en una sola.

Descripciones de Métodos

  • void add_do_method ( Object object, String method, ... ) vararg

Registrar un método que será llamado cuando se cometa la acción.


Registrar un cambio de valor de la propiedad para "hacer".


  • void add_do_reference ( Object object )

Registra una referencia para "hacer" que se borrará si se pierde la historia de "hacer". Esto es útil sobre todo para los nuevos nodos creados para la llamada "hacer". No lo utilice para los recursos.


  • void add_undo_method ( Object object, String method, ... ) vararg

Registra un método que se llamará cuando se deshaga la acción.


Registrar un cambio en el valor de la propiedad para "deshacer".


  • void add_undo_reference ( Object object )

Registra una referencia para "deshacer" que se borrará si se pierde la historia de "deshacer". Esto es útil sobre todo para los nodos eliminados con la llamada "hacer" (¡no la llamada "deshacer"!).


  • void clear_history ( bool increase_version=true )

Borra el historial de deshacer/rehacer y las referencias asociadas.

Pasar false a increase_version evitará que el número de versión se incremente a partir de esto.


  • void commit_action ( )

Comete la acción. Todos los métodos/propiedades "hacer" son llamados/fijados cuando se llama a esta función.


Crear una nueva acción. Después de que esto sea llamado, haz todas tus llamadas a add_do_method, add_undo_method, add_do_property, y add_undo_property, y luego confirma la acción con commit_action.

La forma en que se fusionan las acciones está dictada por el argumento merge_mode. Ver MergeMode para más detalles.


  • String get_current_action_name ( ) const

Obtiene el nombre de la acción actual.


  • int get_version ( ) const

Consigue la versión. Cada vez que se comete una nueva acción, el número de versión de UndoRedos se incrementa automáticamente.

Esto es útil sobre todo para comprobar si algo cambió de una versión guardada.


  • bool has_redo ( ) const

Devuelve true si una acción de "redo" está disponible.


  • bool has_undo ( ) const

Devuelve true si se dispone de una acción de "deshacer".


  • bool is_commiting_action ( ) const

Devuelve true si el UndoRedo está actualmente cometiendo la acción, es decir, ejecutando su método "hacer" o cambio de propiedad (ver commit_action).


Rehacer la última acción.


Deshace la última acción.