SpaceGame.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. var UI = require("UI/ui");
  2. var game = Atomic.game;
  3. // expose ourselves as a global
  4. SpaceGame = self;
  5. createScene();
  6. self.halfWidth = game.graphics.width * Atomic.PIXEL_SIZE * 0.5;
  7. self.halfHeight = game.graphics.height * Atomic.PIXEL_SIZE * 0.5;
  8. var enemyBaseDir = false;
  9. var enemyBaseNode = self.myscene.createChild("EnemyBaseNode");
  10. var enemyBasePosX = 0;
  11. var score = 0;
  12. self.enemies = [];
  13. self.gameOver = false;
  14. self.random = function random(min, max) {
  15. return Math.random() * (max - min) + min;
  16. }
  17. self.spawnBullet = function(pos, isPlayer) {
  18. var bulletNode = self.myscene.createChild("Bullet");
  19. var bullet = bulletNode.createJSComponent("Bullet");
  20. bullet.init(isPlayer, pos);
  21. }
  22. self.removeEnemy = function(enemy) {
  23. score += 10;
  24. self.hud.updateScore(score);
  25. self.enemies.splice(self.enemies.indexOf(enemy), 1);
  26. Atomic.destroy(enemy.node);
  27. }
  28. self.capitalShipDestroyed = function() {
  29. score += 1000;
  30. self.hud.updateScore(score);
  31. Atomic.destroy(self.capitalShipNode);
  32. self.capitalShipNode = self.capitalShip = null;
  33. }
  34. function spawnEnemies() {
  35. self.capitalShipNode = self.myscene.createChild("CapitalShip");
  36. self.capitalShip = self.capitalShipNode.createJSComponent("CapitalShip");
  37. var pos = [0, 0];
  38. pos[1] = self.halfHeight - 2.5;
  39. for (var y = 0; y < 3; y++) {
  40. pos[0] = -4.5;
  41. for (var x = 0; x < 12; x++) {
  42. var enemyNode = enemyBaseNode.createChild("Enemy");
  43. // nasty, a lack of var was holding a global reference, hm
  44. var enemy = enemyNode.createJSComponent("Enemy");
  45. enemy.spriteName = Math.random() < .85 ? "spaceship_louse" : "spaceship_scarab";
  46. enemy.spawnPosition = [pos[0], pos[1]];
  47. self.enemies.push(enemy);
  48. pos[0] += 0.75;
  49. }
  50. pos[1] -= 0.75;
  51. }
  52. }
  53. function updateEnemies(timeStep) {
  54. if (!enemyBaseDir)
  55. enemyBasePosX += timeStep;
  56. else
  57. enemyBasePosX -= timeStep;
  58. var xvalue = 2;
  59. if (enemyBasePosX > xvalue) {
  60. enemyBasePosX = xvalue;
  61. enemyBaseDir = !enemyBaseDir;
  62. }
  63. if (enemyBasePosX < -xvalue) {
  64. enemyBasePosX = -xvalue;
  65. enemyBaseDir = !enemyBaseDir;
  66. }
  67. enemyBaseNode.position2D = [enemyBasePosX, 0];
  68. }
  69. self.cleanup = function() {
  70. game.renderer.setViewport(1, null);
  71. Atomic.destroy(self.playerNode);
  72. self.player = self.playerNode = null;
  73. Atomic.destroy(self.hud.node);
  74. self.hud = null;
  75. for (var i = 0; i < self.enemies.length; i++) {
  76. Atomic.destroy(self.enemies[i].node);
  77. }
  78. self.enemies = [];
  79. Atomic.destroy(self.node);
  80. SpaceGame = null;
  81. }
  82. self.win = function() {
  83. self.hud.updateGameText("YOU WIN!!!!");
  84. self.gameOver = true;
  85. UI.showMainMenu();
  86. self.cleanup();
  87. }
  88. self.lose = function() {
  89. self.hud.updateGameText("YOU LOSE!!!!");
  90. self.gameOver = true;
  91. UI.showMainMenu();
  92. self.cleanup();
  93. }
  94. function spawnPlayer() {
  95. self.playerNode = self.myscene.createChild("Player");
  96. self.player = self.playerNode.createJSComponent("Player");
  97. }
  98. function createScene() {
  99. var scene = new Atomic.Scene();
  100. scene.createComponent("Octree");
  101. var cameraNode = scene.createChild("Camera");
  102. cameraNode.position = [0.0, 0.0, -10.0];
  103. var camera = cameraNode.createComponent("Camera");
  104. camera.orthographic = true;
  105. camera.orthoSize = game.graphics.height * Atomic.PIXEL_SIZE;
  106. var viewport = new Atomic.Viewport(scene, camera);
  107. // assign a render path to our viewport which doesn't clear the screen
  108. // so can be used to composite
  109. var renderPathXML = game.cache.getResource("XMLFile", "Data/RenderPath.xml");
  110. viewport.renderPath = renderPathXML;
  111. // Example of appending a post process filter
  112. //viewport.renderPath.append(game.cache.getResource("XMLFile", "PostProcess/GreyScale.xml"));
  113. game.renderer.setViewport(1, viewport);
  114. // this is component getScene property (there is no setter on it)
  115. // this should be an error, think I saw somewhere you can raise errors on
  116. // get/set of a prop when the get/set missing
  117. self.myscene = scene;
  118. self.cameraNode = cameraNode;
  119. self.camera = camera;
  120. self.viewport = viewport;
  121. }
  122. function start() {
  123. var hudnode = self.myscene.createChild();
  124. self.hud = hudnode.createJSComponent("HUD");
  125. spawnPlayer();
  126. spawnEnemies();
  127. }
  128. function update(timeStep) {
  129. updateEnemies(timeStep);
  130. }