evil-invaders.json

{
	"stage0": {
		"enemylist":[
			["00", "00", "00", "00", "00", "00", "00", "00"],
			["00", "00", "00", "00", "00", "00", "00", "00"],
			["R0", "S0", "R0", "A0", "A0", "R0", "S0", "R0"],
			["B1", "00", "00", "00", "00", "00", "00", "00"],
			["B0", "00", "00", "00", "00", "00", "00", "B3"],
			["B0", "00", "00", "00", "00", "00", "00", "B0"],
			["A0", "A0", "A0", "00", "00", "A0", "A0", "A0"]
		]
	},
	"enemyData": {
		"enemyA": {
			"name"	: "redEyeOcto",
			"score"			: 100,
			"cagage"			: 4,
			"hp"				: 1,
			"speed"			: 0.8,
			"interval"		: 300,
			"texture"		: ["redEyeOcto0.png", "redEyeOcto1.png", "redEyeOcto2.png", "redEyeOcto3.png"],
			"shadowReverse": true,
			"shadowOffsetY": 10,
			"projectileData"		: {
				"score"			: 100,
				"cagage"			: 2,
				"hp"				: 1,
				"speed"			: 1,
				"damage"			: 1,
        "texture"		: ["redEyeOctoProjectile0.png", "redEyeOctoProjectile1.png"],
        "sound"    : ["bullet_ultra1", "bullet_ultra2", "bullet_ultra3", "bullet_ultra4"]
			}
		}
	}
}
export class GameScene extends Phaser.Scene {
	waveInterval = 80;
  frameCnt = 0;
  waveCount = 0;
  
  create() {
	  this.enemyGroup = this.physics.add.group();
	  this.stageEnemyPositionList = PROPERTIES.resource.recipe.data[
      "stage" + PROPERTIES.stageId
    ].enemylist
      .slice()
      .reverse();
  }
  
  update() {
    this.frameCnt++;
    
    // launch enemyWave() every 80 frames
    if (this.frameCnt % this.waveInterval === 0)  this.enemyWave();
  }
  
  enemyWave() {
    if (this.waveCount >= this.stageEnemyPositionList.length) {
      console.log("All waves completed");
      return;
    }

    const wave = this.stageEnemyPositionList[this.waveCount];
    wave.forEach((enemyCode, positionIndex) => {
      if (enemyCode !== "00") {
        const enemyType = String(enemyCode).substr(0, 1);
        const itemType = String(enemyCode).substr(1, 2);

        const enemyData = PROPERTIES.resource.recipe.data.enemyData[
          `enemy${enemyType}`
        ];
        if (!enemyData) {
          console.warn(`Enemy type ${enemyType} not found.`);
          return;
        }

        // const enemy = new Enemy({
        //   name: enemyData.name,
        //   interval: enemyData.interval,
        //   score: enemyData.score,
        //   hp: enemyData.hp,
        //   speed: enemyData.speed,
        //   cagage: enemyData.cagage,
        //   texture: enemyData.texture,
        //   explosion: enemyData.explosionTextures,
        //   projectileData: enemyData.projectileData,
        //   physics: enemyData.physics,
        //   autoPlay: enemyData.autoPlay,
        //   itemName: itemType,
        //   itemTexture: enemyData.itemTexture || null
        // });

        // enemy.x = enemy.width / 2 + 32 * positionIndex;
        // enemy.y = -32;

        // this.enemyGroup.add(enemy);
        // enemy.on(Enemy.CUSTOM_EVENT_PROJECTILE_ADD, () => {
        //   console.log(`Projectile added by ${enemy.name}`);
        // });
        // enemy.on(Enemy.CUSTOM_EVENT_DEAD_COMPLETE, () => {
        //   console.log(`${enemy.name} is completely destroyed.`);
        // });
      }
    });

    this.waveCount++;
  }
}