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

/* Pálka se může pohybovat pouze horizontálně, podél podlahy.
   Ovládá se pomocí kurzorových kláves nebo stisky tlačítek myši.
   
   Pokud opustí jednu stranu panelu, objeví se na druhé.

   Pálce přiřazujeme sadu obrázků (mravenec) směřujících vlevo a
   vpravo, které se cyklicky střídají.

   Obrázyk mravence pocházejí od Ari Feldmana z knihovny spritů SpriteLib 
   na adrese http://www.arifeldman.com/games/spritelib.html
*/


public class BatSprite extends Sprite
{
  private static double DURATION = 0.5;  // sekundy
    // celkový čas průchodu všemi obrázky

  private static final int FLOOR_DIST = 41;   
      // vzálenost horní části mravence od země
  private static final int XSTEP = 10;   
     // přírustky pro pohyb spritu ve směru osy x


  private int period;
   /* v milisekundách. animační interval hry používaný
      při cyklickém průchodu obrázky pálky směřující vlevo a vpravo. */


  public BatSprite(int w, int h, ImagesLoader imsLd, int p) 
  { 
    super( w/2, h-FLOOR_DIST, w, h, imsLd, "leftBugs2"); 
                     // umístěn ve spodní části panelu uprostřed
    period = p;
    setStep(0,0);  // žádný pohyb
  } // konec konstrukoru: BatSprite()


  public void moveLeft()
  // zahájí pohyb mravence vlevo
  { 
    setStep(-XSTEP, 0);
    setImage("leftBugs2");
    loopImage(period, DURATION);   // cyklicky procházej obrázky leftBugs2
  } // konec metody: moveLeft()


  public void moveRight()
  // zahájí přesun mravence vpravo
  { 
    setStep(XSTEP, 0); 
    setImage("rightBugs2");
    loopImage(period, DURATION);  // cyklicky procházej obrázky rightBugs2
  } // konec metody: moveRight()


  public void stayStill()
  // zastaví pohyb mravence
  { setStep(0, 0); 
    stopLooping();
  }


  public void updateSprite() 
  // umožní procházení mravence skrze stěny na druhou stranu
  {
    if ((locx+getWidth() <= 0) && (dx < 0))   // téměř za levou stěnou
      locx = getPWidth()-1;      // zobrazíme jej na praví straně
    else if ((locx >= getPWidth()-1) && (dx > 0))  // zmizel za pravou stěnou
      locx = 1 - getWidth();     // zobrazíme jej na levé straně

    super.updateSprite();
  } // konec metody: updateSprite()



  public void mouseMove(int xCoord)
  // zahájí pohyb mravence dle stisku tlačítka myši
  {
   if (xCoord < locx)  // ke klepnutí myší došlo nalevo od pálky
     moveLeft();       // jdi s pálkou vlevo
   else if (xCoord > (locx + getWidth()))  // ke kliknutí došlo napravo of the bat
     moveRight();      // jdi s pálkou vpravo
   else
     stayStill();
  }  // konec metody: moveMove()

}  // konec třídy: BatSprite
