Adding a second player
This commit is contained in:
parent
0ac69d53a2
commit
12ce28ec38
1 changed files with 91 additions and 19 deletions
110
window.c
110
window.c
|
@ -47,19 +47,30 @@ static int _grilleH = 7;
|
||||||
typedef struct perso_t {
|
typedef struct perso_t {
|
||||||
float x, y, z;
|
float x, y, z;
|
||||||
} perso_t;
|
} perso_t;
|
||||||
perso_t _hero = { -10.0f, 0.0f, 0.0f };
|
|
||||||
|
/* Définition de nos deux joueurs */
|
||||||
|
perso_t _herosA = { -10.0f, 0.0f, 0.0f };
|
||||||
|
perso_t _herosB = { 10.0f, 0.0f, 0.0f };
|
||||||
|
|
||||||
/* clavier virtuel */
|
/* clavier virtuel */
|
||||||
enum {
|
enum {
|
||||||
VK_RIGHT = 0,
|
/* Héros A */
|
||||||
VK_UP,
|
VK_RIGHT = 0,
|
||||||
VK_LEFT,
|
VK_UP,
|
||||||
VK_DOWN,
|
VK_LEFT,
|
||||||
/* toujours à la fin */
|
VK_DOWN,
|
||||||
VK_SIZEOF
|
|
||||||
|
/* Héros B */
|
||||||
|
VK_d,
|
||||||
|
VK_z,
|
||||||
|
VK_q,
|
||||||
|
VK_s,
|
||||||
|
|
||||||
|
/* toujours à la fin */
|
||||||
|
VK_SIZEOF
|
||||||
};
|
};
|
||||||
|
|
||||||
int _vkeyboard[VK_SIZEOF] = {0, 0, 0, 0};
|
int _vkeyboard[VK_SIZEOF] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
/*!\brief paramètre l'application et lance la boucle infinie. */
|
/*!\brief paramètre l'application et lance la boucle infinie. */
|
||||||
int main(int argc, char ** argv) {
|
int main(int argc, char ** argv) {
|
||||||
|
@ -109,6 +120,12 @@ void init(void) {
|
||||||
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);
|
||||||
|
|
||||||
|
/* Affichage des textures */
|
||||||
|
enable_surface_option(_cube, SO_USE_TEXTURE);
|
||||||
|
|
||||||
|
/* Affichage des ombres */
|
||||||
|
enable_surface_option(_cube, SO_USE_LIGHTING);
|
||||||
|
|
||||||
/* si _use_vsync != 0, on active la synchronisation verticale */
|
/* si _use_vsync != 0, on active la synchronisation verticale */
|
||||||
if(_use_vsync)
|
if(_use_vsync)
|
||||||
SDL_GL_SetSwapInterval(1);
|
SDL_GL_SetSwapInterval(1);
|
||||||
|
@ -127,14 +144,25 @@ void idle(void) {
|
||||||
// pour le frame d'après, je mets à jour t0
|
// pour le frame d'après, je mets à jour t0
|
||||||
t0 = t;
|
t0 = t;
|
||||||
|
|
||||||
|
/* Mouvements du héros A */
|
||||||
if(_vkeyboard[VK_RIGHT])
|
if(_vkeyboard[VK_RIGHT])
|
||||||
_hero.x += 10.f * dt;
|
_herosA.x += 10.f * dt;
|
||||||
if(_vkeyboard[VK_UP])
|
if(_vkeyboard[VK_UP])
|
||||||
_hero.z -= 10.f * dt;
|
_herosA.z -= 10.f * dt;
|
||||||
if(_vkeyboard[VK_LEFT])
|
if(_vkeyboard[VK_LEFT])
|
||||||
_hero.x -= 10.f * dt;
|
_herosA.x -= 10.f * dt;
|
||||||
if(_vkeyboard[VK_DOWN])
|
if(_vkeyboard[VK_DOWN])
|
||||||
_hero.z += 10.f * dt;
|
_herosA.z += 10.f * dt;
|
||||||
|
|
||||||
|
/* Mouvements du héros B */
|
||||||
|
if(_vkeyboard[VK_d])
|
||||||
|
_herosB.x += 10.f * dt;
|
||||||
|
if(_vkeyboard[VK_z])
|
||||||
|
_herosB.z -= 10.f * dt;
|
||||||
|
if(_vkeyboard[VK_q])
|
||||||
|
_herosB.x -= 10.f * dt;
|
||||||
|
if(_vkeyboard[VK_s])
|
||||||
|
_herosB.z += 10.f * dt;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,11 +216,17 @@ void draw(void) {
|
||||||
transform_n_rasterize(_cube, nmv, projection_matrix);
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* on dessine le perso _hero */
|
/* on dessine le héros A */
|
||||||
/* on change la couleur */
|
|
||||||
_cube->dcolor = g;
|
_cube->dcolor = g;
|
||||||
memcpy(nmv, model_view_matrix, sizeof nmv);
|
memcpy(nmv, model_view_matrix, sizeof nmv);
|
||||||
translate(nmv, _hero.x, _hero.y, _hero.z);
|
translate(nmv, _herosA.x, _herosA.y, _herosA.z);
|
||||||
|
scale(nmv, _cubeSize / 2.0f, _cubeSize / 2.0f, _cubeSize / 2.0f);
|
||||||
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
|
|
||||||
|
/* on dessine le héros B */
|
||||||
|
_cube->dcolor = b;
|
||||||
|
memcpy(nmv, model_view_matrix, sizeof nmv);
|
||||||
|
translate(nmv, _herosB.x, _herosB.y, _herosB.z);
|
||||||
scale(nmv, _cubeSize / 2.0f, _cubeSize / 2.0f, _cubeSize / 2.0f);
|
scale(nmv, _cubeSize / 2.0f, _cubeSize / 2.0f, _cubeSize / 2.0f);
|
||||||
transform_n_rasterize(_cube, nmv, projection_matrix);
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
|
|
||||||
|
@ -207,7 +241,8 @@ void draw(void) {
|
||||||
/*!\brief intercepte l'événement clavier pour modifier les options (à l'appuie d'une touche). */
|
/*!\brief intercepte l'événement clavier pour modifier les options (à l'appuie d'une touche). */
|
||||||
void keyd(int keycode) {
|
void keyd(int keycode) {
|
||||||
switch(keycode) {
|
switch(keycode) {
|
||||||
case GL4DK_v: /* 'v' utiliser la sync Verticale */
|
/* 'v' utiliser la sync Verticale */
|
||||||
|
case GL4DK_v:
|
||||||
_use_vsync = !_use_vsync;
|
_use_vsync = !_use_vsync;
|
||||||
if(_use_vsync)
|
if(_use_vsync)
|
||||||
SDL_GL_SetSwapInterval(1);
|
SDL_GL_SetSwapInterval(1);
|
||||||
|
@ -215,6 +250,7 @@ void keyd(int keycode) {
|
||||||
SDL_GL_SetSwapInterval(0);
|
SDL_GL_SetSwapInterval(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/* Héros A */
|
||||||
case GL4DK_RIGHT:
|
case GL4DK_RIGHT:
|
||||||
_vkeyboard[VK_RIGHT] = 1;
|
_vkeyboard[VK_RIGHT] = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -231,14 +267,32 @@ void keyd(int keycode) {
|
||||||
_vkeyboard[VK_DOWN] = 1;
|
_vkeyboard[VK_DOWN] = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: break; // par défaut ne fais rien
|
/* Héros B */
|
||||||
|
case GL4DK_d:
|
||||||
|
_vkeyboard[VK_d] = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_z:
|
||||||
|
_vkeyboard[VK_z] = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_q:
|
||||||
|
_vkeyboard[VK_q] = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_s:
|
||||||
|
_vkeyboard[VK_s] = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Par défaut on ne fais rien */
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!\brief intercepte l'évènement clavier pour modifier les options (au relâchement d'une touche). */
|
/*!\brief intercepte l'évènement clavier pour modifier les options (au relâchement d'une touche). */
|
||||||
void keyu(int keycode) {
|
void keyu(int keycode) {
|
||||||
switch(keycode) {
|
switch(keycode) {
|
||||||
/* Cas où on arrête de bouger */
|
/* Cas où l'héros A on arrête de bouger */
|
||||||
case GL4DK_RIGHT:
|
case GL4DK_RIGHT:
|
||||||
_vkeyboard[VK_RIGHT] = 0;
|
_vkeyboard[VK_RIGHT] = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -255,7 +309,25 @@ void keyu(int keycode) {
|
||||||
_vkeyboard[VK_DOWN] = 0;
|
_vkeyboard[VK_DOWN] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: break; // par défaut on ne fais rien
|
/* Cas où l'héros A on arrête de bouger */
|
||||||
|
case GL4DK_d:
|
||||||
|
_vkeyboard[VK_d] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_z:
|
||||||
|
_vkeyboard[VK_z] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_q:
|
||||||
|
_vkeyboard[VK_q] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GL4DK_s:
|
||||||
|
_vkeyboard[VK_s] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Par défaut on ne fais rien */
|
||||||
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue