reckfellENGINE

UndoRedo

Предоставляет высокоуровневый интерфейс для реализации операций отмены и повтора.

На этой странице
class UndoRedoReckfellSharpНаследует ReckfellObject

Предоставляет высокоуровневый интерфейс для реализации операций отмены и повтора.

Функция UndoRedo работает, регистрируя методы и изменения свойств внутри "действий". Вы можете создать действие, затем предоставить способы его выполнения и отмены с помощью вызовов функций и изменения свойств, а затем зафиксировать действие. При фиксации действия будут выполнены все методы do_*. При использовании метода UndoRedo.Undo будут выполнены методы undo_*. Если используется метод UndoRedo.Redo, то снова будут выполнены все методы do_*. Вот пример того, как добавить действие:

C#
private UndoRedo _undoRedo;

public override void _Ready()
{
    _undoRedo = new UndoRedo();
}

public void DoSomething()
{
    // Put your code here.
}

public void UndoSomething()
{
    // Put here the code that reverts what's done by "DoSomething()".
}

private void OnMyButtonPressed()
{
    var node = GetEntity<Entity2D>("MyEntity2D");
    _undoRedo.CreateAction("Move the node");
    _undoRedo.AddDoMethod(new Callable(this, MethodName.DoSomething));
    _undoRedo.AddUndoMethod(new Callable(this, MethodName.UndoSomething));
    _undoRedo.AddDoProperty(node, "position", new Vector2(100, 100));
    _undoRedo.AddUndoProperty(node, "position", node.Position);
    _undoRedo.CommitAction();
}

Перед вызовом любого из методов add_(un)do_* необходимо сначала вызвать UndoRedo.CreateAction. А после этого UndoRedo.CommitAction. Если вам не нужно регистрировать метод, вы можете не указывать UndoRedo.AddDoMethod и UndoRedo.AddUndoMethod; то же самое относится и к свойствам. Вы также можете зарегистрировать несколько методов/свойств. Если вы создаете EditorPlugin и хотите интегрировать его в историю отмен редактора, используйте вместо этого EditorUndoRedoManager. Если вы регистрируете несколько свойств/методов, зависящих друг от друга, имейте в виду, что по умолчанию операции отмены вызываются в том же порядке, в котором они были добавлены. Поэтому вместо группировки операций отмены с их операциями отмены лучше сгруппировать do с одной стороны и undo с другой, как показано ниже.

C#
_undo_redo.CreateAction("Add object");

// DO
_undo_redo.AddDoMethod(new Callable(this, MethodName.CreateObject));
_undo_redo.AddDoMethod(new Callable(this, MethodName.AddObjectToSingleton));

// UNDO
_undo_redo.AddUndoMethod(new Callable(this, MethodName.RemoveObjectFromSingleton));
_undo_redo.AddUndoMethod(new Callable(this, MethodName.DestroyThatObject));

_undo_redo.CommitAction();

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

UndoRedoКонструктор
# UndoRedo
C#
public UndoRedo();

Свойства1

MaxStepsСвойство
# MaxSteps
C#
public int MaxSteps { get; set; }

Максимальное количество шагов, которые можно сохранить в истории отмены/повтора. Если количество сохраненных шагов превышает этот предел, более старые шаги удаляются из истории и больше не могут быть вызваны методом UndoRedo.Undo. Значение 0 или ниже означает отсутствие ограничений.

Методы24

AddDoMethodvoid
# AddDoMethod
C#
public void AddDoMethod(Callable callable);

Зарегистрируйте Callable, который будет вызван при совершении действия.

Параметры
ИмяТипПо умолчанию
callableCallable—
AddDoPropertyvoid
# AddDoProperty
C#
public void AddDoProperty(ReckfellObject @object, StringName property, Variant value);

Зарегистрируйте property, которое изменит свое значение на value при выполнении действия.

Параметры
ИмяТипПо умолчанию
objectReckfellObject—
propertyStringName—
valueVariant—
AddDoReferencevoid
# AddDoReference
C#
public void AddDoReference(ReckfellObject @object);

Зарегистрируйте ссылку на объект, который будет стерт, если история "do" будет удалена. Это полезно для объектов, добавленных действием "do" и удаленных действием "undo". Когда история "do" удаляется, если объект является RefCounted, он будет без ссылок. В противном случае он будет освобожден. Не используйте для ресурсов.

Параметры
ИмяТипПо умолчанию
objectReckfellObject—
AddUndoMethodvoid
# AddUndoMethod
C#
public void AddUndoMethod(Callable callable);

Зарегистрируйте Callable, который будет вызван при отмене действия.

Параметры
ИмяТипПо умолчанию
callableCallable—
AddUndoPropertyvoid
# AddUndoProperty
C#
public void AddUndoProperty(ReckfellObject @object, StringName property, Variant value);

Зарегистрируйте property, которое изменит свое значение на value при отмене действия.

Параметры
ИмяТипПо умолчанию
objectReckfellObject—
propertyStringName—
valueVariant—
AddUndoReferencevoid
# AddUndoReference
C#
public void AddUndoReference(ReckfellObject @object);

Зарегистрируйте ссылку на объект, который будет стерт, если история «отмены» будет удалена. Это полезно для объектов, добавленных действием «отменить» и удаленных действием «do». При удалении истории «отмены», если объект является RefCounted, он будет без ссылок. В противном случае он будет освобожден. Не используйте для ресурсов.

Параметры
ИмяТипПо умолчанию
objectReckfellObject—
ClearHistoryvoid
# ClearHistory
C#
public void ClearHistory(bool increaseVersion = true);

Очистите историю отмены/повтора и связанные ссылки. Передача false в increase_version предотвратит увеличение номера версии при очистке истории.

