Files
playableintelligence__game-…/examples/barn-defense/src/scenes/BootScene.js
T
glitchtrend 42a10021f3 Remove MenuScene from example games
Examples contradicted the plugin's own instructions by including
MenuScene files. Games now boot directly into gameplay as intended.

Changes per example:
- Delete MenuScene.js
- BootScene transitions to GameScene (not MenuScene)
- GameOverScene restarts to GameScene (not MenuScene)
- GameScene handles audio init on first user interaction
- Tests updated to match new boot-into-gameplay flow
- Barn-defense: removed menu/level-select buttons from
  GameOverScene and LevelCompleteScene

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 07:15:51 -08:00

69 lines
2.4 KiB
JavaScript

// =============================================================================
// Barn Defense - BootScene
// Boots the game, generates pixel art textures programmatically, then
// transitions directly to gameplay.
// =============================================================================
import Phaser from 'phaser';
import { renderPixelArt, renderSpriteSheet } from '../core/PixelRenderer.js';
import { ENEMY_SPRITES } from '../sprites/enemies.js';
import { TOWER_SPRITES } from '../sprites/towers.js';
import { PROJECTILE_SPRITES } from '../sprites/projectiles.js';
import { TILE_SPRITES, DECORATION_SPRITES } from '../sprites/tiles.js';
import { gameState } from '../core/GameState.js';
export class BootScene extends Phaser.Scene {
constructor() {
super('BootScene');
}
create() {
// --- Register enemy spritesheets ---
for (const [key, data] of Object.entries(ENEMY_SPRITES)) {
renderSpriteSheet(this, data.frames, data.palette, `enemy-${key}`, data.scale);
}
// --- Register tower textures ---
for (const [key, data] of Object.entries(TOWER_SPRITES)) {
renderPixelArt(this, data.pixels, data.palette, `tower-${key}`, data.scale);
}
// --- Register projectile textures ---
for (const [key, data] of Object.entries(PROJECTILE_SPRITES)) {
renderPixelArt(this, data.pixels, data.palette, `proj-${key}`, data.scale);
}
// --- Register tile textures (scale 2.5 for 40px tiles) ---
for (const [key, data] of Object.entries(TILE_SPRITES)) {
renderPixelArt(this, data.pixels, data.palette, `tile-${key}`, data.scale);
}
// --- Register decoration textures ---
for (const [key, data] of Object.entries(DECORATION_SPRITES)) {
renderPixelArt(this, data.pixels, data.palette, `deco-${key}`, data.scale);
}
// --- Create walk animations for all enemies ---
for (const [key, data] of Object.entries(ENEMY_SPRITES)) {
const texKey = `enemy-${key}`;
if (!this.anims.exists(`${texKey}-walk`)) {
const animFrames = [];
for (let i = 0; i < data.frames.length; i++) {
animFrames.push({ key: texKey, frame: i });
}
this.anims.create({
key: `${texKey}-walk`,
frames: animFrames,
frameRate: data.animRate,
repeat: -1,
});
}
}
// Boot directly into gameplay
gameState.setLevel(0);
this.scene.start('GameScene');
this.scene.launch('UIScene');
}
}