#pragma once #include "core/object/class_db.h" #include "core/object/object.h" #include "core/variant/callable.h" #include "terrain_editor/register_types.h" class EditHistory : public Object { GDCLASS(EditHistory, Object); static void _bind_methods(); static EditHistory *singleton_instance; friend void initialize_terrain_editor_module(ModuleInitializationLevel p_level); struct EditAction { Callable do_action; Callable undo_action; }; public: static EditHistory *get_singleton() { return singleton_instance; } void push_action(Callable do_action, Callable undo_action); void undo(); void redo(); void clear_history(); private: size_t undo_count{ 0 }; Vector history{}; };