68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
export class IntroScene extends Phaser.Scene {
|
|
constructor() {
|
|
super({ key: 'IntroScene' });
|
|
}
|
|
|
|
preload() {
|
|
this.load.video('menu-bg', './assets/video/menu.mp4');
|
|
this.load.audio('music-menu', './assets/music/menuBackground.mp3');
|
|
}
|
|
|
|
create() {
|
|
const W = this.scale.width;
|
|
const H = this.scale.height;
|
|
|
|
// Background video sized exactly to the canvas, looping
|
|
const video = this.add.video(W / 2, H / 2, 'menu-bg').setDepth(0);
|
|
//video.setDisplaySize(W, H);
|
|
video.play(true); // true = loop
|
|
|
|
// Dark overlay so text stays readable
|
|
this.add.rectangle(W / 2, H / 2, W, H, 0x000000, 0.45).setDepth(1);
|
|
|
|
this.add.text(W / 2, H / 2 - 100, 'OVERRUN', {
|
|
fontFamily: 'FutureImperfect',
|
|
fontSize: '72px',
|
|
fill: '#00ccff',
|
|
stroke: '#003366',
|
|
strokeThickness: 6,
|
|
}).setOrigin(0.5).setDepth(2);
|
|
|
|
this.add.text(W / 2, H / 2, 'Survive the waves. Choose your power.', {
|
|
fontSize: '20px',
|
|
fill: '#aaaaaa',
|
|
}).setOrigin(0.5).setDepth(2);
|
|
|
|
const prompt = this.add.text(W / 2, H / 2 + 80, 'Press ENTER or click to start', {
|
|
fontSize: '22px',
|
|
fill: '#ffffff',
|
|
}).setOrigin(0.5).setDepth(2);
|
|
|
|
// Blink the prompt
|
|
this.tweens.add({
|
|
targets: prompt,
|
|
alpha: 0,
|
|
duration: 600,
|
|
yoyo: true,
|
|
repeat: -1,
|
|
});
|
|
|
|
// Controls hint
|
|
this.add.text(W / 2, H - 60, 'WASD — Move Mouse — Aim Left Click — Fire', {
|
|
fontSize: '14px',
|
|
fill: '#666666',
|
|
}).setOrigin(0.5).setDepth(2);
|
|
|
|
this._menuMusic = this.sound.add('music-menu', { loop: true, volume: 1.0 });
|
|
this._menuMusic.play();
|
|
|
|
this.input.keyboard.once('keydown-ENTER', () => this._start());
|
|
this.input.once('pointerdown', () => this._start());
|
|
}
|
|
|
|
_start() {
|
|
this._menuMusic.stop();
|
|
this.scene.start('GameScene');
|
|
}
|
|
}
|