Параметры
ИмяТипПо умолчанию
increaseVersionbooltrue
CommitActionvoid
# CommitAction
C#
public void CommitAction(bool execute = true);

Зафиксируйте действие. Если execute равен true (что является значением по умолчанию), все методы/свойства «do» вызываются/устанавливаются при вызове этой функции.

Параметры
ИмяТипПо умолчанию
executebooltrue
CreateAction2 перегрузки
# CreateAction · 1/2
C#
public void CreateAction(string name, UndoRedo.MergeMode mergeMode);

Создайте новое действие. После того, как это будет вызвано, выполните все вызовы UndoRedo.AddDoMethod, UndoRedo.AddUndoMethod, UndoRedo.AddDoProperty и UndoRedo.AddUndoProperty, затем зафиксируйте действие с помощью UndoRedo.CommitAction. Способ объединения действий определяется merge_mode. Способ упорядочивания операций отмены в действиях определяется backward_undo_ops. Когда backward_undo_ops равен false, параметры отмены упорядочиваются в том же порядке, в котором они были добавлены. Это означает, что первая добавленная операция будет первой отмененной.

Параметры
ИмяТипПо умолчанию
namestring—
mergeModeUndoRedo.MergeMode—
# CreateAction · 2/2
C#
public void CreateAction(string name, UndoRedo.MergeMode mergeMode = UndoRedo.MergeMode.Disable, bool backwardUndoOps = false);

Создайте новое действие. После того, как это будет вызвано, выполните все вызовы UndoRedo.AddDoMethod, UndoRedo.AddUndoMethod, UndoRedo.AddDoProperty и UndoRedo.AddUndoProperty, затем зафиксируйте действие с помощью UndoRedo.CommitAction. Способ объединения действий определяется merge_mode. Способ упорядочивания операций отмены в действиях определяется backward_undo_ops. Когда backward_undo_ops равен false, параметры отмены упорядочиваются в том же порядке, в котором они были добавлены. Это означает, что первая добавленная операция будет первой отмененной.

Параметры
ИмяТипПо умолчанию
namestring—
mergeModeUndoRedo.MergeModeUndoRedo.MergeMode.Disable
backwardUndoOpsboolfalse
EndForceKeepInMergeEndsvoid
# EndForceKeepInMergeEnds
C#
public void EndForceKeepInMergeEnds();

Прекращает отмечать операции как подлежащие обработке, даже если действие объединяется с другим в режиме UndoRedo.MergeMode.Ends. См. UndoRedo.StartForceKeepInMergeEnds.

GetActionNamestring
# GetActionName
C#
public string GetActionName(int id);

Получает имя действия из его индекса.

Параметры
ИмяТипПо умолчанию
idint—
Возвращает string
GetCurrentActionint
# GetCurrentAction
C#
public int GetCurrentAction();

Получает индекс текущего действия.

Возвращает int
GetCurrentActionNamestring
# GetCurrentActionName
C#
public string GetCurrentActionName();

Получает имя текущего действия, эквивалентно get_action_name(get_current_action()).

Возвращает string
GetHistoryCountint
# GetHistoryCount
C#
public int GetHistoryCount();

Возвращает количество элементов в истории.

Возвращает int
GetMaxStepsint
# GetMaxSteps
C#
public int GetMaxSteps();
Возвращает int
GetVersionulong
# GetVersion
C#
public ulong GetVersion();

Получает версию. Каждый раз, когда фиксируется новое действие, номер версии UndoRedo автоматически увеличивается. Это полезно в основном для проверки того, изменилось ли что-то по сравнению с сохраненной версией.

Возвращает ulong
HasRedobool
# HasRedo
C#
public bool HasRedo();

Возвращает true, если доступно действие «повторить».

Возвращает bool
HasUndobool
# HasUndo
C#
public bool HasUndo();

Возвращает true, если доступно действие «отменить».

Возвращает bool
IsCommittingActionbool
# IsCommittingAction
C#
public bool IsCommittingAction();

Возвращает true, если UndoRedo в данный момент фиксирует действие, т. е. запускает свой метод «do» или изменение свойства (см. UndoRedo.CommitAction).

Возвращает bool
Redobool
# Redo
C#
public bool Redo();

Повторяет последнее действие. Возвращает false, если не было действия для повтора.

Возвращает bool
SetMaxStepsvoid
# SetMaxSteps
C#
public void SetMaxSteps(int maxSteps);
Параметры
ИмяТипПо умолчанию
maxStepsint—
StartForceKeepInMergeEndsvoid
# StartForceKeepInMergeEnds
C#
public void StartForceKeepInMergeEnds();

Отмечает следующие операции "do" и "undo" для обработки, даже если действие будет объединено с другим в режиме UndoRedo.MergeMode.Ends. Возврат к нормальной работе с помощью UndoRedo.EndForceKeepInMergeEnds.

Undobool
# Undo
C#
public bool Undo();

Отменяет последнее действие. Возвращает false, если не было действия для отмены.

Возвращает bool

Сигналы и события1

VersionChangedСобытие
# VersionChanged
C#
public event Action VersionChanged;

Вызывается при вызове UndoRedo.Undo или UndoRedo.Redo.

UndoRedo.MergeMode

ЗначениеОписание
All = 2

Объединяет это действие с предыдущим, если у них одинаковое имя.

Disable = 0

Делает операции «do»/«отменить» отдельными действиями.

Ends = 1

Объединяет это действие с предыдущим, если у них одинаковое имя. Сохраняет только операции "отменить" первого действия и операции "do" последнего действия. Полезно для последовательных изменений одного значения.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.