void ac_ChooseWorld() { num_files = 0; memset(world_info, 0, sizeof(world_info)); scan_for_wwd("./world"); #ifdef __linux__ extern char homepath[256]; scan_for_wwd(homepath); #endif // Now choose the world SDL_Event event; MENU *m = &WorldMenu; m->num = num_files; m->sel = 0; done = 0; while(!done) { while(SDL_PollEvent(&event)) if(event.type == SDL_KEYDOWN) { if(event.key.keysym.sym == SDLK_LEFT) { if(m->sel > 0) { m->sel--; PlaySound(0); } } else if(event.key.keysym.sym == SDLK_RIGHT) { if(m->sel < m->num - 1) { m->sel++; PlaySound(0); } } else if(event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_LCTRL) { // reload new brave world FreeWorld(wwd); wwd = LoadWorld(world_info[m->sel].fullname); PlaySound(1); done = 1; } else if(event.key.keysym.sym == SDLK_ESCAPE) { done = 1; } } RedrawMenu(m); MPrint(world_info[m->sel].title, 130, 254, 252); MPrint(world_info[m->sel].author, 140, 254, 252); MPrint(world_info[m->sel].areas, 150, 254, 252); MPrint("PRESS LEFT/RIGHT TO SELECT", 170, 255, 252); MPrint("<START> TO CONFIRM", 180, 255, 252); BlitAndWait(1); } done = 0; }
/** The main event loop. */ void MainLoop() { XEvent event; keyRight = XKeysymToKeycode(display, XK_Right); keyLeft = XKeysymToKeycode(display, XK_Left); keyUp = XKeysymToKeycode(display, XK_Up); keyDown = XKeysymToKeycode(display, XK_Down); keyESC = XKeysymToKeycode(display, XK_Escape); keySpace = XKeysymToKeycode(display, XK_space); keyEnter = XKeysymToKeycode(display, XK_Return); keyBackspace = XKeysymToKeycode(display, XK_BackSpace); keyJ = XKeysymToKeycode(display, XK_J); keyK = XKeysymToKeycode(display, XK_K); keyL = XKeysymToKeycode(display, XK_L); keyI = XKeysymToKeycode(display, XK_I); ShowMenu(); for(;;) { while(XPending(display) > 0) { XNextEvent(display, &event); switch(event.type) { case Expose: RedrawMenu(); break; case KeyPress: if(event.xkey.keycode == keyDown || event.xkey.keycode == keyK) { MoveMenuDown(); } else if(event.xkey.keycode == keyUp || event.xkey.keycode == keyI) { MoveMenuUp(); } else if(event.xkey.keycode == keySpace || event.xkey.keycode == keyEnter) { if(!DoAction()) { return; } } break; case ButtonPress: if(!DoAction()) { return; } break; case MotionNotify: SelectMenu(event.xmotion.x, event.xmotion.y); break; default: break; } } } }
void BenchmarkMenu::OnClickUp(const Point2i &mousePosition, int button) { if (tests->Contains(mousePosition)) { Widget *widget = tests->ClickUp(mousePosition, button); if (widget && widget!=graph) { Launch(static_cast<BenchItem*>(widget)); RedrawMenu(); } else if (widget) { graph->NeedRedrawing(); } } }
void RunMenu(MENU *m) { int cnt = 0, TimeToDemo = 0; SDL_Event event; done = 0; while(!done) { while(SDL_PollEvent(&event)) if(event.type == SDL_KEYDOWN) { if(event.key.keysym.sym == SDLK_UP && m->sel > 0) { cnt = 10; m->sel--; TimeToDemo = 0; PlaySound(0); } else if(event.key.keysym.sym == SDLK_DOWN && m->sel < m->num - 1) { cnt = 10; m->sel++; TimeToDemo = 0; PlaySound(0); } else if(event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_LCTRL) { PlaySound(1); if((m->menu + m->sel)->action) (*(m->menu + m->sel)->action)(); } else if(event.key.keysym.sym == SDLK_ESCAPE) { cnt = 10; done = 1; } } TimeToDemo++; RedrawMenu(m); BlitAndWait(1); if(TimeToDemo == 1000) { // If no keys are pressed for a while, starts the demo srand(time(NULL)); PlayGame(DEMO, rand() % wwd->numofareas, rand() % 5, (rand() % 2) + 1); //CLS : Fade 1 //ShowCredits(); ShowTop10(-1, -1); TimeToDemo = 0; } } }
void Menu::key_down() { widgets.SetFocusOnNextWidget(); RedrawMenu(); }
void Menu::key_up() { widgets.SetFocusOnPreviousWidget(); RedrawMenu(); }