actor/once-actor.ts

import { BaseActor } from './base-actor';
import { AppearEvent, IOnceActor } from '../common/types';

/**
 * Stage 에 등록될 Actor.
 * 스테이지 진입을 한번만 감지한 후 본인 스스로 관찰 해제하는 감지형.
 * (사용 예: 화면 진입시 한번만 애니메이션 한다, 이미지 로드를 한다)
 * @class OnceActor
 * @extends {BaseActor}
 */
export class OnceActor extends BaseActor implements IOnceActor {
  /**
   * 스테이지 진입. 진입시 자동 관찰 해제.
   * @override
   * @param [entry]
   */
  appear(entry?: IntersectionObserverEntry): void {
    if (this.isAppear === true) return;
    this.isAppear = true;
    this.dispatch(AppearEvent.APPEAR, entry);
    if (this.stage) {
      this.stage.unobserve(this);
    }
  }
}