#include <cubedraw2d.h>
#include <graphmisc.h>


cubedraw2d::cubedraw2d
(
  cube const & cb_, 
  doublec dx_
)
  : cbd(cb_), dx(dx_) {}

void cubedraw2d::writeface(uintc i)
{
  double x;
  double y = 3.0*dx;

  uint index = i*9;

  glBegin(GL_TRIANGLES);

  for (uint k=0; k<3; ++k)
  {
    x=0.0;
    for (uint w=0; w<3; ++w)
    {
      // Write the square
      // x,y point to top left of square.

      //cbd.colorset(cb.x[index]);
      cbd.colorset(index);

      glVertex2d(x,y);
      glVertex2d(x,y-dx);
      glVertex2d(x+dx,y);

      glVertex2d(x+dx,y);
      glVertex2d(x,y-dx);
      glVertex2d(x+dx,y-dx);

      x += dx;
      ++index;
    }
    y -= dx;
  }

  glEnd();
}


void cubedraw2d::draw()
{
cout << "TODO look at cubedraw2d::draw()" << endl;

  glPushMatrix();
  glLoadIdentity();

  glPushAttrib(GL_CURRENT_BIT);
  glPushAttrib(GL_LIGHTING_BIT);

  doublec w = dx * 3.0;

  doublec xlen = 25.0;
  doublec ylen = 0.75*xlen;
  gluOrtho2D(0.0,xlen,0.0,ylen);

  doublec x0(0.4*xlen);
  doublec y0(0.3*ylen);

  glPushMatrix();

  glDisable(GL_LIGHTING);

  glTranslated(x0,y0,0.0);
  writeface(0);

  // Broken code to draw the cursor.
  cursor const & cs(cbd.cb.cs);
  double y = dx/3.0;
  glTranslated((dx-y)*0.5+cs.j*dx,dx*0.4+cs.k*dx,0.01);

  {
    glBegin(GL_TRIANGLES);

    glColor3f(1.0,0.0,0.0);
    glVertex2d(0.0,0.0);

    glColor3f(1.0,0.0,0.0);
    glVertex2d(y,0.0);
  
    glColor3f(0.0,0.0,1.0);
    glVertex2d(y*0.5,y*0.866);

    glEnd();
  }
  glPopMatrix();


  glPushMatrix();
  glTranslated(x0+w,y0,0.0);
  writeface(1);
  glPopMatrix();

  glPushMatrix();
  glTranslated(x0-w,y0,0.0);
  writeface(3);
  glPopMatrix();

  glPushMatrix();
  glTranslated(x0+2.0*w,y0,0.0);
  writeface(2);
  glPopMatrix();

  glPushMatrix();
  glTranslated(x0,y0+w,0.0);
  writeface(5);
  glPopMatrix();

  glPushMatrix();
  glTranslated(x0,y0-w,0.0);
  writeface(4);
  glPopMatrix();


  glPopAttrib();
  glPopAttrib();

  glerrordisplay();

  glPopMatrix();

}






