#pragma once #include "MadUtility.h" #include "MadMap.h" #include "marbletriangle.h" #define M_PI 3.14159265358979323846 #define G -160.0 #define VELOCITA_DI_MORTE 3500 #define ATTRITONORMALE 7 //norma del vettore attrito relativo alla tile standard da dimenzionare #define ATTRITOGHIACCIO 2 #define ATTRITOSABBIA 20 #define RAGGIO_SENSORIALE 7 using namespace std; using namespace vcg; //==============MarbleSphere============ //Sfera la classe "base" per le palline //====================================== class MarbleSphere { public: //===================================================== //Angolo di rotazione in funzione della velocita //===================================================== float angolo_rotazione; //===================================================== //settore circolare che corrisponde ad un grado di //rotazione della sfera //===================================================== float lung_arco_per_grado; //===================================================== //asse di rotazione in funzione della direzione //di spostamento //===================================================== Point3f vettore_rotazione; //===================================================== //posizione del centro della palla //===================================================== Point3f vet_posizione; //===================================================== //vettore velocita' del passo precedente //===================================================== Point3f vet_velocita; //===================================================== //norma del vettore velocita' del passo precedente //===================================================== float normavel; //===================================================== //vettore attrito in funzione della direzione e norma //della velocita //===================================================== Point3f vet_compon_vel_attrito; //===================================================== //vettore determinato dalla componente di controllo //(mouse ,intelligenza,...) //===================================================== Point3f vet_compon_controllo; //===================================================== //vettore gravita //===================================================== Point3f vet_compon_vel_gravita; //===================================================== //vettore reazione al piano //===================================================== Point3f vet_compon_vel_reazione; //===================================================== //vettore velocita' risultante a partire dalla //precedente e da tutte le componenti calcolate //nel passo attuale //===================================================== Point3f vel_risultante; //===================================================== //triangolo su cui si trova la pallina //===================================================== MarbleTriangle triangolo; //===================================================== //texture //===================================================== UINT ti; //===================================================== //indica se la sfera e' a contatto con la mappa //e la mappa e' orizzontale //===================================================== bool tocca_mappa_piana; //===================================================== ////indica se la sfera e' a contatto con la mappa //e la mappa e' inclinata //===================================================== bool tocca_mappa_inclinata; //===================================================== //norma del vettore attrito da sottrarre alla norma //della velocita' risultante //===================================================== float norma_attrito; //===================================================== //vettore posizione del frame precedente per il calcolo //del collision detection //===================================================== Point3f old_vet_pos; //===================================================== //per memorizzare il valore dell'attrito della tile su //cui si trova la sfera //===================================================== int attrito; //===================================================== //vettore posizione risultante //===================================================== Point3f vet_pos_ris; //===================================================== //norma del vettore posizione risultante //===================================================== float normavettpos; //===================================================== //lunghezza dello spostamento //===================================================== float normapos; //===================================================== //indica se la palla e' viva //===================================================== bool palla_viva ; //===================================================== //var che determina i casi di morte della della draw //===================================================== int muro_di_morte ; public: //=================init_posizione===================== //inizializza il vettore posizione a partire dalle<br> // coordinate della tile start della mappa <br> //==================================================== void init_posizione(float x, float y, float z); //=================Draw=============================== //disegno della sfera e gestione dei casi di morte<br> //==================================================== void Draw(int option); //=================Rotate============================= //rotazione della sfera <br> //==================================================== void Rotate(float dt); //=================Update============================= //calcolo della fisica e del collision det <br> //==================================================== void Update (MadMap *mp, float dt); //=================CreateSphere======================= //disegna una sfera centrata in c di raggio r <br> // e n numero di poligoni <br> //==================================================== void CreateSphere(Point3f c,double r,int n); //===================MarbleSphere===================== //Costruttore Oggetto <br> //==================================================== MarbleSphere(void); //===================~MarbleSphere==================== //Distruttore Oggetto <br> //==================================================== ~MarbleSphere(void); //===================setTexture======================= //Inizializza e setta l'ambiente per il texturing <br> //==================================================== void setTexture(char *str); };