AnimatedEffect · UiEffect20 / 21

Свой эффект и общий lifecycle

Используем готовое владение временем и паузой.

UiEffect описывает четыре метода: update(deltaSeconds), setActive(active), setReducedMotion(reduced) и dispose(). Этот контракт позволяет приложению или ToolkitComponent одинаково обслуживать разные эффекты.

AnimatedEffect реализует счётчик elapsedSeconds, паузу и идемпотентное освобождение. Подкласс добавляет только своё поведение.

import { AnimatedEffect } from '@gamedevland/cyber-ui';

export class PulsePhase extends AnimatedEffect {
  get alpha(): number {
    this.assertLive();
    return this.reducedMotion ? 1 : 0.8 + 0.2 * Math.sin(this.elapsedSeconds * 2);
  }
}

const effect = new PulsePhase();
effect.update(0.1);
console.log(effect.alpha);
effect.setActive(false);
effect.update(1);
console.log(effect.elapsedSeconds); // 0.1
// Before releasing the screen:
effect.dispose();

update() принимает конечные неотрицательные секунды. setActive(false) замораживает время. Reduced motion задаёт предпочтение, а подкласс выбирает неподвижный результат.

Для реакции доступны защищённые хуки onFrame(), onActivityChanged(active), onMotionChanged() и onDispose(). После dispose() рабочие методы выбрасывают ошибку; повторное освобождение допустимо. Базовый класс не создаёт ticker и не уничтожает объекты приложения.

Источники ↗

Cyber UI Toolkit · AnimatedEffect↗Параметры и поведение публичного API.Cyber UI Toolkit · types↗Параметры и поведение публичного API.