SpaceWars/src/MAndApps/apps/spacewars/entity/enemy/NormalEnemy.java

178 lines
3.8 KiB
Java
Raw Normal View History

2014-10-16 18:40:06 -04:00
package MAndApps.apps.spacewars.entity.enemy;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import MAndApps.apps.spacewars.SpaceWars;
import MAndApps.apps.spacewars.entity.Enemy;
public class NormalEnemy extends Enemy {
private int health = 2;
private final int MAX_HEALTH = health;
private static final int WIDTH = 16, HEIGHT = 16, PROXIMITY = 200;
private double x, y, time = 0, desiredX, desiredY, Xmod, Ymod, dx = 0,
dy = 0;
private static final double ACC = 0.005, MAXSPEED = 1, DEAD_ACC = 0.5d,
DEAD_MAXSPEED = 5;
private Color color;
private boolean debug = false, alive = true;
private double healthBar = 1;
public NormalEnemy(int x, int y) {
super(x, y, 16, 16);
this.x = x;
this.y = y;
final int LOW = 200, HIGH = 256, color = rand(LOW, HIGH);
this.color = new Color(color, color, color);
}
@Override
public int tick() {
// epic AI
if((int)healthBar <= 0){
alive = false;
}
if (alive) {
if (SpaceWars.getPlayer().getAlive()) {
if (time > 0.4d) {
time = 0;
Xmod = rand(-PROXIMITY, PROXIMITY);
Ymod = rand(-PROXIMITY, PROXIMITY);
}
desiredX = SpaceWars.getPlayer().getX() + Xmod;
desiredY = SpaceWars.getPlayer().getY() + Ymod;
if ((int) desiredX > (int) x)
dx += ACC;
else if ((int) desiredX < (int) x) {
dx -= ACC;
}
if ((int) desiredY > (int) y)
dy += ACC;
else if ((int) desiredY < (int) y) {
dy -= ACC;
}
if (dx > MAXSPEED)
while (dx > MAXSPEED)
dx -= ACC;
if (dx < 0 - MAXSPEED)
while (dx < 0 - MAXSPEED)
dx += ACC;
if (dy > MAXSPEED)
while (dy > MAXSPEED)
dy -= ACC;
if (dy < 0 - MAXSPEED)
while (dy < 0 - MAXSPEED)
dy += ACC;
} else {
if (time > 0.4d) {
time = 0;
Xmod = rand(0, 1024);
Ymod = rand(0, 200);
}
desiredX = Xmod;
desiredY = Ymod;
if ((int) desiredX > (int) x)
dx += DEAD_ACC;
else if ((int) desiredX < (int) x) {
dx -= DEAD_ACC;
}
if ((int) desiredY > (int) y)
dy += DEAD_ACC;
else if ((int) desiredY < (int) y) {
dy -= DEAD_ACC;
}
if (dx > DEAD_MAXSPEED)
while (dx > DEAD_MAXSPEED)
dx -= DEAD_ACC;
if (dx < 0 - DEAD_MAXSPEED)
while (dx < 0 - DEAD_MAXSPEED)
dx += DEAD_ACC;
if (dy > DEAD_MAXSPEED)
while (dy > DEAD_MAXSPEED)
dy -= DEAD_ACC;
if (dy < 0 - DEAD_MAXSPEED)
while (dy < 0 - DEAD_MAXSPEED)
dy += DEAD_ACC;
}
x += dx;
y += dy;
if (x > SpaceWars.getWIDTH() - WIDTH)
while (x > SpaceWars.getWIDTH() - WIDTH)
x--;
if (x < 0)
while (x < 0)
x++;
if (y > SpaceWars.getHEIGHT() - HEIGHT)
while (y > SpaceWars.getHEIGHT() - HEIGHT)
y--;
if (y < 0)
while (y < 0)
y++;
}
time += 0.01;
absoluteTime++;
updateBoundingBox((int) x, (int) y, 16, 16);
return 0;
}
private Random r = new Random();
private int absoluteTime = 0;
@Override
public void render(Graphics g) {
g.setColor(color);
int temp;
try{
2015-03-03 14:44:52 -05:00
temp = r.nextInt((int)(0-(absoluteTime/20d))+5);
2014-10-16 18:40:06 -04:00
}catch(Exception e){
temp = 0;
}
if (temp == 0) if (alive) g.fillRect((int) x, (int) y, WIDTH, HEIGHT);
if (debug) g.drawLine((int) x, (int) y, (int) desiredX, (int) desiredY);
healthBar += ((((double)health/(double)MAX_HEALTH)*16) - healthBar)/6;
//healthbar
g.setColor(Color.RED);
g.fillRect((int)x, (int)y, WIDTH - 1, 3);
g.setColor(Color.GREEN);
g.fillRect((int)x, (int)y, (int)healthBar, 3);
g.setColor(Color.BLACK);
g.drawRect((int)x, (int)y, WIDTH - 1, 3);
}
@Override
public void damage(int i) {
health -= i;
}
@Override
public boolean getAlive() {
return alive;
}
@Override
public Color getColor() {
return color;
}
@Override
public int getWorth(){
return r.nextInt(3)+1;
}
}