|
@@ -1,45 +1,49 @@
|
|
|
-var game = Atomic.game;
|
|
|
|
|
-var scene = game.scene;
|
|
|
|
|
|
|
+var UI = require("UI/ui");
|
|
|
|
|
+var options = require("UI/options")
|
|
|
|
|
|
|
|
-// expose ourselves as a global
|
|
|
|
|
-SpaceGame = self;
|
|
|
|
|
|
|
+exports.component = function(self) {
|
|
|
|
|
|
|
|
-self.halfWidth = game.graphics.width * Atomic.PIXEL_SIZE * 0.5;
|
|
|
|
|
-self.halfHeight = game.graphics.height * Atomic.PIXEL_SIZE * 0.5;
|
|
|
|
|
|
|
+ var game = Atomic.game;
|
|
|
|
|
|
|
|
-var enemyBaseDir = false;
|
|
|
|
|
-var enemyBaseNode = scene.createChild("EnemyBaseNode");
|
|
|
|
|
-var enemyBasePosX = 0;
|
|
|
|
|
|
|
+ // expose ourselves as a global, this is invalid in "use strict"; which perhaps we should be using
|
|
|
|
|
+ // to enforce better form
|
|
|
|
|
+ SpaceGame = self;
|
|
|
|
|
|
|
|
-var score = 0;
|
|
|
|
|
|
|
+ createScene();
|
|
|
|
|
|
|
|
-self.enemies = [];
|
|
|
|
|
-self.gameOver = false;
|
|
|
|
|
|
|
+ self.halfWidth = game.graphics.width * Atomic.PIXEL_SIZE * 0.5;
|
|
|
|
|
+ self.halfHeight = game.graphics.height * Atomic.PIXEL_SIZE * 0.5;
|
|
|
|
|
|
|
|
-self.random = function random(min, max) {
|
|
|
|
|
|
|
+ var enemyBaseDir = false;
|
|
|
|
|
+ var enemyBaseNode = self.myscene.createChild("EnemyBaseNode");
|
|
|
|
|
+ var enemyBasePosX = 0;
|
|
|
|
|
+
|
|
|
|
|
+ var score = 0;
|
|
|
|
|
+
|
|
|
|
|
+ self.enemies = [];
|
|
|
|
|
+ self.gameOver = false;
|
|
|
|
|
+
|
|
|
|
|
+ self.random = function random(min, max) {
|
|
|
return Math.random() * (max - min) + min;
|
|
return Math.random() * (max - min) + min;
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-self.spawnBullet = function(pos, isPlayer) {
|
|
|
|
|
|
|
+ self.spawnBullet = function(pos, isPlayer) {
|
|
|
|
|
|
|
|
- var bulletNode = scene.createChild("Bullet");
|
|
|
|
|
- var bullet = bulletNode.createJSComponent("Bullet");
|
|
|
|
|
|
|
+ var bulletNode = self.myscene.createChild("Bullet");
|
|
|
|
|
+ var bullet = bulletNode.createJSComponent("Components/Bullet.js");
|
|
|
bullet.init(isPlayer, pos);
|
|
bullet.init(isPlayer, pos);
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-self.removeEnemy = function(enemy) {
|
|
|
|
|
|
|
+ self.removeEnemy = function(enemy) {
|
|
|
|
|
|
|
|
score += 10;
|
|
score += 10;
|
|
|
-
|
|
|
|
|
self.hud.updateScore(score);
|
|
self.hud.updateScore(score);
|
|
|
-
|
|
|
|
|
self.enemies.splice(self.enemies.indexOf(enemy), 1);
|
|
self.enemies.splice(self.enemies.indexOf(enemy), 1);
|
|
|
- Atomic.destroy(enemy.node);
|
|
|
|
|
- return;
|
|
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ Atomic.destroy(enemy.node);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-self.capitalShipDestroyed = function() {
|
|
|
|
|
|
|
+ self.capitalShipDestroyed = function() {
|
|
|
|
|
|
|
|
score += 1000;
|
|
score += 1000;
|
|
|
|
|
|
|
@@ -48,111 +52,158 @@ self.capitalShipDestroyed = function() {
|
|
|
Atomic.destroy(self.capitalShipNode);
|
|
Atomic.destroy(self.capitalShipNode);
|
|
|
self.capitalShipNode = self.capitalShip = null;
|
|
self.capitalShipNode = self.capitalShip = null;
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-function spawnSpace() {
|
|
|
|
|
|
|
|
|
|
- var spaceNode = scene.createChild("Space");
|
|
|
|
|
- spaceNode.createJSComponent("Space");
|
|
|
|
|
|
|
+ function spawnEnemies() {
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-function spawnEnemies() {
|
|
|
|
|
-
|
|
|
|
|
- self.capitalShipNode = scene.createChild("CapitalShip");
|
|
|
|
|
- self.capitalShip = self.capitalShipNode.createJSComponent("CapitalShip");
|
|
|
|
|
|
|
+ self.capitalShipNode = self.myscene.createChild("CapitalShip");
|
|
|
|
|
+ self.capitalShip = self.capitalShipNode.createJSComponent("Components/CapitalShip.js");
|
|
|
|
|
|
|
|
var pos = [0, 0];
|
|
var pos = [0, 0];
|
|
|
|
|
|
|
|
pos[1] = self.halfHeight - 2.5;
|
|
pos[1] = self.halfHeight - 2.5;
|
|
|
|
|
|
|
|
- for (var y = 0; y < 3; y++) {
|
|
|
|
|
|
|
+ for (var y = 0; y < 2; y++) {
|
|
|
|
|
+
|
|
|
|
|
+ pos[0] = -4.5;
|
|
|
|
|
+
|
|
|
|
|
+ for (var x = 0; x < 12; x++) {
|
|
|
|
|
|
|
|
- pos[0] = -4.5;
|
|
|
|
|
|
|
+ var enemyNode = enemyBaseNode.createChild("Enemy");
|
|
|
|
|
|
|
|
- for (var x = 0; x < 12; x++) {
|
|
|
|
|
|
|
+ var enemy = enemyNode.createJSComponent("Components/Enemy.js", {
|
|
|
|
|
+ spriteName: Math.random() < .85 ? "spaceship_louse" : "spaceship_scarab",
|
|
|
|
|
+ spawnPosition: [pos[0], pos[1]]
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
- var enemyNode = enemyBaseNode.createChild("Enemy");
|
|
|
|
|
- enemy = enemyNode.createJSComponent("Enemy");
|
|
|
|
|
- enemy.spriteName = Math.random() < .85 ? "spaceship_louse" : "spaceship_scarab";
|
|
|
|
|
- enemy.spawnPosition = [pos[0], pos[1]];
|
|
|
|
|
- self.enemies.push(enemy);
|
|
|
|
|
|
|
+ self.enemies.push(enemy);
|
|
|
|
|
|
|
|
- pos[0] += 0.75;
|
|
|
|
|
|
|
+ pos[0] += 0.75;
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- pos[1] -= 0.75;
|
|
|
|
|
|
|
+ pos[1] -= 0.75;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-function updateEnemies(timeStep) {
|
|
|
|
|
|
|
+ function updateEnemies(timeStep) {
|
|
|
|
|
|
|
|
if (!enemyBaseDir)
|
|
if (!enemyBaseDir)
|
|
|
- enemyBasePosX += timeStep;
|
|
|
|
|
|
|
+ enemyBasePosX += timeStep;
|
|
|
else
|
|
else
|
|
|
- enemyBasePosX -= timeStep;
|
|
|
|
|
|
|
+ enemyBasePosX -= timeStep;
|
|
|
|
|
|
|
|
var xvalue = 2;
|
|
var xvalue = 2;
|
|
|
|
|
|
|
|
if (enemyBasePosX > xvalue) {
|
|
if (enemyBasePosX > xvalue) {
|
|
|
- enemyBasePosX = xvalue;
|
|
|
|
|
- enemyBaseDir = !enemyBaseDir;
|
|
|
|
|
|
|
+ enemyBasePosX = xvalue;
|
|
|
|
|
+ enemyBaseDir = !enemyBaseDir;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (enemyBasePosX < -xvalue) {
|
|
if (enemyBasePosX < -xvalue) {
|
|
|
- enemyBasePosX = -xvalue;
|
|
|
|
|
- enemyBaseDir = !enemyBaseDir;
|
|
|
|
|
|
|
+ enemyBasePosX = -xvalue;
|
|
|
|
|
+ enemyBaseDir = !enemyBaseDir;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
enemyBaseNode.position2D = [enemyBasePosX, 0];
|
|
enemyBaseNode.position2D = [enemyBasePosX, 0];
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ self.cleanup = function() {
|
|
|
|
|
+
|
|
|
|
|
+ game.renderer.setViewport(1, null);
|
|
|
|
|
+
|
|
|
|
|
+ self.hud.cleanup();
|
|
|
|
|
+ Atomic.destroy(self.myscene);
|
|
|
|
|
|
|
|
-self.win = function() {
|
|
|
|
|
|
|
+ // our node is in the main scene
|
|
|
|
|
+ Atomic.destroy(self.node);
|
|
|
|
|
+
|
|
|
|
|
+ SpaceGame = null;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ self.win = function() {
|
|
|
|
|
|
|
|
self.hud.updateGameText("YOU WIN!!!!");
|
|
self.hud.updateGameText("YOU WIN!!!!");
|
|
|
self.gameOver = true;
|
|
self.gameOver = true;
|
|
|
|
|
+ UI.showGameOver();
|
|
|
|
|
+ //self.cleanup();
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-self.lose = function() {
|
|
|
|
|
|
|
+ self.lose = function() {
|
|
|
|
|
|
|
|
self.hud.updateGameText("YOU LOSE!!!!");
|
|
self.hud.updateGameText("YOU LOSE!!!!");
|
|
|
self.gameOver = true;
|
|
self.gameOver = true;
|
|
|
|
|
+ UI.showGameOver();
|
|
|
|
|
+ //self.cleanup();
|
|
|
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
-function spawnPlayer() {
|
|
|
|
|
|
|
+ function spawnPlayer() {
|
|
|
|
|
|
|
|
- self.playerNode = scene.createChild("Player");
|
|
|
|
|
- self.player = self.playerNode.createJSComponent("Player");
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ self.playerNode = self.myscene.createChild("Player");
|
|
|
|
|
+ self.player = self.playerNode.createJSComponent("Components/Player.js");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function createScene() {
|
|
|
|
|
+
|
|
|
|
|
+ var scene = new Atomic.Scene();
|
|
|
|
|
+ scene.createComponent("Octree");
|
|
|
|
|
+
|
|
|
|
|
+ var cameraNode = scene.createChild("Camera");
|
|
|
|
|
+ cameraNode.position = [0.0, 0.0, -10.0];
|
|
|
|
|
+
|
|
|
|
|
+ var camera = cameraNode.createComponent("Camera");
|
|
|
|
|
+ camera.orthographic = true;
|
|
|
|
|
+ camera.orthoSize = game.graphics.height * Atomic.PIXEL_SIZE;
|
|
|
|
|
|
|
|
|
|
+ var viewport = new Atomic.Viewport(scene, camera);
|
|
|
|
|
|
|
|
-function start() {
|
|
|
|
|
|
|
+ // assign a render path to our viewport which doesn't clear the screen
|
|
|
|
|
+ // so can be used to composite
|
|
|
|
|
+ var renderPathXML = game.cache.getResource("XMLFile", "Data/RenderPath.xml");
|
|
|
|
|
+ viewport.renderPath = renderPathXML;
|
|
|
|
|
|
|
|
- self.hud = scene.createJSComponent("HUD");
|
|
|
|
|
|
|
+ // Example of appending a post process filter
|
|
|
|
|
+ if (options.getOptions().blackAndWhite)
|
|
|
|
|
+ viewport.renderPath.append(game.cache.getResource("XMLFile", "PostProcess/GreyScale.xml"));
|
|
|
|
|
+ if (options.getOptions().blur)
|
|
|
|
|
+ viewport.renderPath.append(game.cache.getResource("XMLFile", "PostProcess/Blur.xml"));
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ game.renderer.setViewport(1, viewport);
|
|
|
|
|
+
|
|
|
|
|
+ // this is component getScene property (there is no setter on it)
|
|
|
|
|
+ // this should be an error, think I saw somewhere you can raise errors on
|
|
|
|
|
+ // get/set of a prop when the get/set missing
|
|
|
|
|
+ self.myscene = scene;
|
|
|
|
|
+ self.cameraNode = cameraNode;
|
|
|
|
|
+ self.camera = camera;
|
|
|
|
|
+ self.viewport = viewport;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ self.start = function() {
|
|
|
|
|
+
|
|
|
|
|
+ var hudnode = self.myscene.createChild();
|
|
|
|
|
+ self.hud = hudnode.createJSComponent("Components/HUD.js");
|
|
|
|
|
|
|
|
- spawnSpace();
|
|
|
|
|
spawnPlayer();
|
|
spawnPlayer();
|
|
|
spawnEnemies();
|
|
spawnEnemies();
|
|
|
|
|
|
|
|
- var musicFile = game.cache.getResource("Sound", "Music/battle.ogg");
|
|
|
|
|
- musicFile.looped = true;
|
|
|
|
|
- var musicNode = scene.createChild("MusicNode");
|
|
|
|
|
- var musicSource = musicNode.createComponent("SoundSource");
|
|
|
|
|
- musicSource.gain = .5;
|
|
|
|
|
- musicSource.soundType = Atomic.SOUND_MUSIC;
|
|
|
|
|
- musicSource.play(musicFile);
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
|
-function update(timeStep) {
|
|
|
|
|
|
|
+ self.update = function(timeStep) {
|
|
|
|
|
|
|
|
updateEnemies(timeStep);
|
|
updateEnemies(timeStep);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+}
|