From 33a034bc942f8beff27f180eabe48ac246461e1b Mon Sep 17 00:00:00 2001 From: Bram van der Veen <96aa48@gmail.com> Date: Wed, 9 Jul 2014 15:28:10 +0200 Subject: [PATCH] Made the game linear --- src/Boss.hx | 37 +++++++++++++++++++++----- src/Enemy.hx | 14 +++++----- src/Explosion.hx | 2 ++ src/MainScene.hx | 3 --- src/Player.hx | 6 ++--- src/Spawner.hx | 68 ++++++++++++++++++++++++++---------------------- 6 files changed, 79 insertions(+), 51 deletions(-) diff --git a/src/Boss.hx b/src/Boss.hx index 24de7a1..38a6505 100644 --- a/src/Boss.hx +++ b/src/Boss.hx @@ -5,17 +5,18 @@ import com.haxepunk.masks.Hitbox; import com.haxepunk.HXP; import Enemy; +import Explosion; class Boss extends Entity { - public function new () { + public function new (clr:Int) { - var color:Int = Math.floor(Math.random() * 4); + color = clr; currentSprite = sprites[color]; currentSprite.scale = 8; currentSprite.smooth = false; - maxEnemies = Math.floor(Math.random() * (color + 1) * 4); + maxEnemies = Math.floor(Math.random() * (color + 1) * 2); graphic = currentSprite; @@ -43,13 +44,14 @@ class Boss extends Entity { public override function update() { super.update(); - spawnTimer -= HXP.elapsed; + explosionTimer -= HXP.elapsed; + var enemies:Array = []; this.scene.getClass(Enemy, enemies); - if (spawnTimer < 0 && enemies.length != maxEnemies) { - this.scene.add(new Enemy(this.width / 2, this.height / 2)); + if (spawnTimer < 0 && enemies.length != maxEnemies - 1 && canSpawn) { + this.scene.add(new Enemy(this.width / 2, 20, color, Math.floor(Math.random() * 4) + 1)); spawnTimer = .75; } @@ -57,8 +59,24 @@ class Boss extends Entity { if (this.y < currentSprite.height * 8 * -.5) this.y += 2; + else if (!dead) + canSpawn = true; - healthBar.scaledWidth = (healthBar.width / originalHealth) * health; + if (health > 0) healthBar.scaledWidth = (healthBar.width / originalHealth) * health; + else { + dead = true; + canSpawn = false; + + if (explosionTimer < 0 && counter != 100) { + healthBarBackground.alpha = healthBar.alpha = currentSprite.alpha -= 0.01; + this.scene.add(new Explosion(this.x + (Math.random() * currentSprite.width * 8), this.y + (Math.random() * currentSprite.height * 8) + 100, this.scene.getInstance("player"))); + explosionTimer = Math.random() * .2; + counter++; + } + else if (counter == 100) { + this.scene.remove(this); + } + } var bullet:Entity = this.collide("bullet", this.x, this.y); @@ -77,12 +95,17 @@ class Boss extends Entity { new Image("graphics/ufoYellow.png") ]; + private var color:Int; private var health:Int; private var originalHealth:Int; private var healthBar:Image; private var healthBarBackground:Image; private var maxEnemies:Int; + private var canSpawn:Bool = false; private var spawnTimer:Float = .75; + private var explosionTimer:Float = 0; + private var counter:Int = 0; + private var dead:Bool = false; } \ No newline at end of file diff --git a/src/Enemy.hx b/src/Enemy.hx index 09befab..5345462 100644 --- a/src/Enemy.hx +++ b/src/Enemy.hx @@ -9,11 +9,11 @@ import EnemyBullet; class Enemy extends Entity { - public function new (x:Float, y:Float) { + public function new (x:Float, y:Float, clr:Int, eT:Int) { super(x, y); - color = Math.floor(Math.random() * 4); - enemyType = Math.floor(Math.random() * 5) + 1; + color = clr; + enemyType = eT; #if flash bulletSound = new Sfx("audio/laser3.mp3"); @@ -26,7 +26,7 @@ class Enemy extends Entity { healthSprite = Image.createRect(sprite.width, 10, 0x00FF00); healthSprite.y -= 50; - originalHealth = health = (enemyType * 2 * color); + originalHealth = health = (enemyType * 2 * (color + 1)); sprite.centerOrigin(); healthSprite.centerOrigin(); @@ -43,7 +43,7 @@ class Enemy extends Entity { if (enemyType < 3) { arr = [ Math.floor(Math.random() * (HXP.width - this.width)), - Math.floor(Math.random() * 400) + Math.floor((Math.random() * 200) + 350) ]; } else if (enemyType >= 3 && enemyType <= 4) { @@ -57,7 +57,7 @@ class Enemy extends Entity { arr = [ antX, - Math.random() * 400 + (Math.random() * 200) + 350 ]; } else { @@ -76,7 +76,7 @@ class Enemy extends Entity { arr = [ antX, - Math.random() * 400 + (Math.random() * 200) + 350 ]; } diff --git a/src/Explosion.hx b/src/Explosion.hx index 9880ec2..3a10df1 100644 --- a/src/Explosion.hx +++ b/src/Explosion.hx @@ -17,6 +17,8 @@ class Explosion extends Entity { this.centerOrigin(); sprite.centerOrigin(); + + layer = -4; } private function die () { diff --git a/src/MainScene.hx b/src/MainScene.hx index 133456d..cad3b41 100644 --- a/src/MainScene.hx +++ b/src/MainScene.hx @@ -18,10 +18,8 @@ class MainScene extends Scene var player = new Player(); var button = new Button(); var spawner = new Spawner(); - var enemy = new Enemy(-160, 0); var lives = new Lives(); var score = new Score(); - var boss = new Boss(); #if flash music = new Sfx("audio/loop.mp3"); @@ -36,7 +34,6 @@ class MainScene extends Scene add(button); #end - add(boss); add(player); add(lives); add(score); diff --git a/src/Player.hx b/src/Player.hx index 1b4e5d0..a21bd5d 100644 --- a/src/Player.hx +++ b/src/Player.hx @@ -18,8 +18,6 @@ class Player extends Entity { super(HXP.halfWidth - 16, HXP.height - 200); baseSprite = new Image("graphics/playerShip1_green.png"); shield = new Image("graphics/shield1.png"); - shield.x -= 16; - shield.y -= 20; #if flash laser = new Sfx("audio/laser4.mp3"); @@ -83,7 +81,7 @@ class Player extends Entity { this.y -= moveSpeed; } - if (Input.pressed("shoot")) { + if (Input.check("shoot")) { shoot(); } @@ -148,6 +146,8 @@ class Player extends Entity { this.addGraphic(fireEffectLeft); this.addGraphic(fireEffectRight); + shield.centerOrigin(); + if (shielded) this.addGraphic(shield); diff --git a/src/Spawner.hx b/src/Spawner.hx index 360805b..c249ce1 100644 --- a/src/Spawner.hx +++ b/src/Spawner.hx @@ -1,51 +1,57 @@ import com.haxepunk.Entity; import com.haxepunk.HXP; -import Asteroid; import Enemy; +import Boss; class Spawner extends Entity { - public function new () { - super(); + + public function new() { + super(0,0); + } public override function update() { - spawnStarTime -= HXP.elapsed; - spawnAsteroidTime -= HXP.elapsed; - // spawnEnemyTime -= HXP.elapsed; - spawnPickupTime -= HXP.elapsed; + enemyTimer -= HXP.elapsed; + var enemies:Array = []; + var bosses:Array = []; + this.scene.getClass(Enemy, enemies); + this.scene.getClass(Boss, bosses); - if (spawnAsteroidTime < 0) { - this.scene.add(new Asteroid(HXP.width * Math.random(), -16)); - spawnAsteroidTime = .5; - } + if (level == 4) {level = 0; trace("YOU BEAT IT!");} + if (enemyType == 6) {sublevel++; enemyType = 1;} - if (spawnStarTime < 0) { - this.scene.add(new Star(HXP.width * Math.random())); - spawnStarTime = .5; - } + if (enemies.length < 1 && sublevel != 2) { + if (enemyTimer < 0) { + if (sublevel == 0) + this.scene.add(new Enemy(HXP.halfWidth, -60, level, enemyType++)); + else { + this.scene.add(new Enemy(HXP.halfWidth, -60, level, enemyType++)); + if (enemyType != 6) this.scene.add(new Enemy(HXP.halfWidth, -60, level, enemyType++)); + else this.scene.add(new Enemy(HXP.halfWidth, -60, level, enemyType - 1)); + } - if (spawnEnemyTime < 0 && this.scene.getInstance("player") != null) { - var enemies:Array = []; - this.scene.getClass(Enemy, enemies); - - if (enemies[0] == null) { - this.scene.add(new Enemy(HXP.halfWidth, -50)); } - - spawnEnemyTime = 5; + } + else { + enemyTimer = 1; } - if (spawnPickupTime < 0) { - this.scene.add(new Pickup(HXP.width * Math.random(), -50)); - spawnPickupTime = 5 * Math.random() + 5; + if (sublevel == 2 && !bossSpawned) { + this.scene.add(new Boss(level)); + bossSpawned = true; } - super.update(); + if (sublevel == 2 && bossSpawned && bosses.length != 1) { + level++; enemyType = 1; sublevel = 0; bossSpawned = false; trace("Next level!"); + } } - private var spawnAsteroidTime:Float = .5; - private var spawnStarTime:Float = .5; - private var spawnEnemyTime:Float = 5; - private var spawnPickupTime:Float = 10; + private var level:Int = 0; + private var sublevel:Int = 0; + + private var enemyTimer:Float = 1; + private var enemyType:Int = 1; + + private var bossSpawned:Bool = false; } \ No newline at end of file