UndoRedo
Inherits: Object
在编辑器或自定义工具中管理撤销及重做操作的辅助工具。
描述
在编辑器或自定义工具中管理撤销及重做操作的辅助工具。它的工作原理是在“action”(动作)中注册方法和属性的变化。
常见的行为是首先创建一个动作,然后添加用于 do/undo(执行/撤销)的方法调用或属性更改,然后提交动作。
下面是一个插件中例子,展示如何在 Godot 编辑器自己的 UndoRedo
中添加一个动作。
var undo_redo = get_undo_redo() # EditorPlugin 的方法。
func do_something():
pass # 在此处添加你的代码。
func undo_something():
pass # 在此处添加用于恢复“do_something()”所做修改的代码。
func _on_MyButton_pressed():
var node = get_node("MyNode2D")
undo_redo.create_action("移动节点")
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、commit_action,否则可能会导致崩溃。
如果你不需要注册某个方法,你可以不注册 add_do_method 和 add_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 ) |
get_current_action_name ( ) const | |
get_version ( ) const | |
has_redo ( ) const | |
has_undo ( ) const | |
is_commiting_action ( ) const | |
redo ( ) | |
undo ( ) |
信号
- version_changed ( )
枚举
enum MergeMode:
MERGE_DISABLE = 0 —- 使“do”/“undo”操作保持在单独的动作中。
MERGE_ENDS = 1 —- 使动作的“do”的操作来自于创建的第一个动作,“undo”的操作来自于最后一个同名的后续动作。
MERGE_ALL = 2 —- 使具有相同名称的后续动作合并为一个。
方法说明
注册一个方法,这个方法会在动作被提交时调用。
为“do”注册属性值的更改。
- void add_do_reference ( Object object )
为“do”注册一个引用,该引用会在“do”的历史丢失时删除。主要针对的是在“do”调用中创建的新节点。请不要用于资源。
注册一个方法,这个方法会在动作被撤销时调用。
为“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_method、add_undo_method、add_do_property 和 add_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)。
- bool redo ( )
重做上一个动作。
- bool undo ( )
撤销上一个动作。