BaseTypedAction07 / 15

Своё действие для плавного скрытия

Меняем прозрачность элемента за заданное время.

Создадим FadeAction. configDecoder проверяет длительность из JSON, inputDecoder — прозрачность, переданную в runAction.

import { BaseTypedAction } from '@gamedevland/engine/layouts';
import { SchemaDecoder } from '@gamedevland/engine/validation';

export class FadeAction extends BaseTypedAction<
  { duration: number },
  { alpha: number }
> {
  protected override readonly configDecoder = SchemaDecoder.object({
    duration: SchemaDecoder.number({ min: 0 }),
  });
  protected override readonly inputDecoder = SchemaDecoder.object({
    alpha: SchemaDecoder.number({ min: 0, max: 1 }),
  });

  protected override async execute(input: { alpha: number }): Promise<void> {
    await this.ownTween(
      this.node.tweens.alphaTo(input.alpha, this.config.duration),
    );
  }
}

Зарегистрируем класс как FadeAction. В actions.fade укажем type: 'FadeAction' и data: { duration: 0.2 }. Вызов runAction('fade', { alpha: 0 }) скроет узел за 0,2 секунды.

Настройкаduration: 0.2
Запускalpha: 0
РезультатУзел плавно исчезает