- var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
+ var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: function() { this.state.add('GamePlay', GamePlay, true); } });
+ var cursors;
var player;
var walls;
var determinations; // I know it's grammatically incorrect. :P
const WAIT_MONSTERSHOOT = 500;
const WAIT_MONSTERSPAWN = 20000;
const WAIT_DETERMINATION = 4000;
+ const WAIT_DEATH = 4000;
const WALL_THICKNESS = 16;
const WALL_BORDER = 8;
const WALL_BORDERBOTTOM = 48;
}
}, false);
+ function sign(n) {
+ if (n >= 0) { return 1 } else { return -1 };
+ }
class Player extends Phaser.Text {
constructor(x, y) {
this.lasttime_shoot = 0;
this.lasttime_mode = 0;
this.lasttime_damage = 0;
+ this.lasttime_death = 0;
this.speed = SPEED_PLAYER;
this.switchmode(MODE_DETERMINATION);
this.weapon = new JusticeBlaster(game, this);
this.weapon.bulletSpeed = SPEED_PPROJECTILE;
this.healthBar = new HealthBar(60, game.world.height - (WALL_BORDERBOTTOM / 2));
+ this.soulbreakEmitter = this.game.add.emitter(0, 0, 8);
+ this.soulbreakEmitter.gravity = 1000;
+ this.soulbreakEmitter.setXSpeed(-300, 300);
+ this.soulbreakEmitter.makeParticles('soulbreak');
}
enablePhysics() {
}
}
+ kill() {
+ this.health = 0;
+ this.healthBar.update(this.love, this.maxHealth, this.health);
+ super.kill();
+ this.soulbreakEmitter.x = this.x;
+ this.soulbreakEmitter.y = this.y;
+ this.soulbreakEmitter.explode(2000, 8);
+ this.lasttime_death = this.game.time.now;
+ }
+
loveUp() {
this.love++
this.maxHealth += this.love;
this.weapon = new JusticeBlaster(game, this);
this.weapon.bulletSpeed = SPEED_MPROJECTILE;
this.weapon.trackSprite(this);
+ this.shaketween = game.add.tween(this).to({ x: this.x + (sign(Math.random() - 0.5)) * 5 }, 10, Phaser.Easing.Sinusoidal.InOut, false, 0, 8, true);
}
enablePhysics() {
game.physics.arcade.enable(this);
}
+ damage(amount) {
+ super.damage(amount);
+ if (this.alive) { this.shaketween.start(); }
+ }
+
kill() {
super.kill();
player.loveUp();
}
}
- function preload () {
- game.load.image('wall', 'wall.png');
- game.load.image('player', 'player.png');
- game.load.image('monster', 'monster.png');
- game.load.image('determination', 'determination.png');
- game.load.image('projectile', 'projectile.png');
+ class GamePlay extends Phaser.State {
- }
+ constructor() {
- function create () {
+ super();
+ game.state.add('GameOver', GameOver, false);
- game.world.setBounds(0, 0, 800, 600);
- game.stage.backgroundColor = '#000000';
- game.physics.startSystem(Phaser.Physics.ARCADE);
+ }
- walls = game.add.group();
- walls.classType = Phaser.TileSprite;
- walls.enableBody = true;
+ preload() {
- walls.add(game.add.tileSprite(WALL_BORDER, WALL_BORDER, game.world.width - (WALL_BORDER * 2), WALL_THICKNESS, 'wall'));
- walls.add(game.add.tileSprite(WALL_BORDER, game.world.height - WALL_THICKNESS - WALL_BORDERBOTTOM, game.world.width - (WALL_BORDER * 2), WALL_THICKNESS, 'wall'));
- walls.add(game.add.tileSprite(WALL_BORDER, WALL_BORDER, WALL_THICKNESS, game.world.height - WALL_BORDER - WALL_BORDERBOTTOM, 'wall'));
- walls.add(game.add.tileSprite(game.world.width - WALL_THICKNESS - WALL_BORDER, WALL_BORDER, WALL_THICKNESS, game.world.height - WALL_BORDER - WALL_BORDERBOTTOM, 'wall'));
- walls.children.forEach(function(wall) { wall.body.immovable = true; });
+ game.load.image('wall', 'wall.png');
+ game.load.image('player', 'player.png');
+ game.load.image('monster', 'monster.png');
+ game.load.image('determination', 'determination.png');
+ game.load.image('projectile', 'projectile.png');
+ game.load.image('soulbreak', 'soulbreak.png');
- determinations = game.add.group();
- nexttime_determination = Math.random() * WAIT_DETERMINATION;
+ }
- monsters = game.add.group();
- nexttime_monsterspawn = WAIT_MONSTERSPAWN / 4;
+ create() {
- player = new Player(game.world.width / 2, game.world.height / 2);
- player.enablePhysics();
- game.add.existing(player);
- game.camera.follow(player);
- cursors = game.input.keyboard.createCursorKeys();
+ game.world.setBounds(0, 0, 800, 600);
+ game.stage.backgroundColor = '#000000';
+ game.physics.startSystem(Phaser.Physics.ARCADE);
- }
+ walls = game.add.group();
+ walls.classType = Phaser.TileSprite;
+ walls.enableBody = true;
+
+ walls.add(game.add.tileSprite(WALL_BORDER, WALL_BORDER, game.world.width - (WALL_BORDER * 2), WALL_THICKNESS, 'wall'));
+ walls.add(game.add.tileSprite(WALL_BORDER, game.world.height - WALL_THICKNESS - WALL_BORDERBOTTOM, game.world.width - (WALL_BORDER * 2), WALL_THICKNESS, 'wall'));
+ walls.add(game.add.tileSprite(WALL_BORDER, WALL_BORDER, WALL_THICKNESS, game.world.height - WALL_BORDER - WALL_BORDERBOTTOM, 'wall'));
+ walls.add(game.add.tileSprite(game.world.width - WALL_THICKNESS - WALL_BORDER, WALL_BORDER, WALL_THICKNESS, game.world.height - WALL_BORDER - WALL_BORDERBOTTOM, 'wall'));
+ walls.children.forEach(function(wall) { wall.body.immovable = true; });
+
+ determinations = game.add.group();
+ nexttime_determination = Math.random() * WAIT_DETERMINATION;
+
+ monsters = game.add.group();
+ nexttime_monsterspawn = WAIT_MONSTERSPAWN / 4;
+
+ player = new Player(game.world.width / 2, game.world.height / 2);
+ player.enablePhysics();
+ game.add.existing(player);
+ game.camera.follow(player);
+ cursors = game.input.keyboard.createCursorKeys();
+
+ }
+
+ update() {
+
+ game.physics.arcade.collide(player, walls);
+ game.physics.arcade.overlap(player, determinations, function(p,d) { p.overlap_determination(d); });
+ game.physics.arcade.overlap(player, monsters, function(p,m) { m.overlap_player(p); });
+
+ if (game.time.now > nexttime_determination)
+ {
+ var determination = new Determination((Math.random() * (game.world.width - ((WALL_THICKNESS + WALL_BORDER) * 4))) + ((WALL_THICKNESS + WALL_BORDER) * 2), (Math.random() * (game.world.height - ((WALL_THICKNESS + WALL_BORDER) * 4) - WALL_BORDERBOTTOM)) + ((WALL_THICKNESS + WALL_BORDER) * 2));
+ determination.enablePhysics();
+ determinations.add(determination);
+ nexttime_determination = game.time.now + (WAIT_DETERMINATION / 2) + (Math.random() * WAIT_DETERMINATION);
+ }
- function update () {
+ if (game.time.now > nexttime_monsterspawn)
+ {
+ var monster = new Monster(Math.random() * game.world.width, Math.random() * game.world.height);
+ monster.enablePhysics();
+ monsters.add(monster);
+ var waittime = WAIT_MONSTERSPAWN - ((Math.random() * 2000) * player.love);
+ nexttime_monsterspawn = game.time.now + waittime;
+ console.log('Next monster in ' + waittime);
+ }
+
+ if ((game.time.now - player.lastmovetime) > WAIT_KEY) player.body.velocity.x = player.body.velocity.y = 0;
- game.physics.arcade.collide(player, walls);
- game.physics.arcade.overlap(player, determinations, function(p,d) { p.overlap_determination(d); });
- game.physics.arcade.overlap(player, monsters, function(p,m) { m.overlap_player(p); });
+ if ((!player.alive) && (game.time.now > (player.lasttime_death + WAIT_DEATH)))
+ {
+ game.state.start('GameOver');
+ }
- if (game.time.now > nexttime_determination)
- {
- var determination = new Determination((Math.random() * (game.world.width - ((WALL_THICKNESS + WALL_BORDER) * 4))) + ((WALL_THICKNESS + WALL_BORDER) * 2), (Math.random() * (game.world.height - ((WALL_THICKNESS + WALL_BORDER) * 4) - WALL_BORDERBOTTOM)) + ((WALL_THICKNESS + WALL_BORDER) * 2));
- determination.enablePhysics();
- determinations.add(determination);
- nexttime_determination = game.time.now + (WAIT_DETERMINATION / 2) + (Math.random() * WAIT_DETERMINATION);
}
+ }
+
+ class GameOver extends Phaser.State {
+
+ create() {
+
+ this.game.add.text(this.game.world.width / 2, 0, "GAME\nOVER", { align: 'center', fill: 'white', font: 'Ubuntu Mono', fontSize: 160, fontWeight: 'bold' }).anchor.setTo(0.5, 0);
+ this.game.add.text(this.game.world.width / 2, this.game.world.height * 0.75, "Stay determined...", { align: 'center', fill: 'white', font: 'Ubuntu Mono', fontSize: 24, fontWeight: 'bold' }).anchor.setTo(0.5, 0);
- if (game.time.now > nexttime_monsterspawn)
- {
- var monster = new Monster(Math.random() * game.world.width, Math.random() * game.world.height);
- monster.enablePhysics();
- monsters.add(monster);
- var waittime = WAIT_MONSTERSPAWN - ((Math.random() * 2000) * player.love);
- nexttime_monsterspawn = game.time.now + waittime;
- console.log('Next monster in ' + waittime);
}
- if ((game.time.now - player.lastmovetime) > WAIT_KEY) player.body.velocity.x = player.body.velocity.y = 0;
+ update() {
+
+ if (this.game.input.keyboard.isDown(Phaser.Keyboard.SPACEBAR))
+ {
+ this.game.state.start('GamePlay');
+ }
+
+ }
}