UndoRedo

Inherits: Object

在编辑器或自定义工具中管理撤销及重做操作的辅助工具。

描述

在编辑器或自定义工具中管理撤销及重做操作的辅助工具。它的工作原理是在“action”(动作)中注册方法和属性的变化。

常见的行为是首先创建一个动作,然后添加用于 do/undo(执行/撤销)的方法调用或属性更改,然后提交动作。

下面是一个插件中例子,展示如何在 Godot 编辑器自己的 UndoRedo 中添加一个动作。

  1. var undo_redo = get_undo_redo() # EditorPlugin 的方法。
  2. func do_something():
  3. pass # 在此处添加你的代码。
  4. func undo_something():
  5. pass # 在此处添加用于恢复“do_something()”所做修改的代码。
  6. func _on_MyButton_pressed():
  7. var node = get_node("MyNode2D")
  8. undo_redo.create_action("移动节点")
  9. undo_redo.add_do_method(self, "do_something")
  10. undo_redo.add_undo_method(self, "undo_something")
  11. undo_redo.add_do_property(node, "position", Vector2(100,100))
  12. undo_redo.add_undo_property(node, "position", node.position)
  13. undo_redo.commit_action()

应该像例子中那样依次调用 create_actionadd_do_methodadd_undo_methodadd_do_propertyadd_undo_propertycommit_action,否则可能会导致崩溃。

如果你不需要注册某个方法,你可以不注册 add_do_methodadd_undo_method;对于属性也是这样。你也可以注册一个以上的方法及属性。

方法

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 ( )

信号

  • version_changed ( )

undoredo 被调用时调用。

枚举

enum MergeMode:

  • MERGE_DISABLE = 0 —- 使“do”/“undo”操作保持在单独的动作中。

  • MERGE_ENDS = 1 —- 使动作的“do”的操作来自于创建的第一个动作,“undo”的操作来自于最后一个同名的后续动作。

  • MERGE_ALL = 2 —- 使具有相同名称的后续动作合并为一个。

方法说明

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

注册一个方法,这个方法会在动作被提交时调用。


为“do”注册属性值的更改。


  • void add_do_reference ( Object object )

为“do”注册一个引用,该引用会在“do”的历史丢失时删除。主要针对的是在“do”调用中创建的新节点。请不要用于资源。


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

注册一个方法,这个方法会在动作被撤销时调用。


为“undo”注册属性值的更改。


  • void add_undo_reference ( Object object )

为“undo”注册一个引用,该引用会在“undo”的历史丢失时删除。主要针对的是在“do”调用删除的节点(而非“undo”调用!)。


  • void clear_history ( bool increase_version=true )

清除撤销/重做历史和相关的引用。

false 传递给 encreate_version 将阻止版本号由此增加。


  • void commit_action ( )

提交动作。当这个函数被调用时,所有“do”的方法/属性都会被调用/设置。


创建一个新的动作。在这个动作被调用后,完成所有对 add_do_methodadd_undo_methodadd_do_propertyadd_undo_property 的调用,然后用 commit_action 提交这个动作。

动作的合并方式由 merge_mode 参数决定。详情参阅 MergeMode


  • String get_current_action_name ( ) const

获取当前动作的名称。


  • int get_version ( ) const

获取版本。每次提交一个新的操作,UndoRedo 的版本号都会自动增加。

这主要用于检查保存的版本是否发生了更改。


  • bool has_redo ( ) const

有“重做”动作可用时返回 true


  • bool has_undo ( ) const

有“撤销”动作可用时返回 true


  • bool is_commiting_action ( ) const

如果 UndoRedo 当前正在提交动作,即运行其“do”的方法或属性变化,则返回true(请参阅 commit_action)。


重做上一个动作。


撤销上一个动作。