Skip to content

Запись

Система записи захватывает действия сущностей как бинарно-сериализуемые записи. Можно регистрировать кастомные типы действий, чтобы ваши данные корректно захватывались и воспроизводились.

Создание кастомного действия

Расширьте AbstractAction и реализуйте getId, write и read:

java
public class MyAction extends AbstractAction {

    public static final String ID = "my_action";

    private float myValue;

    public MyAction(int tick) {
        super(tick);
    }

    @Override
    public String getId() { return ID; }

    @Override
    public void write(Action.Writer writer) throws IOException {
        writer.addFloat(myValue);
    }

    @Override
    public void read(Action.Reader reader) throws IOException {
        myValue = reader.readFloat();
    }

    @Override
    public ActionResult execute(IPlaybackContext ctx, IPlaybackSession session) {
        // применить myValue во время воспроизведения
        return ActionResult.SUCCESS;
    }
}

write и read должны быть симметричны, порядок записи должен точно соответствовать порядку чтения.

Дедупликация и перемотка

Переопределите differs, чтобы избежать записи одинаковых последовательных кадров:

java
@Override
public boolean differs(AbstractAction other) {
   if (!(other instanceof MyAction that)) {
        return false;
    }
    return Float.compare(myValue, that.myValue) != 0;
}

Переопределите createRewindSnapshot и shouldExecuteOnRewind, если действие должно участвовать в перемотке для катсцен:

java
@Override
public boolean shouldExecuteOnRewind() { return true; }

Регистрация

java
ctx.registerRecordingAction(MyAction.ID, MyAction::new);

Переданный id должен совпадать с getId() вашего класса действия.