Changes
- Added destrucible blocs (they are not spawn yet) - Zoom decrease when map increase - Increase default map size
This commit is contained in:
parent
55abb736c3
commit
3b6d1fbb38
1 changed files with 36 additions and 21 deletions
57
window.c
57
window.c
|
@ -34,31 +34,37 @@ static float _cubeSize = 4.f;
|
||||||
/*!\brief Surface représentant une sphère */
|
/*!\brief Surface représentant une sphère */
|
||||||
static surface_t * _sphere = NULL;
|
static surface_t * _sphere = NULL;
|
||||||
|
|
||||||
/* Variable d'état pour activer/désactiver la synchronisation verticale */
|
/*!\brief Variable d'état pour activer/désactiver la synchronisation verticale */
|
||||||
static int _use_vsync = 1;
|
static int _use_vsync = 1;
|
||||||
|
|
||||||
/* Variable d'état pour activer/désactiver le debug */
|
/*!\brief Variable d'état pour activer/désactiver le debug */
|
||||||
static int _debug = 0;
|
static int _debug = 0;
|
||||||
|
|
||||||
/* Grille de positions où il y aura des cubes
|
/*!\brief Grille de positions où il y aura des cubes
|
||||||
* 0 -> Vide
|
* 0 -> Vide
|
||||||
* 1 -> Mur
|
* 1 -> Mur
|
||||||
* 2 (valeur reservée) -> Joueur A (défini automatiquement par le programme)
|
* 2 (valeur reservée) -> Joueur A (défini automatiquement par le programme)
|
||||||
* 3 (valeur reservée) -> Joueur B (défini automatiquement par le programme) */
|
* 3 (valeur reservée) -> Joueur B (défini automatiquement par le programme)
|
||||||
|
* 4 -> Bloc destructible */
|
||||||
static int * _grille = NULL;
|
static int * _grille = NULL;
|
||||||
|
|
||||||
|
/*!\brief Largeur/Nombre de lignes de la grille */
|
||||||
static int _grilleW;
|
static int _grilleW;
|
||||||
|
|
||||||
|
/*!\brief Hauteur/Nombre de colonnes de la grille */
|
||||||
static int _grilleH;
|
static int _grilleH;
|
||||||
|
|
||||||
/* Définition d'un personnage */
|
/* Définition d'un personnage */
|
||||||
typedef struct perso_t {
|
typedef struct perso_t {
|
||||||
float x, y, z; // coordonées
|
float x, y, z; /* Coordonées spatiale */
|
||||||
int position; // position dans la grille
|
int position; /* Position dans la grille.
|
||||||
surface_t * perso; // objet
|
* Permet d'éviter aux joueurs
|
||||||
|
* de se rentrer dedans */
|
||||||
} perso_t;
|
} perso_t;
|
||||||
|
|
||||||
/* Définition de nos deux joueurs */
|
/* Définition de nos deux joueurs */
|
||||||
perso_t _herosA = { 4.f, 0.f, -6.f, -1, NULL }; // à droite
|
perso_t _herosA = { 0.f, 0.f, 0.f, -1 }; // à droite
|
||||||
perso_t _herosB = { -4.f, 0.f, -1.f, -1, NULL }; // à gauche
|
perso_t _herosB = { 0.f, 0.f, 6.f, -1 }; // à gauche
|
||||||
|
|
||||||
/* Clavier virtuel */
|
/* Clavier virtuel */
|
||||||
enum {
|
enum {
|
||||||
|
@ -145,11 +151,9 @@ void init(void) {
|
||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
* Génération pour _grilleH aléatoire aussi
|
* Éloigner les spawns des joueurs */
|
||||||
* Éloigner les spawns des joueurs
|
|
||||||
* Zoom de la caméra en fonction de la taille de la map */
|
|
||||||
|
|
||||||
_grilleW = 10 + (rand() % 10);
|
_grilleW = 15 + (rand() % 10);
|
||||||
_grilleH = _grilleW;
|
_grilleH = _grilleW;
|
||||||
|
|
||||||
if ((_grille = malloc((_grilleW * _grilleH) * sizeof(int))) == NULL) {
|
if ((_grille = malloc((_grilleW * _grilleH) * sizeof(int))) == NULL) {
|
||||||
|
@ -197,10 +201,8 @@ void init(void) {
|
||||||
* 0 x 0
|
* 0 x 0
|
||||||
* 0 0 0 */
|
* 0 0 0 */
|
||||||
|
|
||||||
// Coordonnées joueurs
|
|
||||||
int caseJoueurA = round((_herosA.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosA.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
int caseJoueurA = round((_herosA.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosA.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
||||||
int caseJoueurB = round((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
int caseJoueurB = round((_herosB.z + _cubeSize * _grilleH / 2) / _cubeSize) * _grilleH + round((_herosB.x + _cubeSize * _grilleW / 2) / _cubeSize);
|
||||||
|
|
||||||
for (int i = 1; i <= 2; i++) { // attention au bordures
|
for (int i = 1; i <= 2; i++) { // attention au bordures
|
||||||
/* Joueur A */
|
/* Joueur A */
|
||||||
_grille[caseJoueurA - i] = 0; // gauche
|
_grille[caseJoueurA - i] = 0; // gauche
|
||||||
|
@ -335,7 +337,8 @@ void idle(void) {
|
||||||
void draw(void) {
|
void draw(void) {
|
||||||
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1} /* Gris */,
|
vec4 couleurPlateau = {0.2, 0.2, 0.2, 1} /* Gris */,
|
||||||
couleurHerosA = {0.15, 0.5, 0.15, 1} /* Vert */,
|
couleurHerosA = {0.15, 0.5, 0.15, 1} /* Vert */,
|
||||||
couleurHerosB = {0.2, 0.2, 0.7, 1} /* Bleu */;
|
couleurHerosB = {0.2, 0.2, 0.7, 1} /* Bleu */,
|
||||||
|
couleurBois = {0.6, 0.3, 0, 0} /* Marron */;
|
||||||
|
|
||||||
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
float model_view_matrix[16], projection_matrix[16], nmv[16];
|
||||||
|
|
||||||
|
@ -351,20 +354,20 @@ void draw(void) {
|
||||||
/* Charger la matrice identité dans model-view */
|
/* Charger la matrice identité dans model-view */
|
||||||
MIDENTITY(model_view_matrix);
|
MIDENTITY(model_view_matrix);
|
||||||
/* On place la caméra en arrière-haut, elle regarde le centre de la scène */
|
/* On place la caméra en arrière-haut, elle regarde le centre de la scène */
|
||||||
lookAt(model_view_matrix, 0, 100 /* zoom */, 30 /* inclinaison */, 0, 0, 0, 0, 0, -1);
|
int coefTaille = -20 + _grilleW * 2.5;
|
||||||
|
lookAt(model_view_matrix, 0, 70 + coefTaille /* zoom */, 30 + coefTaille /* inclinaison */, 0, 0, 0, 0, 0, -1);
|
||||||
|
|
||||||
/* Pour centrer la grille par rapport au monde */
|
/* Pour centrer la grille par rapport au monde */
|
||||||
float cX = -_cubeSize * _grilleW / 2.0f;
|
float cX = -_cubeSize * _grilleW / 2.0f;
|
||||||
float cZ = -_cubeSize * _grilleH / 2.0f;
|
float cZ = -_cubeSize * _grilleH / 2.0f;
|
||||||
|
|
||||||
/* On change la couleur */
|
|
||||||
_cube->dcolor = couleurPlateau;
|
|
||||||
|
|
||||||
/* Pour toutes les cases de la grille, afficher un cube quand il y a
|
/* Pour toutes les cases de la grille, afficher un cube quand il y a
|
||||||
* un 1 dans la grille */
|
* un 1 dans la grille */
|
||||||
for(int i = 0; i < _grilleW; ++i)
|
for(int i = 0; i < _grilleW; ++i)
|
||||||
for(int j = 0; j < _grilleH; ++j)
|
for(int j = 0; j < _grilleH; ++j) {
|
||||||
|
/* Bloc simple */
|
||||||
if(_grille[i * _grilleW + j] == 1) {
|
if(_grille[i * _grilleW + j] == 1) {
|
||||||
|
_cube->dcolor = couleurPlateau;
|
||||||
/* 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));
|
||||||
|
|
||||||
|
@ -373,6 +376,18 @@ void draw(void) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
/* Bloc destructible */
|
||||||
|
if(_grille[i * _grilleW + j] == 4) {
|
||||||
|
_cube->dcolor = couleurBois;
|
||||||
|
/* copie model_view_matrix dans nmv */
|
||||||
|
memcpy(nmv, model_view_matrix, sizeof(nmv));
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
scale(nmv, _cubeSize / 2.0f, _cubeSize / 2.0f, _cubeSize / 2.0f);
|
||||||
|
transform_n_rasterize(_cube, nmv, projection_matrix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Dessine le héros A */
|
/* Dessine le héros A */
|
||||||
_cube->dcolor = couleurHerosA;
|
_cube->dcolor = couleurHerosA;
|
||||||
|
|
Reference in a new issue