#include "nitrito.h"
GLfloat color_active[4]= {1,0.6,0.1,0.8};
GLfloat color_inactive[4]= {1,1,1,0.8};
GLfloat color_unaviable[4]= {0.2,0.2,0.2,0.8};
GLfloat color_info[4]= {0.2,0.2,1,0.8};
GLfloat color_console[4]= {0,1,0,1};
Menu::Menu()
{
is_open = TRUE;
active_page = PAGE_MAIN;
}
void Menu::push_menu_matrix() {
glPushMatrix();
glLoadIdentity();
glPushAttrib(GL_TRANSFORM_BIT);
GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(viewport[0],viewport[2],viewport[1],viewport[3]);
glPopAttrib();
}
void Menu::pop_menu_matrix() {
glPushAttrib(GL_TRANSFORM_BIT);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
glPopMatrix();
}
void Menu::start_race()
{
SDL_Delay(500);
race.reset();
is_open=FALSE;
race.is_open = TRUE;
}
int Menu::page_main(int action)
{
static int option = 0;
const int num_options = 7;
switch(action)
{
case MENU_IN:
{
if(option == 0)
{
snd.stop_sample(SND_MENU);
start_race();
}
else if(option == 2)
{
snd.replay_sample(SND_TAC);
editor = new Editor;
active_page=PAGE_EDITOR;
}
else if(option == 5)
{
snd.replay_sample(SND_TAC);
console.force_open();
active_page=PAGE_CONSOLE;
}
else if(option == 6) options.done = TRUE;
break;
}
case MENU_UP:
{
snd.replay_sample(SND_TIC);
if(option>0) option--;
else option = num_options-1;
break;
}
case MENU_DOWN:
{
snd.replay_sample(SND_TIC);
if(option<num_options-1) option++;
else option = 0;
break;
}
case MENU_DRAW:
{
if(option == 0) glColor4fv(color_active); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-100 , "Nivel de prueba");
if(option == 1) glColor4fv(color_unaviable); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-140 , "Multijuegador");
if(option == 2) glColor4fv(color_active); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-180 , "Editor");
if(option == 3) glColor4fv(color_unaviable); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-220 , "Opciones");
if(option == 4) glColor4fv(color_unaviable); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-260 , "Creditos");
if(option == 5) glColor4fv(color_active); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-300 , "Consola");
if(option == 6) glColor4fv(color_active); else glColor4fv(color_inactive);
freetype::print(font_big,40,options.screen_h-340 , "Salir");
break;
}
default: return -1;
}
return 0;
}
int Menu::page_editor(int action)
{
switch(action)
{
case MENU_OUT:
{
snd.replay_sample(SND_TUC);
delete editor;
active_page=PAGE_MAIN;
console.force_close();
break;
}
case MENU_DRAW:
{
editor->draw();
break;
}
default: return -1;
}
return 0;
}
int Menu::page_console(int action)
{
switch(action)
{
case MENU_OUT:
{
snd.replay_sample(SND_TUC);
active_page=PAGE_MAIN;
console.force_close();
break;
}
case MENU_DRAW:
{
glColor4fv(color_info);
freetype::print(font,20,options.screen_h-20 , "ESC para volver al menu principal");
glColor4fv(color_console);
console.draw_flat();
break;
}
default: return -1;
}
return 0;
}
/*int Menu::mouse_check()
{
switch(active_page)
{
case PAGE_MAIN:
{
break;
}
}
}*/
int Menu::send_action(int action)
{
switch(active_page)
{
case PAGE_MAIN:
{
page_main(action);
break;
}
case PAGE_CONSOLE:
{
page_console(action);
break;
}
case PAGE_EDITOR:
{
page_editor(action);
break;
}
default: return -1;
}
return 0;
}
void Menu::draw()
{
glDisable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glColor3f(1,1,1);
push_menu_matrix();
glBindTexture( GL_TEXTURE_2D, texture[33]);
glBegin(GL_QUADS);
glTexCoord2f( 1.0f, 1.0f ); glVertex2f( options.screen_w+1, options.screen_h+2 );
glTexCoord2f( 0.0f, 1.0f ); glVertex2f( -1, options.screen_h+1 );
glTexCoord2f( 0.0f, 0.0f ); glVertex2f( -1, -1 );
glTexCoord2f( 1.0f, 0.0f ); glVertex2f( options.screen_w+1, -1 );
glEnd();
send_action(MENU_DRAW);
draw_cursor();
pop_menu_matrix();
snd.play_music(SND_MENU);
}