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

/* Třídu TexturedFloor tvoří jediný objekt typu TexturedPlane vyplněný
   čtyřúhelníky, jejichž souřadnice jdou od FLOOR_LEN/2 do -FLOOR_LEN/2 
   po krocích délky STEP podél os x a z.

   Textury pocházejí z obrázku FLOOR_IMG.
   Všechny normálové vektory u souřadnic podlahy směřujíc vzhůru.
*/

import javax.media.j3d.*;
import javax.vecmath.*;
import java.util.ArrayList;


public class TexturedFloor
{
  private final static int FLOOR_LEN = 80;  // mělo by být sudé
  private final static int STEP = 4;  // mělo by dělit hodnotu FLOOR_LEN

  private final static String FLOOR_IMG = "images/stone.jpg";

  private BranchGroup floorBG;  // rodič uzlu typu TexturedPlane


  public TexturedFloor()
  // vytvoří souřadnice čtyřúhelníka, objekt typu TexturedPlane a přidá jej k uzlu floorBG
  {
    ArrayList coords = new ArrayList();
    floorBG = new BranchGroup();

    // vytvoř souřadnice čtyřúhelníků
    for(int z=FLOOR_LEN/2; z >= (-FLOOR_LEN/2)+STEP; z-=STEP) {  // zepředu dozadu
      for(int x=-FLOOR_LEN/2; x <= (FLOOR_LEN/2)-STEP; x+=STEP)  // zleva doprava
          createCoords(x, z, coords);
    }

    Vector3f upNormal = new Vector3f(0.0f, 1.0f, 0.0f);   // směřuje vzhůru
    floorBG.addChild( new TexturedPlane(coords, FLOOR_IMG, upNormal) );
  }  // konec metody: TexturedFloor()


  private void createCoords(int x, int z, ArrayList coords)
  {
    // body vytvořené proti směru hodinových ručiček počínaje levým předním po
    // krocích délky STEP
    Point3f p1 = new Point3f(x, 0.0f, z);   
    Point3f p2 = new Point3f(x+STEP, 0.0f, z);
    Point3f p3 = new Point3f(x+STEP, 0.0f, z-STEP);
    Point3f p4 = new Point3f(x, 0.0f, z-STEP);
    coords.add(p1); coords.add(p2); 
    coords.add(p3); coords.add(p4);
  }  // konec metody: createCoords()


  public BranchGroup getBG()
  {  return floorBG;  }

}  // konec třídy: TexturedFloor

