MasatoMakino/particle-waypoint

View on GitHub
src/generator/MultipleParticleWays.ts

Summary

Maintainability
A
0 mins
Test Coverage
B
88%
import { ParticleWay } from "../index.js";
export type WaySelectType = "random" | "sequential";

/**
 * このクラスは、ParticleGeneratorに設定された複数の経路を管理するためのものです。
 */
export class MultipleParticleWays {
  public ways: ParticleWay[];
  public waySelectType: WaySelectType;
  private waySelectionCount: number = 0;

  constructor(option?: MultipleParticleWaysOption) {
    MultipleParticleWaysOption.initOption(option);
    this.ways = option.ways as ParticleWay[];
    this.waySelectType = option.type;
  }

  public countUp(): void {
    this.waySelectionCount = (this.waySelectionCount + 1) % this.ways.length;
  }

  public getParticleWay(): ParticleWay {
    let index;
    switch (this.waySelectType) {
      case "sequential":
        index = this.waySelectionCount;
        break;
      case "random":
        index = Math.floor(Math.random() * this.ways.length);
        break;
    }
    return this.ways[index];
  }
}

export class MultipleParticleWaysOption {
  ways?: ParticleWay | ParticleWay[];
  type?: WaySelectType;

  public static initOption(
    option?: MultipleParticleWaysOption,
  ): MultipleParticleWaysOption {
    option ??= {};

    option.ways ??= [];
    if (!Array.isArray(option.ways)) {
      option.ways = [option.ways];
    }
    option.type ??= "sequential";
    return option;
  }
}