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 enemies; protected Vector 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 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 getEnemies() { return enemies; } public void enemyHit(EnemyShip es) { es.gotHit(); } public boolean isWaveOver() { return enemies.size() == 0 && currentAmount >= enemyMaxAmount; } }