1
0
Fork 0
spacetac/src/ui/menu/MainMenu.ts

124 lines
4.7 KiB
TypeScript
Raw Normal View History

/// <reference path="../BaseView.ts"/>
2015-04-07 00:00:00 +00:00
2017-09-24 22:23:22 +00:00
module TK.SpaceTac.UI {
/**
* Main menu (first interactive screen)
*/
2015-04-07 00:00:00 +00:00
export class MainMenu extends BaseView {
static returned = false
2018-01-31 18:19:50 +00:00
layer_stars!: Phaser.Group
layer_presents!: Phaser.Group
layer_title!: Phaser.Group
button_new_game!: Phaser.Button
button_quick_battle!: Phaser.Button
button_load_game!: Phaser.Button
dialog_load_game!: LoadDialog
create() {
2017-03-15 21:40:19 +00:00
super.create();
2017-12-04 18:30:18 +00:00
let builder = new UIBuilder(this);
2017-10-11 20:58:08 +00:00
this.layer_stars = this.getLayer("stars");
2017-12-04 18:30:18 +00:00
this.layer_presents = this.getLayer("presents");
2017-10-11 20:58:08 +00:00
this.layer_title = this.getLayer("title");
2017-01-22 17:41:32 +00:00
// Stars
for (let i = 0; i < 300; i++) {
let fade = Math.random() * 0.5 + 0.5;
let x = Math.random() * 0.998 + 0.001;
2017-06-04 20:26:11 +00:00
let star = this.add.image(1920 * x, Math.random() * 1080, "common-particles", 32, this.layer_stars);
2017-01-22 17:41:32 +00:00
star.anchor.set(0.5, 0.5);
2017-06-04 20:26:11 +00:00
star.angle = 225;
2017-01-22 17:41:32 +00:00
star.alpha = 0.7 * fade;
2017-06-04 20:26:11 +00:00
star.scale.set(0.8 * fade, 0.8 * fade);
2017-01-22 17:41:32 +00:00
this.tweens.create(star).to({ x: -30 }, 30000 * x / fade).to({ x: 1950 }, 0.00001).to({ x: 1920 * x }, 30000 * (1 - x) / fade).loop().start();
}
2017-12-04 18:30:18 +00:00
// Presents...
builder.in(this.layer_presents, builder => {
builder.styled({ center: true }, builder => {
builder.text("Michael Lemaire", this.getMidWidth(), this.getHeight() * 0.4, { size: 32 });
builder.text("presents", this.getMidWidth(), this.getHeight() * 0.6, { size: 24 });
});
});
// Menu buttons
2018-03-08 19:16:05 +00:00
this.button_new_game = this.addButton(320, 730, "New Game", "Start a new campaign in a generated universe", () => this.onNewGame());
this.button_load_game = this.addButton(958, 730, "Load / Join", "Load a saved game or join a friend", () => this.onLoadGame());
this.button_quick_battle = this.addButton(1604, 730, "Quick Battle", "Play a single generated battle", () => this.onQuickBattle());
2017-05-15 23:15:07 +00:00
// Fullscreen button
2018-03-08 19:16:05 +00:00
let button = builder.in(this.layer_title).button("options-option-fullscreen", this.getWidth(), 0, () => this.options.toggleBoolean("fullscreen"), "Toggle full-screen");
2017-06-08 17:32:57 +00:00
button.anchor.set(1, 0);
2017-01-22 16:17:59 +00:00
// Title
2018-03-08 19:16:05 +00:00
let title = builder.in(this.layer_title).image("menu-title", 274, 187);
2017-01-23 18:12:36 +00:00
// Dialogs
this.dialog_load_game = new LoadDialog(this);
2018-03-08 19:16:05 +00:00
this.dialog_load_game.setPosition(286, 120);
this.dialog_load_game.moveToLayer(this.layer_title);
this.dialog_load_game.setVisible(false);
2017-12-04 18:30:18 +00:00
// Animations
this.layer_stars.visible = false;
this.layer_presents.visible = false;
2017-06-07 17:08:53 +00:00
this.layer_title.visible = false;
2017-12-04 18:30:18 +00:00
this.animations.show(this.layer_presents, 500);
this.animations.show(this.layer_stars, 5000);
2017-06-07 17:08:53 +00:00
let fading = this.timer.schedule(5000, () => {
this.animations.show(this.layer_title, 1000);
2017-12-04 18:30:18 +00:00
this.animations.hide(this.layer_presents, 300);
});
let pass = () => {
2017-06-07 17:08:53 +00:00
this.timer.cancel(fading);
this.animations.show(this.layer_title, 0);
2017-12-04 18:30:18 +00:00
this.animations.hide(this.layer_presents, 0);
};
if (MainMenu.returned) {
pass();
} else {
this.input.onTap.addOnce(pass);
MainMenu.returned = true;
}
2017-06-01 22:37:43 +00:00
this.gameui.audio.startMusic("supernatural");
}
2017-03-15 21:40:19 +00:00
addButton(x: number, y: number, caption: string, tooltip: string, callback: Function): Phaser.Button {
2018-03-08 19:16:05 +00:00
let builder = new UIBuilder(this).in(this.layer_title);
2018-03-08 19:16:05 +00:00
let result = builder.button("menu-button", x, y, callback, tooltip);
result.anchor.set(0.5);
2017-07-19 23:22:18 +00:00
2018-03-08 19:16:05 +00:00
builder.in(result).text(caption, 0, 0, { bold: true, size: 40, color: "#529aee" });
2018-03-08 19:16:05 +00:00
return result;
}
// Called when "New Game" is clicked
onNewGame(): void {
2017-02-09 00:00:35 +00:00
var gameui = <MainUI>this.game;
gameui.session.startNewGame(false);
this.game.state.start("router");
}
// Called when "Quick Battle" is clicked
onQuickBattle(): void {
2017-02-09 00:00:35 +00:00
var gameui = <MainUI>this.game;
gameui.session.startQuickBattle(true);
this.game.state.start("router");
}
// Called when "Load Game" is clicked
onLoadGame(): void {
this.dialog_load_game.setVisible(true);
}
}
}