
// BoidShape.java
// Andrew Davison, April 2005, ad@fivedots.coe.psu.ac.th
// Sirinart Sakarin, March 2003, s4210315@calvin.coe.psu.ac.th

/* Agent je reprezentován objektem typu IndexedTriangleArray,
   s barvou těla stanovenou jako argument konstruktoru. Na souřadnici
   čela (nosu) má tvar nachovou barvu.

   Agent je ve tvaru špice s dlouho tenkou podstavou a malou výškou.

   Během provádění programu neměníme souřadnice tvaru (např. jeho velikost)
   ani barvu, takže rozhraní GeometryUpdater nevyužíváme.

   Tvar dále nemění ani svou uzlovou komponentu Appearance.
*/

import javax.media.j3d.*;
import javax.vecmath.*;


public class BoidShape extends Shape3D 
{
  private static final int NUM_VERTS = 4;
  private static final int NUM_INDICES = 12;
  private static final Color3f purple = new Color3f(0.5f, 0.2f, 0.8f);


  public BoidShape(Color3f col) 
  {
    IndexedTriangleArray plane = 
        new IndexedTriangleArray(NUM_VERTS, 
            GeometryArray.COORDINATES | GeometryArray.COLOR_3, 
            NUM_INDICES );

    // souřadnice tvaru
    Point3f[] pts = new Point3f[NUM_VERTS];
    pts[0] = new Point3f(0.0f, 0.0f, 0.25f);
    pts[1] = new Point3f(0.2f, 0.0f, -0.25f);
    pts[2] = new Point3f(-0.2f, 0.0f, -0.25f);
    pts[3] = new Point3f(0.0f, 0.25f, -0.2f);

    // stěnu polygonu definujeme proti směru hodinových ručiček
    int[] indices = {
       2, 0, 3,      // levá stěna
       2, 1, 0,      // dolní stěna
       0, 1, 3,      // pravá stěna
       1, 2, 3  };   // zadní stěna

	plane.setCoordinates(0, pts);
    plane.setCoordinateIndices(0, indices);

    // the shape's vertex colours
    Color3f[] cols = new Color3f[NUM_VERTS];
    cols[0] = purple;   // a purple nose
	for (int i=1; i < NUM_VERTS; i++)
	  cols[i] = col;

	plane.setColors(0,cols);
    plane.setColorIndices(0, indices);

    setGeometry(plane);
  }  // konec metody: BoidShape()


} // konec třídy: BoidShape
