From 5132715f44505b4e6d5c630480ac01fc98c68937 Mon Sep 17 00:00:00 2001 From: Fabrice Ecaille Date: Thu, 3 Oct 2013 18:12:59 +0200 Subject: [PATCH] Feature: adding CornWeapon --- js/spaceinvaders-core.js | 68 ++++++++++++++++++++++---------------- js/spaceinvaders-models.js | 35 ++++++++++++++++++-- js/spaceinvaders-ui.js | 5 ++- 3 files changed, 74 insertions(+), 34 deletions(-) diff --git a/js/spaceinvaders-core.js b/js/spaceinvaders-core.js index 15db59c..be5616d 100644 --- a/js/spaceinvaders-core.js +++ b/js/spaceinvaders-core.js @@ -22,7 +22,7 @@ var WAVES = [ this.y = (this.y + this.height / 4); } }, - bonus : [50, 20] + bonus : [40, 20] }, { wave : [ [ 0, 0, 0, 0, 0, 0, 0 ], @@ -84,7 +84,7 @@ Game = { if( !Game.running ) { return false; } - console.log( "Game.hit" ); + var health = Game.ship.hit(); $(".alienShot").remove(); $(".shipShot").remove(); @@ -192,40 +192,50 @@ Game = { if( !Game.running ) { return false; } - - $(".shipShot").each(function(i,e) { - var posy = $(this).y(); + + var shots = $(".shipShot"); + if( shots.length == 0 ) { + return false; + } + + shots.each(function(i,e) { + var posy = $(this).y(), + weapon = $(this)[0].weapon; if( posy < -$(this).height() ) { this.remove(); return; } - var weapon = $(this)[0].weapon; $(this).y(weapon.directionY * weapon.speed, true); $(this).x(weapon.directionX * weapon.speed, true); - var collisions = $(this).collision(".alien,."+$.gQ.groupCssClass); - collisions.each( function() { - var alien = $(this)[0]; - var aliensNotInArray = $.grep( Game.aliens, function( elementOfArray, index) { - return elementOfArray.id == alien.id; - }, true); - Game.aliens = aliensNotInArray; - var alienX = alien.alien.x; - var alienY = alien.alien.y; - var alienWidth = alien.alien.width; - var alienHeight = alien.alien.height; - alien.alien.hit(); - var remainingAliens = $(".alien").length; - if( remainingAliens == WAVES[Game.wave].bonus[0] || remainingAliens == WAVES[Game.wave].bonus[1] ) { - Game.bonus(alienX, alienY, alienWidth, alienHeight); - } - }) - if( collisions.length > 0 ) { - this.remove() - } - if( Game.aliens.length == 0 ) { - Game.running = false; - Game.levelComplete(); + if( weapon.callback ) { + weapon.callback($(this)); + } else { + var collisions = $(this).collision(".alien,."+$.gQ.groupCssClass); + collisions.each( function() { + var alien = $(this)[0], + aliensNotInArray = $.grep( Game.aliens, function( elementOfArray, index) { + return elementOfArray.id == alien.id; + }, true); + alienX = alien.alien.x, + alienY = alien.alien.y, + alienWidth = alien.alien.width, + alienHeight = alien.alien.height; + Game.aliens = aliensNotInArray; + alien.alien.hit(); + var remainingAliens = $(".alien").length; + if( remainingAliens == WAVES[Game.wave].bonus[0] || remainingAliens == WAVES[Game.wave].bonus[1] ) { + Game.bonus(alienX, alienY, alienWidth, alienHeight); + } + }) + if( collisions.length > 0 ) { + this.remove() + } + + if( Game.aliens.length == 0 ) { + Game.running = false; + Game.levelComplete(); + } } }); }, diff --git a/js/spaceinvaders-models.js b/js/spaceinvaders-models.js index b68a615..6c3616f 100644 --- a/js/spaceinvaders-models.js +++ b/js/spaceinvaders-models.js @@ -16,7 +16,7 @@ WORLD.farm.bonus = [ }, { type: "weapon", - clazz: CarotWeapon, + clazz: CornWeapon, animation: WORLD.farm.weapons.corn } ]; @@ -42,6 +42,7 @@ Weapon.prototype = { directionY : 1, animation : null, clazz : "default", + callback : undefined, fire : function() { if (this.shot_timer || this.load <= 0) { @@ -93,6 +94,36 @@ CarotWeapon.prototype = { } heriter(CarotWeapon.prototype, Weapon.prototype); +function CornWeapon() { + "use strict"; + this.directionY = -1; + this.stock = 10; + this.clazz = "corn"; + this.load = 1; + this.max_load = 1; + this.callback = function(shot) { + console.log( "CornWeapon.callback", this, shot ); + var higherAlien = Math.max.apply( null, + $(".alien").map(function() { + return $(this).y(); + }).get() ), + lowerAlien = Math.min.apply( null, + $(".alien").map(function() { + return $(this).y(); + }).get() ), + mediumAlien = (higherAlien + lowerAlien) / 2; + + if( shot.y() < mediumAlien ) { + console.log( "KABOUM" ); + shot.remove(); + } + } +} +CornWeapon.prototype = { + +} +heriter(CornWeapon.prototype, Weapon.prototype); + function AlienWeapon() { "use strict"; @@ -350,7 +381,7 @@ Ship.prototype = { this.weapon.stock--; if( this.weapon.stock == 0 ) { this.weapon = new HeroWeapon(); - $("#current_weapon").setAnimation(bonus.animation); + $("#current_weapon").setAnimation(this.weapon.animation); } } } diff --git a/js/spaceinvaders-ui.js b/js/spaceinvaders-ui.js index 823589f..cede899 100644 --- a/js/spaceinvaders-ui.js +++ b/js/spaceinvaders-ui.js @@ -21,8 +21,7 @@ var PLAYGROUND_WIDTH = 448, ALIENS_WIDTH = 24, ALIENS_HEIGHT = 17, - START_Y = 40, - IMAGES_PREFIX = "images/"; + START_Y = 40; var SHIPS = { scout: {width: 30, height: 25}, @@ -144,8 +143,8 @@ $(function(){ $.playground().registerCallback(Game.alienControl, REFRESH_RATE); // Collisions management - $.playground().registerCallback(Game.heroShotCollision, REFRESH_RATE); $.playground().registerCallback(Game.bonusCollision, REFRESH_RATE); + $.playground().registerCallback(Game.heroShotCollision, REFRESH_RATE); $.playground().registerCallback(Game.alienShotCollision, REFRESH_RATE); // Refresh playground