Selaa lähdekoodia

Feature: adding CornWeapon

Fabrice Ecaille 12 vuotta sitten
vanhempi
commit
5132715f44
3 muutettua tiedostoa jossa 73 lisäystä ja 33 poistoa
  1. 38 28
      js/spaceinvaders-core.js
  2. 33 2
      js/spaceinvaders-models.js
  3. 2 3
      js/spaceinvaders-ui.js

+ 38 - 28
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( 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( collisions.length > 0 ) {
-				this.remove()
-			}
 			
-			if( Game.aliens.length == 0 ) {
-				Game.running = false;
-				Game.levelComplete();
+				if( Game.aliens.length == 0 ) {
+					Game.running = false;
+					Game.levelComplete();
+				}
 			}
 		});
 	},

+ 33 - 2
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);
 			} 
 		}
 	}

+ 2 - 3
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