mirror of
https://github.com/PlayableIntelligence/game-creator.git
synced 2026-09-19 07:34:10 +08:00
42a10021f3
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>
69 lines
2.4 KiB
JavaScript
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');
|
|
}
|
|
}
|