#include "marbleball.h"
void MarbleBall::init_posizione(float x, float y, float z)
{
vet_compon_controllo.Zero();
vet_posizione[0]= x + 0.5;
vet_posizione[1]= y + 0.5;
vet_posizione[2]= z + 0.5;
palla_viva=true; // setta la palla viva
muro_di_morte = 4; //inizializza la var che determina se la pallina si e' spiaccicata su un muro(0..3) o sul pavimento (4)
vet_velocita.Zero();
}
void MarbleBall::Draw(int option)
{
Point3f zero;
zero[XX]=0;
zero[YY]=0;
zero[ZZ]=0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]);
glBindTexture(GL_TEXTURE_2D,ti);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
if (palla_viva)
{
glRotatef(angolo_rotazione,vettore_rotazione[0],vettore_rotazione[1],vettore_rotazione[2]);
switch(option) {
case SOLID:
glDisable(GL_TEXTURE_2D);
case TEXTURED:
CreateSphere(zero,0.5,30);
break;
default:
CreateSphere(zero,0.35,30);
case WIREFRAME:
//glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75);
// glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75);
glDisable(GL_TEXTURE_2D);
glutWireSphere(0.5,10,10);
//glTranslatef(-vet_posizione[0],-vet_posizione[1],-vet_posizione[2]-0.75);
break;
}
glEnable(GL_TEXTURE_2D);
}
else
{ glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.5,0,0.5);
switch (muro_di_morte)
{
case 0:
glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]-0.75);
break;
case 1:
glTranslatef(vet_posizione[0]+0.75,vet_posizione[1],vet_posizione[2]);
glRotatef(90,0,1,0);
// zero[XX]=+0.75;
break;
case 2:
glTranslatef(vet_posizione[0],vet_posizione[1],vet_posizione[2]+0.75);
//glRotatef(90,1,0,0);
// zero[ZZ]=+0.75;
break;
case 3:
glTranslatef(vet_posizione[0]-0.75,vet_posizione[1],vet_posizione[2]);
glRotatef(90,0,1,0);
break;
case 4:
glTranslatef(vet_posizione[0],vet_posizione[1]-0.5,vet_posizione[2]);
glRotatef(90,1,0,0);
break;
}
CreateSphere(zero,0.5,30);
glDisable(GL_TEXTURE_2D);
glutSolidTorus(0.35,0.25,20,20);
}
}
MarbleBall::MarbleBall(void)
{
float circonferenza = 0.5*0.5*M_PI;
angolo_rotazione=0.0;
lung_arco_per_grado =circonferenza/360.0;
attrito=ATTRITONORMALE;
tocca_mappa_piana = true;
tocca_mappa_inclinata = true;
}
MarbleBall::~MarbleBall(void)
{
}