//------------------------------------------------------------------------------
// Place la caméra
//------------------------------------------------------------------------------
void draw_cam()
{
// EXPLICATIONS
//
// mouse_up : angle haut-bas
// mouse_rl : angle gauche-droite
// alpha : mouse_up / beta : mouse_rl
//
// targetx = cos(alpha) * cos(beta)
// targety = sin(alpha)
// targetz = cos(alpha) * sin(beta)
targetx=run+10*cos(((width-mouse_rl)/width)*pi/2)*cos(((height-mouse_up)/height)*pi/2);
targety=jump+10*sin(((height-mouse_up)/height)*pi/2);
targetz=move_rl+10*sin(((mouse_rl-width)/width)*pi/2)*cos(((height-mouse_up)/height)*pi/2);
gluLookAt(run,jump,move_rl,targetx,targety,targetz,0,1,0);
}
//------------------------------------------------------------------------------
// Affiche le hud
//------------------------------------------------------------------------------
void draw_hud()
{
glBindTexture(GL_TEXTURE_2D, Name[1]); // Texture blanche
gluLookAt(0,0,0.1f,0,0,0,0,1,0); // Caméra et Target volontairement très rapprochés
draw_crosshair(); // Affichage de la crosshair
if (cg_zoom <= 0) // Si on ne zoome pas
{
draw_fumee(); // Affichage de la fumée
draw_weapon(); // Affichage de l'arme
}
draw_texte(); // Affiche les textes à l'écran
draw_console(); // Affichage de la console
}
//------------------------------------------------------------------------------
// Affiche le menu Principal
//------------------------------------------------------------------------------
void draw_main_menu()
{
int boucle;
// Réactualise les clics des boutons
for (boucle=1; boucle<=TOTAL_BOUTON; boucle++)
{
if ((mpos.x>bouton[boucle].x1) && (mpos.y>bouton[boucle].y1) && (mpos.x<bouton[boucle].x2) && (mpos.y<bouton[boucle].y2))
bouton[boucle].stat=!bouton[boucle].stat;
}
// Titre
glPrint(260,416, "arc", 3, "Menu");
glDisable(GL_TEXTURE_2D); // Textures 2D activées
COLOR_ARC_EN_CIEL;
glBegin(GL_LINES); // Start Drawing Line Strips (Something New)
glVertex2d(0,96); glVertex2d(640,96); // Top Right Of Bottom Box
glVertex2d(0,400); glVertex2d(640,400); // Lower Left Of Bottom Box
glEnd(); // Done First Line Strip
glEnable(GL_TEXTURE_2D); // Textures 2D activées
// Touches
glPrint(450,352, "green", 2, "Touches");
glPrint(500,336, "white", 1, nbfps);
glPrint(480,320, "white", 1, "Echap : Menu");
glPrint(480,304, "white", 1, " E : Avancer");
glPrint(480,288, "white", 1, " D : Reculer");
glPrint(480,272, "white", 1, " S : Gauche");
glPrint(480,256, "white", 1, " F : Droite");
glPrint(480,240, "white", 1, "Space : Zoom");
glPrint(480,224, "white", 1, "ClicG : Tir");
glPrint(480,208, "white", 1, " B : Blend");
glPrint(480,192, "white", 1, " L : Light");
glPrint(480,176, "white", 1, " PgUP : Haut");
glPrint(480,160, "white", 1, " PgDN : Bas");
glPrint(480,144, "red", 1, " F10 : Quitter");
glPrint(535,48, "yellow", 2, "Cube");
glPrint(520,32, "white", 1, "Version 2.5");
glPrint(530,16, "red", 1, "By BeLZeL");
// Variables
glPrint(10,352, "green", 2, "Variables");
glPrint(10,240, "white", 1, "Entrer un nombre [10-200]");
glPrint(10,224, "white", 1, "et appuyez sur Enter :");
//bouton 1 : cg_fov
glPrint(110,336, "white", 1, "FOV : "); glButton(170,336, 1, "%d", cg_fov);
if (bouton[1].clic==true)
{
switch (cg_fov)
{
case 45 : cg_fov = 60; break ;
case 60 : cg_fov = 90; break ;
case 90 : cg_fov = 120; break ;
case 120 : cg_fov = 45; break ;
}
bouton[1].clic=false;
}
//bouton 2 : sensitivity
glPrint(30,320, "white", 1, "Sensitivity : "); glButton(170,320, 2, "%d", sensitivity);
if (bouton[2].clic==true)
{
switch (sensitivity)
{
case 1 : sensitivity = 2; break ;
case 2 : sensitivity = 3; break ;
case 3 : sensitivity = 4; break ;
case 4 : sensitivity = 1; break ;
}
bouton[2].clic=false;
}
//bouton 3 : mode
glPrint(100,304, "white", 1, "Mode : "); glButton(170,304, 3, (cg_player)?"Joueur":"Spectateur");
if (bouton[3].clic==true)
{
switch (cg_player)
{
case 0 : cg_player=1; break ;
case 1 : cg_player=0; break ;
}
bouton[3].clic=false;
}
//bouton 4 : change de menu -> menu_map
glButton(32,32, 4, "LES MAPS");
if (bouton[4].clic==true)
{
main_menu=false;
map_menu=true;
bouton[4].clic=false;
}
//bouton 5 : retour
glButton(400,48, 5, "JOUER");
if (bouton[5].clic==true)
{
main_menu=false;
bouton[5].clic=false;
}
//bouton 6 : quitter
glButton(400,16, 6, "QUITTER");
if (bouton[6].clic==true) exit(0);
//bouton 7 : profondeur
glPrint(90,208, "green", 1, "Depth : "); glWrite(170,208, 7, &champ_depth, bouton[7].texte);
//bouton 8 : ciel
glPrint(100,288, "white", 1, "Ciel : "); glButton(170,288, 8, (ciel)?"ON":"OFF");
if (bouton[8].clic==true)
{
ciel=!ciel;
bouton[8].clic=false;
}
//bouton 9 : moteur 3D
glPrint(70,272, "white", 1, "Optimiz : "); glButton(170,272, 9, (m3D)?"ON":"OFF");
if (bouton[9].clic==true)
{
m3D=!m3D;
bouton[9].clic=false;
}
//bouton 10 : change de menu -> menu_map
glButton(32,48, 10, "GRAPHICS");
if (bouton[10].clic==true)
{
main_menu=false;
graph_menu=true;
bouton[10].clic=false;
}
}
//------------------------------------------------------------------------------
// Affiche le menu Map
//------------------------------------------------------------------------------
void draw_map_menu()
{
int boucle;
// Réactualise les clics des boutons
for (boucle=1; boucle<=TOTAL_BOUTON; boucle++)
{
if ((mpos.x>bouton[boucle].x1) && (mpos.y>bouton[boucle].y1) && (mpos.x<bouton[boucle].x2) && (mpos.y<bouton[boucle].y2))
bouton[boucle].stat=!bouton[boucle].stat;
}
// Titre
glPrint(260,416, "arc", 3, "Maps");
glDisable(GL_TEXTURE_2D); // Textures 2D activées
COLOR_ARC_EN_CIEL;
glBegin(GL_LINES); // Start Drawing Line Strips (Something New)
glVertex2d(0,96); glVertex2d(640,96); // Top Right Of Bottom Box
glVertex2d(0,400); glVertex2d(640,400); // Lower Left Of Bottom Box
glEnd(); // Done First Line Strip
glEnable(GL_TEXTURE_2D); // Textures 2D activées
glPrint(535,48, "yellow", 2, "Cube");
glPrint(520,32, "white", 1, "Version 2.0");
glPrint(530,16, "red", 1, "By BeLZeL");
//bouton 4 : retour
glButton(32,32, 4, "BACK");
if (bouton[4].clic==true)
{
main_menu=true;
map_menu=false;
bouton[4].clic=false;
}
//bouton 5 : retour
glButton(400,48, 5, "JOUER");
if (bouton[5].clic==true)
{
main_menu=false;
map_menu=false;
bouton[5].clic=false;
}
//bouton 6 : quitter
glButton(400,16, 6, "QUITTER");
if (bouton[6].clic==true) exit(0);
//bouton 14 : map
glImage(16, 256, 14, "mapbelzel.map");
//bouton 15 : map
glImage(176, 256, 15, "maplab.map");
//bouton 16 : map
glImage(336, 256, 16, "mapjail.map");
//bouton 17 : map
glImage(16, 128, 17, "mapmrboom.map");
}
//------------------------------------------------------------------------------
// Affiche le menu Graphics
//------------------------------------------------------------------------------
void draw_graph_menu()
{
char *token; // On va y placer toutes nos fonctions OpenGL gérées par le système
int cnt=0; // Compteur de fonctions
char* text=(char *)malloc(strlen((char *)glGetString(GL_EXTENSIONS))+1); // Alloue de la mémoire permettant de contenir toutes nos extensions OpenGL
int boucle;
strcpy (text,(char *)glGetString(GL_EXTENSIONS)); // On récupère la liste des extensions dans un texte
token=strtok(text," "); // On sépare par des espaces
// Réactualise les clics des boutons
for (boucle=1; boucle<=TOTAL_BOUTON; boucle++)
{
if ((mpos.x>bouton[boucle].x1) && (mpos.y>bouton[boucle].y1) && (mpos.x<bouton[boucle].x2) && (mpos.y<bouton[boucle].y2))
bouton[boucle].stat=!bouton[boucle].stat;
}
// Titre
glPrint(200,416, "arc", 3, "Graphics");
glDisable(GL_TEXTURE_2D); // Textures 2D desactivées
COLOR_ARC_EN_CIEL; // Constante couleur arc-en-ciel
glBegin(GL_LINES); // On fait un cadre fait de deux lignes
glVertex2d(0,96); glVertex2d(640,96);
glVertex2d(0,400); glVertex2d(640,400);
glEnd();
glEnable(GL_TEXTURE_2D); // Textures 2D réactivées
glPrint(535,48, "yellow", 2, "Cube");
glPrint(520,32, "white", 1, "Version 2.0");
glPrint(530,16, "red", 1, "By BeLZeL");
glPrint(200,32,"white",1," Monter : I");
glPrint(200,16,"white",1,"Descendre : K");
glPrint(20,384,"white",1," Rendu : "); glPrint(120,384,"blue",1, (char *)glGetString(GL_RENDERER));
glPrint(20,368,"white",1,"Vendeur : "); glPrint(120,368,"blue",1, (char *)glGetString(GL_VENDOR));
glPrint(20,352,"white",1,"Version : "); glPrint(120,352,"blue",1, (char *)glGetString(GL_VERSION));
glScissor(0,96,640,256); // On fait un "découpage" de l'écran, coin bas-gauche puis taille
glEnable(GL_SCISSOR_TEST); // On l'active
while(token!=NULL) // Tant qu'on est pas à la fin
{
cnt++; // On augmente le compteur
if (cnt>maxtokens)
maxtokens=cnt;
glPrint(0,352-(cnt*16)+scroll,"green", 1, "%i",cnt); // Ecrit le nombre
glPrint(50,352-(cnt*16)+scroll,"yellow", 1, token); // Ecrit la fonction correspondante
token=strtok(NULL," "); // Va au suivant
}
glDisable(GL_SCISSOR_TEST); // Désactive le "découpage" de l'écran
free(text); // Libère la mémoire
//bouton 4 : retour
glButton(32,32, 4, "BACK");
if (bouton[4].clic==true)
{
main_menu=true;
graph_menu=false;
bouton[4].clic=false;
}
//bouton 5 : retour
glButton(400,48, 5, "JOUER");
if (bouton[5].clic==true)
{
main_menu=false;
graph_menu=false;
bouton[5].clic=false;
}
//bouton 6 : quitter
glButton(400,16, 6, "QUITTER");
if (bouton[6].clic==true) exit(0);
}
//------------------------------------------------------------------------------
// Fin Du Fichier
//------------------------------------------------------------------------------
/*
// char *chaine;
// int cnt=0; // Compteur de fonctions
char *Fonctions_Activees[]={
"GL_ALPHA_TEST",
"GL_CULL_FACE",
"GL_BLEND",
"GL_DEPTH_TEST",
"GL_COLOR_ARRAY_EXT"};
*//*
"GL_ALPHA_TEST",
"GL_AUTO_NORMAL",
"GL_BLEND",
"GL_CLIP_PLANE1",
"GL_COLOR_ARRAY_EXT",
"GL_COLOR_MATERIAL",
"GL_CULL_FACE",
"GL_DEPTH_TEST",
"GL_DITHER",
"GL_EDGE_FLAG_ARRAY_EXT",
"GL_FOG",
"GL_INDEX_ARRAY_EXT",
"GL_LIGHT1",
"GL_LIGHTING",
"GL_LINE_SMOOTH",
"GL_LINE_STIPPLE",
"GL_LOGIC_OP",
"GL_MAP1_COLOR_4",
"GL_MAP1_INDEX",
"GL_MAP1_NORMAL",
"GL_MAP1_TEXTURE_COORD_1",
"GL_MAP1_TEXTURE_COORD_2",
"GL_MAP1_TEXTURE_COORD_3",
"GL_MAP1_TEXTURE_COORD_4",
"GL_MAP1_VERTEX_3",
"GL_MAP1_VERTEX_4",
"GL_MAP2_COLOR_4",
"GL_MAP2_INDEX",
"GL_MAP2_NORMAL",
"GL_MAP2_TEXTURE_COORD_1",
"GL_MAP2_TEXTURE_COORD_2",
"GL_MAP2_TEXTURE_COORD_3",
"GL_MAP2_TEXTURE_COORD_4",
"GL_MAP2_VERTEX_3",
"GL_MAP2_VERTEX_4",
"GL_NORMAL_ARRAY_EXT",
"GL_NORMALIZE",
"GL_POINT_SMOOTH",
"GL_POLYGON_SMOOTH",
"GL_POLYGON_STIPPLE",
"GL_SCISSOR_TEST",
"GL_STENCIL_TEST",
"GL_TEXTURE_1D",
"GL_TEXTURE_2D",
"GL_TEXTURE_COORD_ARRAY_EXT",
"GL_TEXTURE_GEN_Q",
"GL_TEXTURE_GEN_R",
"GL_TEXTURE_GEN_S",
"GL_TEXTURE_GEN_T",
"GL_VERTEX_ARRAY_EXT"};
*//*
// chaine=strtok(Fonctions_Activees," "); // On sépare par des espaces
// Réactualise les clics des boutons
for (int boucle=1; boucle<=TOTAL_BOUTON; boucle++)
{
if ((mpos.x>bouton[boucle].x1) && (mpos.y>bouton[boucle].y1) && (mpos.x<bouton[boucle].x2) && (mpos.y<bouton[boucle].y2))
bouton[boucle].stat=!bouton[boucle].stat;
}
// Titre
glPrint(200,416, "arc", 3, "Graphics");
glDisable(GL_TEXTURE_2D); // Textures 2D desactivées
COLOR_ARC_EN_CIEL; // Constante couleur arc-en-ciel
glBegin(GL_LINES); // On fait un cadre fait de deux lignes
glVertex2d(0,96); glVertex2d(640,96);
glVertex2d(0,400); glVertex2d(640,400);
glEnd();
glEnable(GL_TEXTURE_2D); // Textures 2D réactivées
glPrint(535,48, "yellow", 2, "Cube");
glPrint(520,32, "white", 1, "Version 2.0");
glPrint(530,16, "red", 1, "By BeLZeL");
glPrint(200,32,"white",1," Monter : I");
glPrint(200,16,"white",1,"Descendre : K");
glPrint(20,384,"white",1," Rendu : "); glPrint(120,384,"blue",1, (char *)glGetString(GL_RENDERER));
glPrint(20,368,"white",1,"Vendeur : "); glPrint(120,368,"blue",1, (char *)glGetString(GL_VENDOR));
glPrint(20,352,"white",1,"Version : "); glPrint(120,352,"blue",1, (char *)glGetString(GL_VERSION));
glScissor(0,96,640,256); // On fait un "découpage" de l'écran, coin bas-gauche puis taille
glEnable(GL_SCISSOR_TEST); // On l'active
for (int t=0; t<=4; t++)
{
glPrint(0,352-(t*16)+scroll,"green", 1, "%d", t); // Ecrit le nombre
glPrint(50,352-(t*16)+scroll,"yellow", 1, Fonctions_Activees[t]); // Ecrit la fonction correspondante
glPrint(450,352-(t*16)+scroll,"blue", 1, (glIsEnabled(int(Fonctions_Activees[t]))==GL_TRUE)?"ON":"OFF"); // Ecrit la fonction correspondante
glPrint(500,352-(t*16)+scroll,"blue", 1, (glIsEnabled(int(Fonctions_Activees[t]))==GL_FALSE)?"ON":"OFF"); // Ecrit la fonction correspondante
}
glDisable(GL_SCISSOR_TEST); // Désactive le "découpage" de l'écran
// free(Fonctions_Activees); // Libère la mémoire
//bouton 4 : retour
glButton(32,32, 4, "BACK");
if (bouton[4].clic==true)
{
main_menu=true;
graph_menu=false;
bouton[4].clic=false;
}
//bouton 5 : retour
glButton(400,48, 5, "JOUER");
if (bouton[5].clic==true)
{
main_menu=false;
graph_menu=false;
bouton[5].clic=false;
}
//bouton 6 : quitter
glButton(400,16, 6, "QUITTER");
if (bouton[6].clic==true) exit(0);
}
*/