+ default:
+ break;
+ }
+ break;
+ }
+ }
+ SDL_Delay(10);
+ }
+}
+
+
+/* configuration screen */
+void zeRace_config()
+{
+ SDL_Event event;
+ int active=0;
+ #define CONFIG_OPTIONS 11
+
+ void update()
+ {
+ SDL_Rect pos;
+ SDL_FillRect(screen,NULL,0x000000);
+ print(screen,20,HEIGHT/(CONFIG_OPTIONS+4)*(3+active),">");
+ print(screen,WIDTH/2-24*5,HEIGHT/(CONFIG_OPTIONS+4),"* Configuration screen *");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*3,"Pseudo : ");
+ print(screen,40+10*strlen("Pseudo : "),HEIGHT/(CONFIG_OPTIONS+4)*3,config.pseudo);
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*4,"Url : ");
+ print(screen,40+10*strlen("Url : "),HEIGHT/(CONFIG_OPTIONS+4)*4,config.url);
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*5,"Fullscreen : ");
+ print(screen,40+10*strlen("Fullscreen : "),HEIGHT/(CONFIG_OPTIONS+4)*5,config.fullscreen?"Yes":"No");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*6,"Sound : ");
+ print(screen,40+10*strlen("Sound : "),HEIGHT/(CONFIG_OPTIONS+4)*6,config.sound?"Yes":"No");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*7,"Tire : ");
+ print(screen,40+10*strlen("Tire : "),HEIGHT/(CONFIG_OPTIONS+4)*7,config.tire?"Yes":"No");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*8,"Accelerate key : ");
+ print(screen,40+10*strlen("Accelerate key : "),HEIGHT/(CONFIG_OPTIONS+4)*8,config.up?SDL_GetKeyName(config.up):"<press key>");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*9,"Brake key : ");
+ print(screen,40+10*strlen("Brake key : "),HEIGHT/(CONFIG_OPTIONS+4)*9,config.down?SDL_GetKeyName(config.down):"<press key>");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*10,"Turn left key : ");
+ print(screen,40+10*strlen("Turn left key : "),HEIGHT/(CONFIG_OPTIONS+4)*10,config.left?SDL_GetKeyName(config.left):"<press key>");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*11,"Turn right key : ");
+ print(screen,40+10*strlen("Turn right key : "),HEIGHT/(CONFIG_OPTIONS+4)*11,config.right?SDL_GetKeyName(config.right):"<press key>");
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*12,"Color : ");
+ pos.x=123;
+ pos.y=HEIGHT/(CONFIG_OPTIONS+4)*12-7;
+ SDL_BlitSurface(cars[0],NULL,screen,&pos);
+ print(screen,40,HEIGHT/(CONFIG_OPTIONS+4)*(CONFIG_OPTIONS+2),"Back to main menu");
+ SDL_Flip(screen);
+ }
+
+ int read_key()
+ {
+ for (;;)
+ {
+ while (SDL_PollEvent(&event)) switch (event.type)
+ {
+ case SDL_KEYDOWN:
+ return event.key.keysym.sym;
+ }
+ SDL_Delay(10);
+ }
+ }
+
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL);
+ update();
+ for (;;)
+ {
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ zeRace_exit();
+ break;
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ SDL_EnableKeyRepeat(0,0);
+ return;
+ case SDLK_RETURN:
+ case SDLK_SPACE:
+ case SDLK_LEFT:
+ case SDLK_RIGHT:
+ switch (active)
+ {
+ case 0: readstring(screen,40+10*strlen("Pseudo : "),HEIGHT/(CONFIG_OPTIONS+4)*3,config.pseudo,MAXLINELENGTH); break;
+ case 1: readstring(screen,40+10*strlen("Url : "),HEIGHT/(CONFIG_OPTIONS+4)*4,config.url,MAXLINELENGTH); break;;
+ case 2: config.fullscreen=!config.fullscreen; break;
+ case 3: config.sound=!config.sound; break;
+ case 4: config.tire=!config.tire; break;
+ case 5: config.up=0; update(); config.up=read_key(); break;
+ case 6: config.down=0; update(); config.down=read_key(); break;
+ case 7: config.left=0; update(); config.left=read_key(); break;
+ case 8: config.right=0; update(); config.right=read_key(); break;
+ case 9:
+ if (event.key.keysym.sym==SDLK_LEFT) config.color--; else config.color++;
+ if (config.color<0) config.color=11;
+ if (config.color>11) config.color=0;
+ zeRace_generate_cars();
+ break;
+ case 10:
+ SDL_EnableKeyRepeat(0,0);
+ return;
+ }
+ update();
+ break;
+ case SDLK_UP:
+ active--; if (active<0) active=CONFIG_OPTIONS-1;
+ update();
+ break;
+ case SDLK_DOWN:
+ active++; if (active>CONFIG_OPTIONS-1) active=0;
+ update();
+ break;
+ default:
+ break;
+ }
+ break;
+ }
+ }
+ SDL_Delay(10);
+ }
+}
+
+
+/* main menu */
+void zeRace_menu()
+{
+ SDL_Event event;
+ int active=0;
+ SDL_Surface *logo;
+ #define MENU_OPTIONS 3
+
+ void update()
+ {
+ SDL_Rect pos;
+ SDL_FillRect(screen,NULL,0x000000);
+ pos.x=WIDTH/2-logo->w/2;
+ pos.y=HEIGHT/6-logo->h/2;
+ SDL_BlitSurface(logo,NULL,screen,&pos);
+ print(screen,650,HEIGHT/(MENU_OPTIONS+4)*2,"version " VERSION);
+ print(screen,420,HEIGHT/(MENU_OPTIONS+4)*(3+active),">");
+ print(screen,440,HEIGHT/(MENU_OPTIONS+4)*3,"Local game");
+ /* print(screen,440,HEIGHT/(MENU_OPTIONS+4)*4,"Network game"); */
+ print(screen,440,HEIGHT/(MENU_OPTIONS+4)*4,"Configuration");
+ print(screen,440,HEIGHT/(MENU_OPTIONS+4)*5,"Exit game");
+ SDL_Flip(screen);
+ }
+
+ logo=IMG_Load("sprites/logo.jpg");
+ SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL);
+ update();
+ for (;;)
+ {
+ while (SDL_PollEvent(&event))
+ {
+ switch (event.type)
+ {
+ case SDL_QUIT:
+ zeRace_exit();
+ break;
+ case SDL_KEYDOWN:
+ switch (event.key.keysym.sym)
+ {
+ case SDLK_ESCAPE:
+ SDL_EnableKeyRepeat(0,0);
+ return;
+ case SDLK_RETURN:
+ case SDLK_SPACE:
+ case SDLK_LEFT:
+ case SDLK_RIGHT:
+ switch (active)
+ {
+ case 0: zeRace_select_track(); break;
+ case 1: zeRace_config(); break;
+ case 2: return;
+ }
+ update();
+ break;
+ case SDLK_UP:
+ active--; if (active<0) active=MENU_OPTIONS-1;
+ update();
+ break;
+ case SDLK_DOWN:
+ active++; if (active>MENU_OPTIONS-1) active=0;
+ update();
+ break;
+ default:
+ break;