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++;
}
}