#include "menu.h" #include "font.h" #include "screen.h" #include "game.h" // XXX: WARNING // // THIS CODE IS VERY MESSY; DON'T READ UNLESS YOU PLAN TO REWRITE IT. :) // OGLFT::Monochrome *face=0; unsigned int selected = 0; unsigned int num_menus = 0; struct Menu { char *text; void (*func)(Controller*); }; Menu menu[7]; void (*menu_func)(); void (*quit_func)(Controller *); void draw_menus() { face->setPointSize(14); int xo = 100, yo = 150; for (unsigned int i = 0; i < num_menus; ++i) { if (selected == i) face->setForegroundColor(1, 1, 0); else face->setForegroundColor(1, 1, 1); face->draw(xo, Screen::mDisplay.y-yo-20*i, menu[i].text); } } void MenuExec(Controller *c) { menu[selected].func(c); } void MenuUp() { if (selected == 0) selected = num_menus-1; else selected--; } void MenuDown() { if (selected == (num_menus-1)) selected = 0; else selected++; } void start_game(Controller*) { Game::getInstance()->setMode(Game::PLAY); } void main_menu(); void go_main_menu(Controller*c) { main_menu(); } void configure(Controller*) { selected = 0; num_menus = 6; menu[0].text = "Game Mode"; menu[0].func = configure; menu[1].text = "Difficulty"; menu[1].func = configure; menu[2].text = "Control"; menu[2].func = configure; menu[3].text = "Video"; menu[3].func = configure; menu[4].text = "Audio"; menu[4].func = configure; menu[5].text = ""; menu[5].func = go_main_menu; quit_func = go_main_menu; } void quit(Controller*c) { c->setQuit(); } void main_menu() { selected = 0; num_menus = 3; menu[0].text = "Start Game"; menu[0].func = start_game; menu[1].text = "Configure"; menu[1].func = configure; menu[2].text = "Quit SSC"; menu[2].func = quit; quit_func = quit; } void DrawHeading() { draw::setColor(0, 0, 0, .5); draw::box(0, 0, Screen::mDisplay.x, Screen::mDisplay.y); if (!face) { face = new OGLFT::Monochrome("/usr/local/share/ssc/Vera.ttf"); if (!face || !face->isValid()) { fprintf(stderr, "Could not open metalang.ttf!\n"); exit(0); } } if (!menu_func) { menu_func = main_menu; menu_func(); } if (!quit_func) quit_func = quit; face->setForegroundColor(1, 1, 1); face->setPointSize(24); face->draw(5, Screen::mDisplay.y-30, "SSC: Strategic Space Combat"); draw_menus(); } GameMenu::GameMenu() : mState(STATE_TITLE) { }