ELEC2645 (2018/19) / Mbed 2 deprecated EL17MCD

Dependencies:   mbed

Revision:
15:fa5282fcd134
Child:
16:a2c945279b79
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Menus/Menus.cpp	Fri Apr 19 15:58:51 2019 +0000
@@ -0,0 +1,152 @@
+/* Menus.cpp
+Governs all the Menus
+and outside-of-game articles.
+13.4.19
+*/
+#include "Menus.h"
+
+Menus::Menus()
+{
+    _lives = 6;
+    _mute = false;
+    _contrast = 0.4;    
+}
+
+Menus::~Menus()
+{
+
+}
+
+void Menus::start_up_screen(Graphics &graphics, N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::START_PRESSED) == false) {
+        lcd.clear();
+        lcd.printString("    TANKS!    ",0,1);  
+        lcd.printString("  Press Start ",0,3);
+        _start_up_visuals(graphics, lcd, pad);
+        lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT);
+        lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT);
+        lcd.refresh();  
+    }
+}
+
+void Menus::main_menu(Graphics &graphics, N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::Y_PRESSED) == false) {
+        pad.leds_off();
+        lcd.clear();
+        if (pad.check_event(Gamepad::X_PRESSED) == true) { _controls(lcd, pad); }
+        else if (pad.check_event(Gamepad::A_PRESSED) == true) { _scores(lcd, pad); }
+        else if (pad.check_event(Gamepad::B_PRESSED) == true) { _settings(lcd, pad); }
+        lcd.printString(" (Y) Play",0,1);  
+        lcd.printString(" (X) Controls",0,2);         
+        lcd.printString(" (A) Scores",0,3);
+        lcd.printString(" (B) Settings ",0,4);
+        lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT);
+        lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT);
+        lcd.refresh();  
+        wait_ms(16.666); 
+    }
+}
+
+void Menus::_start_up_visuals(Graphics &graphics, N5110 &lcd, Gamepad &pad)
+{
+    if (_counter >= 0) {
+        graphics.start_up(1, pad);
+        graphics.draw_tank_l(10, 5, lcd);
+        graphics.draw_turret_l(10, 5, 10, lcd);
+        graphics.draw_tank_r(64, 5, lcd);
+        graphics.draw_turret_r(64, 5, 180, lcd);
+    } else {
+        graphics.start_up(0, pad);
+        graphics.draw_tank_l(10, 5, lcd);
+        graphics.draw_turret_l(10, 5, 180, lcd);
+        graphics.draw_tank_r(64, 5, lcd);
+        graphics.draw_turret_r(64, 5, 340, lcd);
+    }
+    if (_counter >= 199) { _counter = -200; }
+    _counter++;
+}
+
+void Menus::_read_inputs(Gamepad &pad)
+{
+    pad.check_event(Gamepad::Y_PRESSED);
+    pad.check_event(Gamepad::X_PRESSED);
+    pad.check_event(Gamepad::A_PRESSED);
+    pad.check_event(Gamepad::B_PRESSED);
+}
+
+void Menus::_controls(N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::BACK_PRESSED) == false) {
+        _read_inputs(pad);
+        lcd.clear();
+        lcd.printString(" Stick: Aim",0,1);  
+        lcd.printString(" A    : Fire",0,2);         
+        lcd.printString(" L/R  : Move",0,3);
+        lcd.printString(" Pot  : Power",0,4);
+        lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT);
+        lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT);
+        lcd.refresh(); 
+        wait_ms(50);  
+    }
+}
+
+void Menus::_scores(N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::BACK_PRESSED) == false) {
+        _read_inputs(pad);
+        lcd.clear();
+        lcd.printString("   Highest",0,1); 
+        lcd.printString("   Score",0,1);  
+        lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT);
+        lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT);
+        lcd.refresh(); 
+        wait_ms(50);  
+    }
+}
+
+void Menus::_settings(N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::BACK_PRESSED) == false) {
+        lcd.clear();
+        _mute_contrast(lcd, pad);
+        _read_inputs(pad);
+        lcd.printString(" (O) Lives:",0,1);  
+        lcd.printString(" (A) Mute :",0,2);  
+        lcd.printString(" (B) Contrast",0,3); 
+        lcd.printString(" reads off pot",0,4);   
+        lcd.drawRect(0, 0, 84 , 48, FILL_TRANSPARENT);
+        lcd.drawRect(1, 1, 82 , 46, FILL_TRANSPARENT);
+        lcd.refresh(); 
+        wait(0.2);  
+    }
+}
+
+void Menus::_mute_contrast(N5110 &lcd, Gamepad &pad)
+{
+    pad.check_event(Gamepad::Y_PRESSED);
+    pad.check_event(Gamepad::X_PRESSED);
+    if (pad.get_direction() == W && _lives > 1) { _lives-- ; }
+    else if (pad.get_direction() == E && _lives < 6) { _lives++ ; }
+    else if (pad.check_event(Gamepad::A_PRESSED) == true) { _mute = !_mute; }
+    else if (pad.check_event(Gamepad::B_PRESSED) == true) {
+        _contrast = pad.read_pot();
+        lcd.setContrast(_contrast); 
+    }
+    char buffer[14]; 
+    sprintf(buffer,"%d",_lives);  
+    lcd.printString(buffer, 70, 1);
+    if (_mute == true ) { lcd.drawRect(70, 17, 7 , 7, FILL_BLACK); }
+    else { lcd.drawRect(70, 17, 7 , 7, FILL_TRANSPARENT); } 
+}
+
+bool Menus::get_mute()
+{
+    return _mute;   
+}
+
+int Menus::get_lives()
+{
+    return _lives;   
+}
\ No newline at end of file