Add an head to the players
This commit is contained in:
parent
2901afc3d0
commit
4963b48398
1 changed files with 28 additions and 7 deletions
33
window.c
33
window.c
|
@ -30,6 +30,9 @@ static void sortie(void);
|
||||||
static surface_t * _cube = NULL;
|
static surface_t * _cube = NULL;
|
||||||
static float _cubeSize = 4.f;
|
static float _cubeSize = 4.f;
|
||||||
|
|
||||||
|
/*!\brief Surface représentant une sphère */
|
||||||
|
static surface_t * _sphere = NULL;
|
||||||
|
|
||||||
/* Variable d'état pour activer/désactiver la synchronisation verticale */
|
/* Variable d'état pour activer/désactiver la synchronisation verticale */
|
||||||
static int _use_vsync = 1;
|
static int _use_vsync = 1;
|
||||||
|
|
||||||
|
@ -127,16 +130,20 @@ void init(void) {
|
||||||
|
|
||||||
/* Création du cube */
|
/* Création du cube */
|
||||||
_cube = mk_cube(); /* ça fait 2x6 triangles */
|
_cube = mk_cube(); /* ça fait 2x6 triangles */
|
||||||
|
_sphere = mk_sphere(12, 12); /* ça fait 12x12 triangles */
|
||||||
|
|
||||||
/* Rajoute la texture */
|
/* Rajoute la texture */
|
||||||
id = get_texture_from_BMP("images/tex.bmp");
|
id = get_texture_from_BMP("images/tex.bmp");
|
||||||
set_texture_id(_cube, id);
|
set_texture_id(_cube, id);
|
||||||
|
set_texture_id(_sphere, id);
|
||||||
|
|
||||||
/* Affichage des textures */
|
/* Affichage des textures */
|
||||||
enable_surface_option(_cube, SO_USE_TEXTURE);
|
enable_surface_option(_cube, SO_USE_TEXTURE);
|
||||||
|
enable_surface_option(_sphere, SO_USE_TEXTURE);
|
||||||
|
|
||||||
/* Affichage des ombres */
|
/* Affichage des ombres */
|
||||||
enable_surface_option(_cube, SO_USE_LIGHTING);
|
enable_surface_option(_cube, SO_USE_LIGHTING);
|
||||||
|
enable_surface_option(_sphere, SO_USE_LIGHTING);
|
||||||
|
|
||||||
/* Si _use_vsync != 0, on active la synchronisation verticale */
|
/* Si _use_vsync != 0, on active la synchronisation verticale */
|
||||||
SDL_GL_SetSwapInterval(_use_vsync);
|
SDL_GL_SetSwapInterval(_use_vsync);
|
||||||
|
@ -183,7 +190,7 @@ void idle(void) {
|
||||||
if((_grille[coorDroiteA] == 0 || _grille[coorDroiteA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à droite du plateau
|
if((_grille[coorDroiteA] == 0 || _grille[coorDroiteA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à droite du plateau
|
||||||
_herosA.x += vitesse * dt;
|
_herosA.x += vitesse * dt;
|
||||||
if(_vkeyboard[VK_UP])
|
if(_vkeyboard[VK_UP])
|
||||||
if((_grille[coorHautA] == 0 || _grille[coorHautA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en haut plateau
|
if((_grille[coorHautA] == 0 || _grille[coorHautA] == 2) && (decalageLongueurA < decalageGB || decalageLongueurA > decalageDH)) // collision en haut du plateau
|
||||||
_herosA.z -= vitesse * dt;
|
_herosA.z -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_LEFT])
|
if(_vkeyboard[VK_LEFT])
|
||||||
if((_grille[coorGaucheA] == 0 || _grille[coorGaucheA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à gauche du plateau
|
if((_grille[coorGaucheA] == 0 || _grille[coorGaucheA] == 2) && (decalageLargeurA < decalageGB || decalageLargeurA > decalageDH)) // collision à gauche du plateau
|
||||||
|
@ -230,7 +237,7 @@ void idle(void) {
|
||||||
if((_grille[coorDroiteB] == 0 || _grille[coorDroiteB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à droite du plateau
|
if((_grille[coorDroiteB] == 0 || _grille[coorDroiteB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à droite du plateau
|
||||||
_herosB.x += vitesse * dt;
|
_herosB.x += vitesse * dt;
|
||||||
if(_vkeyboard[VK_z])
|
if(_vkeyboard[VK_z])
|
||||||
if((_grille[coorHautB] == 0 || _grille[coorHautB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en haut plateau
|
if((_grille[coorHautB] == 0 || _grille[coorHautB] == 3) && (decalageLongueurB < decalageGB || decalageLongueurB > decalageDH)) // collision en haut du plateau
|
||||||
_herosB.z -= vitesse * dt;
|
_herosB.z -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_q])
|
if(_vkeyboard[VK_q])
|
||||||
if((_grille[coorGaucheB] == 0 || _grille[coorGaucheB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à gauche du plateau
|
if((_grille[coorGaucheB] == 0 || _grille[coorGaucheB] == 3) && (decalageLargeurB < decalageGB || decalageLargeurB > decalageDH)) // collision à gauche du plateau
|
||||||
|
@ -259,7 +266,9 @@ void idle(void) {
|
||||||
|
|
||||||
/*!\brief Fonction appelée à chaque display. */
|
/*!\brief Fonction appelée à chaque display. */
|
||||||
void draw(void) {
|
void draw(void) {
|
||||||
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1} /* Gris */, couleurHerosA = {0.15, 0.5, 0.15, 1} /* Vert */, couleurHerosB = {0.2, 0.2, 0.7, 1} /* Bleu */;
|
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1} /* Gris */,
|
||||||
|
couleurHerosA = {0.15, 0.5, 0.15, 1} /* Vert */,
|
||||||
|
couleurHerosB = {0.2, 0.2, 0.7, 1} /* Bleu */;
|
||||||
|
|
||||||
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
||||||
|
|
||||||
|
@ -290,7 +299,7 @@ void draw(void) {
|
||||||
for(int j = 0; j < _grilleH; ++j)
|
for(int j = 0; j < _grilleH; ++j)
|
||||||
if(_grille[i * _grilleW + j] == 1) {
|
if(_grille[i * _grilleW + j] == 1) {
|
||||||
/* copie model_view_matrix dans nmv */
|
/* copie model_view_matrix dans nmv */
|
||||||
memcpy(nmv, model_view_matrix, sizeof nmv);
|
memcpy(nmv, model_view_matrix, sizeof(nmv));
|
||||||
|
|
||||||
/* pour convertir les coordonnées i, j de la grille en x, z du monde */
|
/* pour convertir les coordonnées i, j de la grille en x, z du monde */
|
||||||
translate(nmv, _cubeSize * j + cX, 0.0f, _cubeSize * i + cZ);
|
translate(nmv, _cubeSize * j + cX, 0.0f, _cubeSize * i + cZ);
|
||||||
|
@ -300,17 +309,23 @@ void draw(void) {
|
||||||
|
|
||||||
/* Dessine le héros A */
|
/* Dessine le héros A */
|
||||||
_cube->dcolor = couleurHerosA;
|
_cube->dcolor = couleurHerosA;
|
||||||
memcpy(nmv, model_view_matrix, sizeof nmv);
|
_sphere->dcolor = couleurHerosA;
|
||||||
|
memcpy(nmv, model_view_matrix, sizeof(nmv));
|
||||||
translate(nmv, _herosA.x, _herosA.y, _herosA.z);
|
translate(nmv, _herosA.x, _herosA.y, _herosA.z);
|
||||||
scale(nmv, _cubeSize / 3.0f, _cubeSize / 3.0f, _cubeSize / 3.0f);
|
scale(nmv, _cubeSize / 3.0f, _cubeSize / 3.0f, _cubeSize / 3.0f);
|
||||||
transform_n_rasterize(_cube, nmv, projection_matrix);
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
|
translate(nmv, 0.0f, 2.0f, 0.0f);
|
||||||
|
transform_n_rasterize(_sphere, nmv, projection_matrix);
|
||||||
|
|
||||||
/* Dessine le héros B */
|
/* Dessine le héros B */
|
||||||
_cube->dcolor = couleurHerosB;
|
_cube->dcolor = couleurHerosB;
|
||||||
memcpy(nmv, model_view_matrix, sizeof nmv);
|
_sphere->dcolor = couleurHerosB;
|
||||||
|
memcpy(nmv, model_view_matrix, sizeof(nmv));
|
||||||
translate(nmv, _herosB.x, _herosB.y, _herosB.z);
|
translate(nmv, _herosB.x, _herosB.y, _herosB.z);
|
||||||
scale(nmv, _cubeSize / 3.0f, _cubeSize / 3.0f, _cubeSize / 3.0f);
|
scale(nmv, _cubeSize / 3.0f, _cubeSize / 3.0f, _cubeSize / 3.0f);
|
||||||
transform_n_rasterize(_cube, nmv, projection_matrix);
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
|
translate(nmv, 0.0f, 2.0f, 0.0f);
|
||||||
|
transform_n_rasterize(_sphere, nmv, projection_matrix);
|
||||||
|
|
||||||
/* Déclare que l'on a changé des pixels de l'écran (bas niveau) */
|
/* Déclare que l'on a changé des pixels de l'écran (bas niveau) */
|
||||||
gl4dpScreenHasChanged();
|
gl4dpScreenHasChanged();
|
||||||
|
@ -425,6 +440,12 @@ void sortie(void) {
|
||||||
_cube = NULL;
|
_cube = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* on libère la sphère */
|
||||||
|
if(_sphere) {
|
||||||
|
free_surface(_sphere);
|
||||||
|
_sphere = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* libère tous les objets produits par GL4Dummies, ici
|
/* libère tous les objets produits par GL4Dummies, ici
|
||||||
* principalement les screen */
|
* principalement les screen */
|
||||||
gl4duClean(GL4DU_ALL);
|
gl4duClean(GL4DU_ALL);
|
||||||
|
|
Reference in a new issue