import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.util.*; import javax.imageio.ImageIO; public class Boss extends Enemy { private int attackNum; private int delay; private int ticks; private int moveTick1; //timer for atk 1 private int moveTick2; //timer for atk 2 private int moveTick3; //timer for atk 3 private int moveTick4; private int frameTick; //tick for animation private boolean chain; //attack combo counter { super(x, y, hp, dx, dy, w, h, colour); attackNum=0; delay=3000; } public Boss() { attackNum=0; delay=1000; ticks=0; moveTick1=0; moveTick2=0; moveTick3=0; moveTick4=0; frameTick=0; try { chain=false; } } //mutator and accessors public int getAttackNum() {return attackNum;} public int getDelay() {return delay;} public void setAttackNum(int a) {attackNum=a;} public void setDelay(int d) {delay=d;} { if (visible) { g.drawImage(bossImg, x, y, width, height, null, null); //g.setColor(Color.red); //g.drawRect(x+20, y+5, width-40, height-10); hitbox testing if (attackNum==0) { x+=dx; y+=dy; if (y>=150) { dy=0; ticks=delay; } } else if (ticks>=delay || moveTick1>0 || moveTick2>0 || moveTick3>0 || moveTick4>0) { ticks=0; //attackNum=4; if ((attackNum==1 || moveTick1>0) && moveTick2==0 && moveTick3==0 && moveTick4==0) //first attack pattern (fires 2 columns of 6 projectiles) { moveTick1+=10; if (moveTick1%50==0) attack1(pArr); if (moveTick1>=300 || moveTick2>0) moveTick1=0; } else if ((attackNum==2 || moveTick2>0) && moveTick1==0 && moveTick3==0 && moveTick4==0) //second attack pattern (fires 2 laser) { if (moveTick2==0) dx=-2; moveTick2+=10; frameTick = (frameTick + 10) % 200; x+=dx; if (x<50 || x>350) dx=-dx; if (moveTick2<=1000) { g.drawImage(laserCharge4, x-8, y+95, null); g.drawImage(laserCharge4, x+270, y+95, null); if (150<=frameTick && frameTick<200) { g.drawImage(laserCharge4, x-8, y+95, null); g.drawImage(laserCharge4, x+270, y+95, null); } else if (100<=frameTick) { g.drawImage(laserCharge3, x-8, y+95, null); g.drawImage(laserCharge3, x+270, y+95, null); } else if (50<=frameTick) { g.drawImage(laserCharge2, x-8, y+95, null); g.drawImage(laserCharge2, x+270, y+95, null); } else if (0<=frameTick) { g.drawImage(laserCharge1, x-8, y+95, null); g.drawImage(laserCharge1, x+270, y+95, null); } } else if (moveTick2<=3000) { attack2(s); if (frameTick<50 && frameTick>=0) { g.drawImage(laser1, x-12, y+55, 50, 1000, null, null); g.drawImage(laser1, x+260, y+55, 50, 1000, null, null); } else { g.drawImage(laser2, x-12, y+55, 50, 1000, null, null); g.drawImage(laser2, x+260, y+55, 50, 1000, null, null); } if (frameTick>=100) frameTick=0; } else { moveTick2=0; frameTick=0; } } else if ((attackNum==3 || moveTick3>0) && moveTick1==0 && moveTick2==0 && moveTick4==0) //third attack pattern (tries to ram the player) { moveTick3+=10; x+=dx; y+=dy; if (moveTick3<2500) { dy=0; if (s.getX()+s.getWidth()/2 < x+width/2) dx=-2; else if (s.getX()+s.getWidth()/2 > x+width/2) dx=2; else dx=0; } else if (moveTick3<3500) { dx=0; dy=0; frameTick=(frameTick+10)%200; if (frameTick<=100) dx=-1; if (frameTick>100) dx=1; if (moveTick3>5800) frameTick=0; } else if (moveTick3<6000 && y<1000) { dx=0; dy=8; if (frameTick==0) attack3(pArr); frameTick=(frameTick+10)%100; } else { x=200; y=-100; dx=0; dy=2; attackNum=0; moveTick3=0; frameTick=0; } } /*else if ((attackNum==4 || moveTick4>0) && moveTick1==0 && moveTick2==0 && moveTick3==0) //fourth attack pattern (fires random projectiles and chain into attack 3) { moveTick4+=10; x+=dx; y+=dy; if (y<300) dy=2; else if (moveTick4<(int)(1500*Math.random()+2000)) //random duration of attack { dy=0; attack4(pArr); } else { attackNum=3; dx=0; dy=0; moveTick4=0; } } */ } else if (attackNum!=0) { idle(); } } ticks+=10; } public void idle() //movement while not attacking { x+=dx; y+=dy; if (dx!=1) { dx=-1; dy=0; } if (x<=150) dx=-dx; else if (x>250) dx=-dx; } public void attack1(ArrayList<Projectile> pArr) { } public void attack2(Ship s) { if (ship.intersects(l1) || ship.intersects(l2)) s.damage(100); } public void attack3(ArrayList<Projectile> pArr) { } public void attack4(ArrayList<Projectile> pArr) { for (int i=1;i<=projectileCount;i++) { pArr.add(new Projectile(x+width/2, y+height/2, directionX, directionY, 8, 8, Color.red, 20, false, projectile3)); } } public void collide(Ship s) { if (e.intersects(ship)) { s.damage(50); if (s.getITick()==0) s.setITick(500); } } }