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

/* Třída AmmoManage nejdříve načte do pole exploIms[] předem definovanou 
   sadu obrázků explozí.

   Poté vytvoří NUMBEANS objektů typu LaserShot a každému z nich předá
   odkaz na tomto pole. To znamená, že obrázky se nenačítaí vícekrát, 
   ale pouze jednou.

   Třída AmmoManager také obsluhuje volání metody fireBeam() ze třídy KeyBehavior
   odpálením paprsku, je-li nějaký k dispozici, jinak neudělá nic.
*/

import javax.media.j3d.*;
import com.sun.j3d.utils.image.*;
import javax.vecmath.*;


public class AmmoManager
{
  private final static int NUMBEAMS = 20;
  private LaserShot[] shots;    // pro paprsky


  public AmmoManager(TransformGroup steerTG, BranchGroup sceneBG, Vector3d targetVec)
  {
    // načti obrázky exploze
    ImageComponent2D[] exploIms = loadImages("explo/explo", 6);

    shots = new LaserShot[NUMBEAMS];
    for(int i=0; i < NUMBEAMS; i++) {
      shots[i] = new LaserShot(steerTG, exploIms, targetVec);
      // laserový výstřel reprezentuje jediný paprsek a exploze
      sceneBG.addChild( shots[i].getTG() );
    }
   }  // konec metody: AmmoManager()


  public void fireBeam()
  // vystřelí paprsek, je-li k dispozici (volá se ze třídy KeyBehavior)
  { 
    for(int i=0; i < NUMBEAMS; i++) {
      if( shots[i].requestFiring() ) {
        // System.out.println("Vystřelen paprsek " + i);
        return;
      }
    }
   // System.out.println("Paprsek není k dispozici");
  }  // konec metody: fireBeam()


  private ImageComponent2D[] loadImages(String fNms, int numIms)
  /* načte obrázky exploze: všechny začínají přefixem fNms, a celkem je jich numIms. */
  {
    String filename;
    TextureLoader loader;
    ImageComponent2D[] ims = new ImageComponent2D[numIms];
    System.out.println("Načítám " + numIms + " textur ze " + fNms);
    for (int i=0; i < numIms; i++) {
      filename = new String(fNms + i + ".gif");
      loader = new TextureLoader(filename, null);
      ims[i] = loader.getImage();
      if(ims[i] == null)
        System.out.println("Načítání textury selhalo: " + filename);
    }
    return ims;
  }  // konec metody: loadImages()

}  // konec třídy: AmmoManager

