import java.awt.*; import java.util.LinkedList; import javax.swing.ImageIcon; public class PointToPointEnemy extends MovingObject { public int dx = 0; public int dy = 0; public double speed = 8.0; //šnskad fšrflyttningshastighet public LinkedList points = new LinkedList(); public double distanceVectorX; //Vektorn mellan šnskad punkt och nuvarande (X) public double distanceVectorY; //Vektorn mellan šnskad punkt och nuvarande (Y) public double normDistX; //normaliserade vektorn public double normDistY; //normaliserade vektorn public Point currentPoint = new Point(); //TemporŠr punkt public boolean shoot = false; public int shootRange = 20; public int shootCount = 0; public double shootSpeed = 5.0; ImageIcon bild = new ImageIcon("skull.gif"); Image bildobjekt = bild.getImage(); private int imageHeight = 35; private int imageWidth = 35; public PointToPointEnemy() { //skapar ett kolissions-polygon this.polygon.addPoint(x, y); this.polygon.addPoint(x, y + imageHeight); this.polygon.addPoint(x + imageWidth, y + imageHeight); this.polygon.addPoint(x + imageWidth, y); } public void setSpeed(double speed) { this.speed = speed; } public void setShoot(boolean p) { this.shoot = p; } public void addPoint(Point p) { points.add(p); } public void draw(Graphics g) { //g.setColor(Color.BLACK); //g.fillRect(x, y, width, height); //Ritar ut objektet i vald fŠrg g.drawImage(bildobjekt, x ,y, null); //g.setColor(Color.PINK); //g.drawPolygon(polygon); } public void setdxdy() { currentPoint = (Point) points.element(); //tempPoint <- Fšrsta punkten pŒ listan distanceVectorX = currentPoint.x - this.x; //RŠknar ut vektorn mellan šnskad punkt och nuvarande (X) distanceVectorY = currentPoint.y - this.y; //RŠknar ut vektorn mellan šnskad punkt och nuvarande (Y) //normDistX = distanceVectorX / (Math.sqrt((double) (Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2)))); //Normaliserar vektorn (X) //normDistY = distanceVectorY / (Math.sqrt((double) (Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2)))); //Normaliserar vektorn (Y) if (speed <= (Math.sqrt((double) (Math.pow(distanceVectorX, 2) + Math.pow(distanceVectorY, 2))))) { //kollar om absolutbeloppet av vektorn Šr mindre Šn hastigheten dx = (int) (speed * (Math.cos(Math.atan2(distanceVectorY, distanceVectorX)))); //SŠtter dx till hastigheten i x-led utifrŒn vektorns riktining dy = (int) (speed * (Math.sin(Math.atan2(distanceVectorY, distanceVectorX)))); //SŠtter dy till hastigheten i y-led utifrŒn vektorns riktning } else { //SlŠnger den fšrsta punkten sist pŒ listan currentPoint = (Point) points.remove(); points.add(currentPoint); } } public void shoot() { shootCount++; if (shootCount == shootRange) { shootCount = 0; //skapar ett kanonskott GunShot skott = new GunShot(); skott.setPosition(x + width/2, y + height/2); skott.setSize(10, 10); skott.setDirection(normDistX, normDistY); skott.setSpeed(speed + shootSpeed); skott.setEnemy(true); level.playerObjects.add(skott); } } public void clockTick() { setdxdy(); //AnvŠnder metoden setdxdy() fšr att bestŠmma hastigheten if (shoot) { //skjuter om den har blivigt tillsagd till det shoot(); } this.y += dy; //fšrflyttar objektet i y-ledd this.x += dx; //fšrflyttar objektet i x-ledd //Fšrflyttar Šven objektets kollissionspolygon Polygon polly = new Polygon(); polly.addPoint(x, y); polly.addPoint(x, y + imageHeight); polly.addPoint(x + imageWidth, y + imageHeight); polly.addPoint(x + imageWidth, y); this.polygon = polly; } }