✨ Add wall collision
This commit is contained in:
parent
5fbc3cc0e5
commit
4452a04ac8
1 changed files with 26 additions and 27 deletions
53
window.c
53
window.c
|
@ -28,7 +28,7 @@ static void sortie(void);
|
||||||
|
|
||||||
/*!\brief Surface représentant un cube */
|
/*!\brief Surface représentant un cube */
|
||||||
static surface_t * _cube = NULL;
|
static surface_t * _cube = NULL;
|
||||||
static float _cubeSize = 4.0f;
|
static float _cubeSize = 4.f;
|
||||||
|
|
||||||
/* 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;
|
||||||
|
@ -146,41 +146,40 @@ void idle(void) {
|
||||||
/* pour le frame d'après, mets à-jour t0 */
|
/* pour le frame d'après, mets à-jour t0 */
|
||||||
t0 = t;
|
t0 = t;
|
||||||
|
|
||||||
|
float vitesse = 10.f;
|
||||||
/* Mouvements du héros A */
|
/* Mouvements du héros A */
|
||||||
float zA = (float)((_herosA.z + _cubeSize * _grilleH / 2) / _cubeSize); // ligne - hauteur
|
float zA = (float)((_herosA.z + _cubeSize * _grilleH / 2) / _cubeSize); // ligne - hauteur
|
||||||
float xA = (float)((_herosA.x + _cubeSize * _grilleW / 2) / _cubeSize); // colonne - longueur
|
float xA = (float)((_herosA.x + _cubeSize * _grilleW / 2) / _cubeSize); // colonne - longueur
|
||||||
int positionA = (int)(zA + .5f) * _grilleH + (int)(xA + .5f); // position dans la grille
|
|
||||||
if(_vkeyboard[VK_RIGHT])
|
if(_vkeyboard[VK_RIGHT])
|
||||||
if(xA < (_grilleW - 2)) // collision à droite du plateau
|
if(_grille[(int)(zA + .5f) * _grilleH + (int)(xA + 1.f)] == 0) // collision à droite du plateau
|
||||||
_herosA.x += 10.f * dt;
|
_herosA.x += vitesse * dt;
|
||||||
if(_vkeyboard[VK_UP]) // collision en haut plateau
|
if(_vkeyboard[VK_UP])
|
||||||
if(zA > 1.f)
|
if(_grille[(int)zA * _grilleH + (int)(xA + .5f)] == 0) // collision en haut plateau
|
||||||
_herosA.z -= 10.f * dt;
|
_herosA.z -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_LEFT]) // collision à gauche du plateau
|
if(_vkeyboard[VK_LEFT])
|
||||||
if(xA > 1.f)
|
if(_grille[(int)(zA + .5f) * _grilleH + (int)xA] == 0) // collision à gauche du plateau
|
||||||
_herosA.x -= 10.f * dt;
|
_herosA.x -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_DOWN]) // collision en bas du plateau
|
if(_vkeyboard[VK_DOWN])
|
||||||
if(zA < (_grilleH - 2))
|
if(_grille[(int)(zA + 1.f) * _grilleH + (int)(xA + .5f)] == 0) // collision en bas du plateau
|
||||||
_herosA.z += 10.f * dt;
|
_herosA.z += vitesse * dt;
|
||||||
printf("\n=============== Héros A ===============\nli = %f, col = %f, pos = %d\n", zA, xA, positionA);
|
printf("\n=========== Héros A ===========\n li = %d, col = %d\n", (int)(zA + .5f), (int)(xA + .5f));
|
||||||
|
|
||||||
/* Mouvements du héros B */
|
/* Mouvements du héros B */
|
||||||
float zB = (float)((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize); // ligne - hauteur
|
float zB = (float)((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize); // ligne - hauteur
|
||||||
float xB = (float)((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize); // colonne - longueur
|
float xB = (float)((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize); // colonne - longueur
|
||||||
int positionB = (int)(zB + .5f) * _grilleH + (int)(xB + .5f); // position dans la grille
|
|
||||||
if(_vkeyboard[VK_d])
|
if(_vkeyboard[VK_d])
|
||||||
if(xB < (_grilleW - 2)) // collision à droite du plateau
|
if(_grille[(int)(zB + .5f) * _grilleH + (int)(xB + 1.f)] == 0) // collision à droite du plateau
|
||||||
_herosB.x += 10.f * dt;
|
_herosB.x += vitesse * dt;
|
||||||
if(_vkeyboard[VK_z]) // collision en haut plateau
|
if(_vkeyboard[VK_z])
|
||||||
if(zB > 1.f)
|
if(_grille[(int)zB * _grilleH + (int)(xB + .5f)] == 0) // collision en haut plateau
|
||||||
_herosB.z -= 10.f * dt;
|
_herosB.z -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_q]) // collision à gauche du plateau
|
if(_vkeyboard[VK_q])
|
||||||
if(xB > 1.f)
|
if(_grille[(int)(zB + .5f) * _grilleH + (int)xB] == 0) // collision à gauche du plateau
|
||||||
_herosB.x -= 10.f * dt;
|
_herosB.x -= vitesse * dt;
|
||||||
if(_vkeyboard[VK_s]) // collision en bas du plateau
|
if(_vkeyboard[VK_s])
|
||||||
if(zB < (_grilleH - 2))
|
if(_grille[(int)(zB + 1.f) * _grilleH + (int)(xB + .5f)] == 0) // collision en bas du plateau
|
||||||
_herosB.z += 10.f * dt;
|
_herosB.z += vitesse * dt;
|
||||||
printf("=============== Héros B ===============\nli = %f, col = %f, pos = %d\n=======================================\n", zB, xB, positionB);
|
printf("=========== Héros B ===========\n li = %d, col = %d\n===============================\n", (int)(zB + .5f), (int)(xB + .5f));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!\brief Fonction appelée à chaque display. */
|
/*!\brief Fonction appelée à chaque display. */
|
||||||
|
|
Reference in a new issue