#include "Cube.h"
#include "PolyVertex.h"


const int fltsPerVert = sizeof(PolyVertex) / sizeof(GLfloat);
const int trisPerCube = 12;
const int vertsPerCube = 3*trisPerCube;


Cube::Cube()
{
  m_baseCubeData.resize(fltsPerVert * vertsPerCube);

  // A cube instance
  // Probably don't need to do this every reset
  for (int j = 0; j < 6; j++) {
    for (int i = 0; i < 6; i++) {
      int p = (j*6+i)*fltsPerVert;
      for (int k = 0; k < fltsPerVert; k++)
        m_baseCubeData[p+k] = 0.0f;
      float vals1[6][6] = { {  0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f }, { -0.5f,-0.5f,-0.5f,-0.5f,-0.5f,-0.5f }, { 0.5f,-0.5f, 0.5f, 0.5f,-0.5f,-0.5f },
        { -0.5f, 0.5f,-0.5f,-0.5f, 0.5f, 0.5f }, { -0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f }, { 0.5f, 0.5f,-0.5f,-0.5f, 0.5f,-0.5f } };
      float *valsx[6] = { vals1[0], vals1[2], vals1[1], vals1[3], vals1[2], vals1[2] };
      float *valsy[6] = { vals1[3], vals1[0], vals1[2], vals1[1], vals1[5], vals1[4] };
      float *valsz[6] = { vals1[4], vals1[4], vals1[4], vals1[4], vals1[0], vals1[1] };
      m_baseCubeData[p+0] = valsx[j][i];
      m_baseCubeData[p+1] = valsy[j][i];
      m_baseCubeData[p+2] = valsz[j][i];
      int nsi[6] = {  0,  1,  0,  1,  2,  2 };
      int nsv[6] = {  1,  1, -1, -1,  1, -1 };
      m_baseCubeData[p+8+nsi[j]] = float(nsv[j]);
      m_baseCubeData[p+12] = 1.0;
      m_baseCubeData[p+13] = 1.0;

      m_baseCubeData[p+20] = ((i%3)==0) ? 1.0 : 0.0;
      m_baseCubeData[p+21] = ((i%3)==1) ? 1.0 : 0.0;
      m_baseCubeData[p+22] = ((i%3)==2) ? 1.0 : 0.0;
      m_baseCubeData[p+23] = 1.0;
    }
  }
}


