#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)
{
}