This repository has been archived on 2024-02-25. You can view files and clone it, but cannot push or open issues or pull requests.
spaaace/src/Enemy.hx
2014-07-09 15:28:10 +02:00

190 lines
No EOL
3.8 KiB
Haxe

import com.haxepunk.Entity;
import com.haxepunk.graphics.Image;
import com.haxepunk.HXP;
import com.haxepunk.Sfx;
import Player;
import Score;
import EnemyBullet;
class Enemy extends Entity {
public function new (x:Float, y:Float, clr:Int, eT:Int) {
super(x, y);
color = clr;
enemyType = eT;
#if flash
bulletSound = new Sfx("audio/laser3.mp3");
#else
bulletSound = new Sfx("audio/laser3.wav");
#end
sprite = new Image("graphics/" + enemies[color] + enemyType + ".png");
healthSprite = Image.createRect(sprite.width, 10, 0x00FF00);
healthSprite.y -= 50;
originalHealth = health = (enemyType * 2 * (color + 1));
sprite.centerOrigin();
healthSprite.centerOrigin();
addGraphic(sprite);
addGraphic(healthSprite);
setHitbox(sprite.width, sprite.height);
layer = -4;
}
private function assignLocation() {
if (enemyType < 3) {
arr = [
Math.floor(Math.random() * (HXP.width - this.width)),
Math.floor((Math.random() * 200) + 350)
];
}
else if (enemyType >= 3 && enemyType <= 4) {
var player:Array<Player> = [];
this.scene.getClass(Player, player);
if (Math.random() * 1 > .5)
antX = player[0].x;
else
antX = Math.random() * HXP.width;
arr = [
antX,
(Math.random() * 200) + 350
];
}
else {
var player:Array<Player> = [];
this.scene.getClass(Player, player);
if (Math.random() * 1 > .5)
antX = player[0].x;
else
antX = Math.random() * HXP.width;
if (Math.random() * 1 > .5)
antX -= this.width;
else
antX += this.width;
arr = [
antX,
(Math.random() * 200) + 350
];
}
return arr;
}
private function shoot() {
if (shootTimer < 0) {
if (enemyType != 3) {
this.scene.add(new EnemyBullet(this.x, this.y + this.height));
}
else {
this.scene.add(new EnemyBullet(this.x - 30, this.y + this.height));
this.scene.add(new EnemyBullet(this.x + 30, this.y + this.height));
}
if (enemyType == 4) {
shootTimer = 1;
}
else {
shootTimer = 5;
}
bulletSound.play();
}
}
public override function update() {
turnTimer -= HXP.elapsed;
shootTimer -= HXP.elapsed;
this.centerOrigin();
healthSprite.scaledWidth = (sprite.width / originalHealth) * health;
if (this.x != loc[0] && this.y != loc[1] && !dying)
this.moveTowards(loc[0], loc[1], moveSpeed);
if (turnTimer < 0) {
loc = assignLocation();
if (enemyType == 2)
turnTimer = 2;
else if (enemyType == 3 || enemyType == 4)
turnTimer = 1;
else if (enemyType == 1 || enemyType == 5)
turnTimer = .5;
}
if (enemyType > 2) {
if (Math.random() < .1 && shootTimer < 0) {
var player = this.scene.getInstance("player");
if (this.x > player.left && this.x < player.right) {
turnTimer = 1;
loc = [this.x, this.y];
shoot();
}
}
}
var bullet:Entity = collide("bullet", this.x, this.y);
if (bullet != null) {
health -= 1;
var score:Array<Score> = [];
this.scene.getClass(Score, score);
score[0].add(1500);
this.scene.remove(bullet);
}
if (health == 0) {
die();
}
}
private function die() {
if (!died) {
dying = true;
died = true;
this.visible = false;
this.scene.add(new Explosion(this.x, this.y, this));
}
}
private var enemies:Array<String> = [
"enemyGreen",
"enemyBlue",
"enemyRed",
"enemyBlack"
];
private var sprite:Image;
private var healthSprite:Image;
private var bulletSound:Sfx;
private var color:Int;
private var enemyType:Int;
private var health:Int;
private var originalHealth:Int;
private var dying:Bool = false;
private var died:Bool = false;
private var arr:Array<Float>;
private var antX:Float;
private var turnTimer:Float = 0;
private var shootTimer:Float = 0;
private var moveSpeed:Int = 10;
private var loc:Array<Float> = [];
}