Far-Out/src/com/sagi/dayan/Games/Elements/Wave.java

106 lines
3.5 KiB
Java

package com.sagi.dayan.Games.Elements;
import java.awt.Graphics;
import java.util.Random;
import java.util.Vector;
import javax.rmi.CORBA.Util;
import javax.swing.JPanel;
import com.sagi.dayan.Games.Stage.Level;
import com.sagi.dayan.Games.Utils.Utils;
/**
* Created by sagi on 3/11/16.
*/
public class Wave {
protected Level level;
protected int enemyMaxAmount, currentAmount, acc, startX, startY;
protected double stepDelay,fireDelay, launchDelay;
protected int[] moveVector;
protected Vector<EnemyShip> enemies;
protected Vector<Missile> bullets;
protected long lastLaunchTime;
protected String imageName;
protected int hitsToDestroy;
protected Random r;
protected boolean isShipOfTypeOne;
public Wave(int enemyMaxAmount, int[] moveVector, double fireDelay, double stepDelay, double launchDelay, int acc, String imageName, int startX, int startY, Level stage, int hitsToDestroy){
this.enemies = new Vector<>();
this.bullets = new Vector<>();
this.enemyMaxAmount = enemyMaxAmount;
this.currentAmount = 0;
this.imageName = imageName;
this.level = stage;
this.fireDelay = fireDelay;
this.launchDelay = launchDelay;
this.acc = acc;
this.startX = startX;
this.startY = startY;
this.stepDelay = stepDelay;
this.moveVector = moveVector;
this.lastLaunchTime = System.currentTimeMillis();
this.hitsToDestroy = hitsToDestroy;
this.r = new Random();
int odds = r.nextInt(100);
isShipOfTypeOne = (odds > 60) ? true : false;
}
public void update(){
long now = System.currentTimeMillis();
Vector <EnemyShip> enemiesToRemove = new Vector<>();
if(now - lastLaunchTime >= launchDelay * 1000 && currentAmount <= enemyMaxAmount){
// Create (RANDOM) new enemy
if(isShipOfTypeOne){
enemies.add(new EnemyShip(startX, startY, level.getStageHeight(), level.getStageHeight(), acc, imageName, 0, 15, 15, fireDelay, stepDelay, this, moveVector, 8, hitsToDestroy));
}else{
enemies.add(new EnemyShip(startX, startY, level.getStageHeight(), level.getStageHeight(), acc, "L1-ES2.png", 0, 15, 15, fireDelay, stepDelay, this, moveVector, 2, hitsToDestroy));
}
Utils.playSound("enemy_enter.wav");
lastLaunchTime = now;
currentAmount++;
}
for (int i = 0; i < enemies.size() ; i++){
enemies.get(i).update();
if (enemies.get(i).isDone() || enemies.get(i).isOutOfScreen()) {
enemiesToRemove.add(enemies.get(i));
}
}
for (int i = 0; i < bullets.size() ; i++){
bullets.get(i).update();
}
enemies.removeAll(enemiesToRemove);
}
public void render(Graphics g, JPanel p){
for (int i = 0; i < bullets.size() ; i++){
bullets.get(i).drawSprite(g, p);
}
for (int i = 0; i < enemies.size() ; i++){
enemies.get(i).drawSprite(g, p);
}
}
public void fireFromEnemy(EnemyShip e){
if(!e.isDead()) {
level.enemyFire(e.getCenterX(), (int) (e.getLocY() + e.getsHeight()), -(e.getAcceleration() + 2));
Utils.playSound("enemy_relese.wav");
}
}
public Vector <EnemyShip> getEnemies() {
return enemies;
}
public void enemyHit(EnemyShip es) {
es.gotHit();
}
public boolean isWaveOver() {
return enemies.size() == 0 && currentAmount >= enemyMaxAmount;
}
}