var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
+ var player;
+ var helptext, wintext;
var walls;
var gems;
var shrinklevel = 0;
const WAIT_GEM = 2000;
const WALL_THICKNESS = 32;
const MAX_GEMS = 16;
+ const WIN_CONDITION = 4;
var newWorldStartX;
var newWorldEndX;
this.isActivated = false;
}
+ enablePhysics() {
+ super.enablePhysics();
+ this.body.bounce.y = 0.75;
+ this.body.bounce.x = 0.75;
+ }
+
activate() {
this.isActivated = true;
this.loadTexture('gem_active');
}
}
- function sign(n) {
- if (n >= 0) { return 1 } else { return -1 };
- }
-
function preload () {
game.load.image('wall', 'wall.png');
walls.children.forEach(function(wall) { wall.body.immovable = true; });
gems = game.add.group();
- for (var i = 0; i <= MAX_GEMS; i++)
+ for (var i = 0; i < MAX_GEMS; i++)
gems.add(new Gem((Math.random() * (game.world.width - (WALL_THICKNESS * 4))) + (WALL_THICKNESS * 2), (Math.random() * (game.world.height - (WALL_THICKNESS * 4))) + (WALL_THICKNESS * 2)));
gems.children.forEach(function(gem) { gem.enablePhysics(); });
var isAllActive = true;
gems.children.forEach(function(gem) { if (!gem.isActivated) { isAllActive = false; }});
- if (isAllActive) {
+ if (isAllActive && (gems.length > 0)) {
world_shrink();
+ helptext.kill();
+ if (shrinklevel == WIN_CONDITION) {
+ wintext = game.add.text(0, 0, "YOU WON!\nFinally you are free...", { align: 'center', fill: '#ff00ff', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ wintext.x = (game.world.width - wintext.width) / 2;
+ wintext.y = (game.world.height - wintext.height) / 2;
+ walls.children.forEach(function(wall) { wall.body.immovable = false; });
+ var i = 0;
+ gems.children.forEach(function(gem) {
+ switch(i % 4) {
+ case 0: gem.body.gravity.y = 100; break;
+ case 1: gem.body.gravity.x = 100; break;
+ case 2: gem.body.gravity.y = -100; break;
+ case 3: gem.body.gravity.x = -100; break;
+ }
+ i++
+ });
+ }
+ else if (shrinklevel > WIN_CONDITION) {
+ // Kill everything.
+ walls.removeAll(true);
+ gems.removeAll(true);
+ wintext.kill();
+ game.world.setBounds(0, 0, 800 * 3, 600 * 3);
+ player.x = (800 * 3) / 2;
+ player.y = (600 * 3) / 2;
+
+ var endtext;
+ endtext = game.add.text(0, 0, "What are you looking for?", { align: 'center', fill: '#ff00ff', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 - endtext.width) / 2;
+ endtext.y = (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "YOU DESTROYED\nTHE WORLD!", { align: 'center', fill: '#ff0000', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = 800 + (800 - endtext.width) / 2;
+ endtext.y = (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "This is cool if you\nthink about it...", { align: 'center', fill: '#00ffff', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 * 2) + (800 - endtext.width) / 2;
+ endtext.y = (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "You just needed\n\n\n\nsome space.", { align: 'center', fill: '#ff69b4', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 - endtext.width) / 2;
+ endtext.y = 600 + (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "Bonanza Banzai", { align: 'center', fill: '#00ff00', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 * 2) + (800 - endtext.width) / 2;
+ endtext.y = 600 + (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "But nobody came.", { align: 'center', fill: '#ff0000', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 - endtext.width) / 2;
+ endtext.y = (600 * 2) + (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "What do you expect?\nPretty stars?\nOr planets?", { align: 'center', fill: '#00ffff', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = 800 + (800 - endtext.width) / 2;
+ endtext.y = (600 * 2) + (600 - endtext.height) / 2;
+
+ endtext = game.add.text(0, 0, "I think you should abandon this game.\nThere's nothing here.", { align: 'center', fill: '#ff00ff', font: 'Ubuntu Mono', fontSize: 18, fontWeight: 'bold' });
+ endtext.x = (800 * 2) + (800 - endtext.width) / 2;
+ endtext.y = (600 * 2) + (600 - endtext.height) / 2;
+ }
};
if ((game.time.now - player.lastmovetime) > WAIT_KEY) player.body.velocity.x = player.body.velocity.y = 0;
}
function gem_isInteractable(player, gem) {
- return (game.time.now - gem.lastInteraction) > WAIT_GEM;
+ return ((game.time.now - gem.lastInteraction) > WAIT_GEM) && (shrinklevel <= WIN_CONDITION);
}
function gem_overlap(player, gem) {
newWorldStartY += (newWorldEndY - newWorldStartY) / 2;
// Draw a wall around the new world bounds.
+ walls.removeAll(true);
walls.add(game.add.tileSprite(newWorldStartX - WALL_THICKNESS, newWorldStartY - WALL_THICKNESS, newWorldEndX - newWorldStartX + WALL_THICKNESS * 2, WALL_THICKNESS, 'wall'));
walls.add(game.add.tileSprite(newWorldStartX - WALL_THICKNESS, newWorldEndY, newWorldEndX - newWorldStartX + WALL_THICKNESS * 2, WALL_THICKNESS, 'wall'));
walls.add(game.add.tileSprite(newWorldStartX - WALL_THICKNESS, newWorldStartY - WALL_THICKNESS, WALL_THICKNESS, newWorldEndY - newWorldStartY + WALL_THICKNESS * 2, 'wall'));
}
gems.children.forEach(relocateGem);
+ shrinklevel++;
+
}