/**
 * Title:        Pommeja taivaalta
 * Description:  Geneerinen räiskintäpeli Javalla
 * Copyright:    Copyright (c) 2003
 *
 * @author Juho Makkonen
 * @version 1.0
 */


import java.util.HashSet;
import java.util.Set;


/**
 * Luokan <code>Laukaus</code> olio on näytölle
 * piirtyvä suuri punainen ympyrä, joka tuhoaa
 * alueellaan olevat pommit.
 */
public class Laukaus {

    /** Pommipaneeli, jossa laukaus näkyy. */
    private Pommipaneeli pommipaneeli;
    
    /** Laukauksen keskipisteen x-koordinaatti. */
    private int x;

    /** Laukauksen keskipisteen y-koordinaatti. */
    private int y;

    /** Laukauksen näkyvyys. */
    private boolean onNakyvissa;

    /** Laukauksen alueella olevat pommit. */
    private Set pommit;

    /** Laukauksen tienaamat pisteet. */
    private int pisteet;


    /**
     * Luo uuden laukauksen.
     *
     * @param x x-koordinaatti
     * @param y y-koordinaatti
     * @param pommipaneeli pommipaneeli, johon
     * laukaus piirretään
     */
    public Laukaus(int x, int y, Pommipaneeli pommipaneeli) {

	// Ominaismuuttujan <code>x</code>
	// arvoksi parametrina annettu x.
	this.x = x;

	// Ominaismuuttujan <code>y</code>
	// arvoksi parametrina annettu y.
	this.y = y;

	// Ominaismuuttujan <code>pommipaneeli</code>
	// arvoksi parametrina annettu pommipaneeli.
	this.pommipaneeli = pommipaneeli;

	// Alustetaan joukko pommit.
	this.pommit = new HashSet();

    }  


    /** 
     * Palauttaa laukauksen keskipisteen x-koordinaatin.
     * 
     * @return keskipisteen x-koordinaatti 
     */
    public int annaX() {
	return x;
    }
    
    
    /**
     * Palauttaa laukauksen keskipisteen y-koordinaatin.
     *
     * @return keskipisteen y-koordinaatti
     */
    public int annaY() {
	return y;
    }


    /**
     * Palauttaa laukauksen näkyvyyden.
     * 
     * @return muuttujan
     * <code>onNakyvissa</code> arvo,
     * joka on true tai false
     */
    public boolean onNakyvissa() {
	return onNakyvissa;
    }


    /** 
     * Asettaa laukauksen näkyvyyden.
     *
     * @param b totuusarvo, joksi
     * laukauksen näkyvyys asetetaan
     */
    public void asetaNakyvyys(boolean b) {
	onNakyvissa = b;
    }


    /**
     * Tarkastaa, tuhotaanko parametrina annettu
     * pommi.
     * 
     * @param pommi pommi, jota tarkastellaan
     */
    public void testaaTuhotaanko(Pommi pommi) {

	// Määritetään pommin keskipisteen sijainti.
	int pomminKeskipisteX = pommi.annaX() + 10;
	int pomminKeskipisteY = pommi.annaY() + 10;

	// Jos pommin keskipiste on viittätoista
	// lähempänä laukauksen keskipistettä, on
	// pommi laukauksen alueella, jolloin
	// pommi tuhotaan.
	if (Math.abs(x - pomminKeskipisteX) < 25
	    && Math.abs(y - pomminKeskipisteY) < 25) {
	    pommit.add(pommi);
	    pommi.tuhoudu();		     
	}

    }

    
    /**
     * Laskee laukauksen tienaamat pisteet.
     */
    public void laskePisteet() {

	// Jos laukaus on tuhonnut pommeja, pelaaja
	// saa pisteitä 10 x (pommien määrä toiseen).
	if (pommit.size() > 0) {
	    pisteet += (10 * pommit.size() * pommit.size());

	    // Jos laukaus on mennyt ohi, pelaaja saa
	    // 5 miinuspistettä.
	} else {
	    pisteet -= 5;
	}

	// Tyhjennetään joukko pommit.
	pommit.clear();

	// Lisätään pisteet pelaajan kokonaispisteisiin.
	pommipaneeli.asetaPisteet(pisteet);
    }  

}


