| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /* global SpaceGame */
- 'atomic component';
- exports.component = function(self) {
- var game = Atomic.game;
- var input = game.input;
- var node = self.node;
- self.allowMove = true;
- self.allowShoot = true;
- self.shootDelta = 0;
- self.health = 10;
- // joystick support
- self.js_fire = false;
- self.js_left = false;
- self.js_right = false;
- if ( Atomic.input.numJoysticks > 0 ) {
- var scene = SpaceGame.myscene;
- scene.subscribeToEvent("JoystickButtonDown", function(ev) {
- if ( ev.Button == Atomic.CONTROLLER_BUTTON_X
- || ev.Button == Atomic.CONTROLLER_BUTTON_Y
- || ev.Button == Atomic.CONTROLLER_BUTTON_A
- || ev.Button == Atomic.CONTROLLER_BUTTON_B
- || ev.Button == Atomic.CONTROLLER_BUTTON_LEFTSHOULDER
- || ev.Button == Atomic.CONTROLLER_BUTTON_RIGHTSHOULDER )
- if (!SpaceGame.gameOver)
- self.fire();
- if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_LEFT )
- if (!SpaceGame.gameOver)
- self.moveLeft();
- if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_RIGHT )
- if (!SpaceGame.gameOver)
- self.moveRight();
- });
- scene.subscribeToEvent("JoystickButtonUp", function(ev) {
- if ( ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_LEFT
- || ev.Button == Atomic.CONTROLLER_BUTTON_DPAD_RIGHT )
- self.moveStop();
- });
- }
- self.onHit = function() {
- if ( game.jsid >= 0 ) // has js and not muted
- Atomic.input.joystickRumble (game.jsid, 0.75, 250 );
- var expNode = SpaceGame.myscene.createChild("Explosion");
- var exp = expNode.createJSComponent("Components/Explosion.js", {
- spawnPosition: node.worldPosition2D
- });
- self.health--;
- SpaceGame.hud.updateHealth(self.health);
- if (self.health == 0) {
- SpaceGame.lose();
- }
- };
- function doShooting(timeStep) {
- if (self.shootDelta > 0) {
- self.shootDelta -= timeStep;
- if (self.shootDelta < 0)
- self.shootDelta = 0;
- return;
- }
- if (!input.getKeyDown(Atomic.KEY_W)
- && !input.getKeyDown(Atomic.KEY_UP)
- && !input.getKeyDown(Atomic.KEY_SPACE)
- && !self.js_fire )
- return;
- self.shootDelta = 0.15;
- var pos = node.position2D;
- pos[1] += .5;
- SpaceGame.spawnBullet(pos, true);
- self.js_fire = false; // reset js request
- }
- function moveShip(timeStep) {
- var speed = 3.0 * timeStep;
- var pos = node.position2D;
- var left = false;
- var right = false;
- if (input.getKeyDown(Atomic.KEY_A) || input.getKeyDown(Atomic.KEY_LEFT) || self.js_left )
- pos[0] -= speed;
- if (input.getKeyDown(Atomic.KEY_D) || input.getKeyDown(Atomic.KEY_RIGHT) || self.js_right )
- pos[0] += speed;
- if (pos[0] < -SpaceGame.halfWidth + 2)
- pos[0] = -SpaceGame.halfWidth + 2;
- if (pos[0] > SpaceGame.halfWidth - 2)
- pos[0] = SpaceGame.halfWidth - 2;
- node.position2D = pos;
- }
- self.start = function() {
- var spaceSheet = game.getSpriteSheet("Sprites/spacegame_sheet.xml");
- var sprite2D = node.createComponent("StaticSprite2D");
- sprite2D.sprite = spaceSheet.getSprite("spaceship_mantis");
- sprite2D.blendMode = Atomic.BlendMode.BLEND_ALPHA;
- node.position2D = [0, -SpaceGame.halfHeight + .65];
- };
- self.update = function(timeStep) {
- if (self.allowShoot)
- doShooting(timeStep);
- if (self.allowMove)
- moveShip(timeStep);
- };
- self.moveStop = function() {
- self.js_right = false; // reset js move requests
- self.js_left = false;
- }
- self.moveLeft = function() {
- self.js_left = true;
- }
- self.moveRight = function() {
- self.js_right = true;
- }
- self.fire = function() {
- self.js_fire = true;
- }
- };
|