Ben Evans / Mbed 2 deprecated Defender_Game

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Menu.cpp Source File

Menu.cpp

00001 #include "Menu.h"
00002 
00003 const char menu_part_names[4][12] = {
00004     {"Play"},
00005     {"Settings"},
00006     {"Saved Games"},
00007     {"High Score"},
00008 };
00009 
00010 // Defining scroll_order states for scroll_order FSM
00011 scroll_order menu_fsm[4] = {
00012     {high_score, play, settings},
00013     {play, settings, saved_games}, 
00014     {settings, saved_games, high_score},
00015     {saved_games, high_score, play},
00016 }; 
00017 
00018 Menu::Menu() {
00019     
00020 }
00021  
00022 Menu::~Menu() {
00023     
00024 }
00025 
00026 void Menu::init() {
00027     current_menu_part_ = main_menu;
00028     displayed_menu_part_ = play;
00029     // Attach ticker to ISR 
00030     ticker_title.attach(callback(this, &Menu::title_screen_isr), 0.9 );
00031     title_screen_flag_ = true;
00032 }
00033 
00034 void Menu::title_screen_isr() {
00035     // Set ISR flag
00036     title_screen_flag_ = !title_screen_flag_; 
00037 } 
00038 
00039 void Menu::draw_part(N5110 &lcd) {
00040     // Prints the menu part that should be displayed in the centre
00041     if (displayed_menu_part_ == play) {
00042         lcd.printString(menu_part_names[displayed_menu_part_],30 ,4);
00043     }else if (displayed_menu_part_ == settings) {
00044         lcd.printString(menu_part_names[displayed_menu_part_],18 ,4);
00045     }else if (displayed_menu_part_ == saved_games) {
00046         lcd.printString(menu_part_names[displayed_menu_part_],9 ,4);
00047     }
00048     else if (displayed_menu_part_ == high_score) {
00049         lcd.printString(menu_part_names[displayed_menu_part_],12 ,4);
00050     }
00051         
00052     lcd.drawSprite(39, 26, 3, 5, (int *)arrow_up);
00053     lcd.drawSprite(39, 42, 3, 5, (int *)arrow_down);
00054     
00055     // Flashes title screen
00056     if (title_screen_flag_) {
00057         title_screen(lcd);
00058     }else{
00059         lcd.printString("DEFENDER",18,1);
00060     }
00061     
00062     #ifdef MENU_DEBUG 
00063         printf("displayed_menu_part_ = %d\n",displayed_menu_part_);       
00064         printf("current_menu_part_ = %d\n", current_menu_part_);
00065     #endif 
00066 }
00067 
00068 void Menu::menu_scroll(Direction d_) {
00069     // printf("displayed_menu_part_ %d\n",displayed_menu_part_);
00070     // printf("d = %d\n",d_);
00071     
00072     // Changes displayed menu part depending on joystick input
00073     if (d_ == N || d_ == NE || d_ == NW ) {  
00074         displayed_menu_part_ = menu_fsm[displayed_menu_part_].part_next;   
00075     } else if (d_ == S || d_ == SW || d_ == SE) {
00076         displayed_menu_part_ = menu_fsm[displayed_menu_part_].part_previous;
00077     }
00078     wait(0.15);
00079 }
00080 
00081 void Menu::select_part(bool pressed) {
00082     if (pressed) {  
00083         current_menu_part_ = displayed_menu_part_;
00084         wait(0.3);
00085     } else {
00086         current_menu_part_ = main_menu;
00087     }  
00088 }
00089 
00090 MenuParts Menu::get_current_menu_part() {
00091     return current_menu_part_;
00092 }
00093 
00094 void Menu::title_screen(N5110 &lcd) {
00095     lcd.drawSprite(5, 8, 10,  8, (int *)title_screen_d); //D
00096     lcd.drawSprite(15, 8, 10, 7, (int *)title_screen_e); // E
00097     lcd.drawSprite(24, 8, 10, 7, (int *)title_screen_f); // F
00098     lcd.drawSprite(33, 8, 10, 7, (int *)title_screen_e); // E
00099     lcd.drawSprite(42, 8, 10, 7, (int *)title_screen_n); // N
00100     lcd.drawSprite(51, 8, 10, 8, (int *)title_screen_d); // D
00101     lcd.drawSprite(61, 8, 10, 7, (int *)title_screen_e); // E
00102     lcd.drawSprite(70, 8, 10, 8, (int *)title_screen_r); // R
00103 }
00104