Слои катсцен
Слои катсцен, это треки на временной шкале. Вы можете регистрировать кастомные типы слоёв, которые появятся в редакторе и будут выполнять логику на заданном тике.
Создание типа слоя
Реализуйте ICutsceneLayerType для описания и создания вашего слоя:
public class MyLayerType implements ICutsceneLayerType {
@Override public String getId() { return "my-layer"; }
@Override public String getName() { return "My Layer"; }
@Override public ICutsceneLayer createLayer() { return new MyLayer(this); }
}Затем расширьте CutsceneLayer для самого слоя. Нужно реализовать createDefaultKeyframe, который возвращает новый ключевой кадр на заданном тике:
public class MyLayer extends CutsceneLayer {
@Override
public Keyframe createDefaultKeyframe(int tick) {
return new MyKeyframe(tick, this);
}
}Регистрация
ctx.registerCutsceneLayer(new MyLayerType());Выполнение на тике
ICutsceneLayer.execute(float tick) вызывается на каждом тике воспроизведения. Возвращает true, если слой обработал тик, и false, если тик вне диапазона ключевых кадров. Базовая реализация возвращает false, поэтому переопределите её для применения эффекта слоя.
Используйте isTickCoveredBy(tick) для ранней проверки, затем читайте интерполированные данные и применяйте их:
@Override
public boolean execute(float tick) {
if (!isTickCoveredBy(tick)) return false;
// интерполировать и применить эффект
return true;
}Работа с ключевыми кадрами
Внутри слоя используйте следующие защищённые методы:
// ключевые кадры, отсортированные по тику, отфильтрованные по подтипу
List<K> sorted = getSortedKeyframes(MyKeyframe.class);
// сегмент, обрамляющий заданный тик (используется для интерполяции)
KeyframeSegment<K> seg = findSegment(sorted, tick);
// проверка покрытия тика
boolean covered = isTickCoveredBy(tick);
boolean exact = isExactTick(tick);См. Ключевые кадры для реализации кастомного Keyframe и интерполяции между ними.