
// FireBeam.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th

/* Paprsek je vystřelen do cílového bodu.
   Logická proměnná zpátky v objektu ShootingBehavior
   je nastavena v momentě, kdy svého cíle dosáhne.

   Exploze (objekt typu ExplosionsClip) se odtut spustí.
   Další paprsek lze vystřelit současně s dozníváním exploze.

   Používáme vlákno, protože animace paprsku má být oddělenta od
   ostatních činností a je spouštěna z objektu typu ShootingBehavior
   poté, co kužel a parsek směřují správným směrem.
*/

import javax.vecmath.*;


public class FireBeam extends Thread
{
  private Point3d intercept;
  private ShootingBehaviour shooter;
  private LaserBeam laser;
  private ExplosionsClip explsClip;
  private double turnAngle;


  public FireBeam(Point3d ipt, ShootingBehaviour b, LaserBeam lb,
							ExplosionsClip ec, double ta)
  { intercept = ipt;
    shooter = b;   // tak, aby logická proměnná může být nastaven při volání objektu chování
    laser = lb;
    explsClip = ec;
    turnAngle = ta;
  } // konec metody: FireBeam


  public void run()
  {
    laser.shootBeam(intercept); 
    shooter.setFinishedShot();    // paprsek dorazil ke svému cíli
    explsClip.showExplosion(turnAngle, intercept);   // bum!
       /* Je-li tato metoda volána ve stejném okamžiku dvěma kopiemi
          tohoto vlákna, pak se objeví jen částečná animace. */
  }  // konec metody: run()


} // konec třídy: FireBeam
