ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Committer:
el17ajf
Date:
Fri Apr 05 17:16:59 2019 +0000
Revision:
27:2ed9e3c9f4e9
Parent:
26:baa7077449e7
Child:
30:11838cb6979f
Highscores working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el17ajf 17:cc448ab7266f 1 #include "UI.h"
el17ajf 17:cc448ab7266f 2 #include "Graphics.h"
el17ajf 26:baa7077449e7 3 #include "Math.h"
el17ajf 26:baa7077449e7 4
el17ajf 21:62d2b5b73160 5 namespace Menus {
el17ajf 21:62d2b5b73160 6 UI::UI() {
el17ajf 21:62d2b5b73160 7 reset();
el17ajf 21:62d2b5b73160 8 }
el17ajf 21:62d2b5b73160 9
el17ajf 21:62d2b5b73160 10 void UI::reset() {
el17ajf 21:62d2b5b73160 11 buttonCurrentlySelected = 0;
el17ajf 21:62d2b5b73160 12 }
el17ajf 21:62d2b5b73160 13
el17ajf 21:62d2b5b73160 14 UI::~UI() {
el17ajf 21:62d2b5b73160 15
el17ajf 21:62d2b5b73160 16 }
el17ajf 16:3f84f2d7b910 17
el17ajf 21:62d2b5b73160 18 void UI::clear() {
el17ajf 21:62d2b5b73160 19 buttonPressedFrame = false;
el17ajf 21:62d2b5b73160 20 nextYPos = PADDING_Y;
el17ajf 21:62d2b5b73160 21 buttonCurrentlyDrawing = -1;
el17ajf 27:2ed9e3c9f4e9 22 frame++;
el17ajf 21:62d2b5b73160 23 }
el17ajf 17:cc448ab7266f 24
el17ajf 21:62d2b5b73160 25 void UI::drawTitle(const char * text) {
el17ajf 21:62d2b5b73160 26 drawLabel(text);
el17ajf 21:62d2b5b73160 27 }
el17ajf 17:cc448ab7266f 28
el17ajf 21:62d2b5b73160 29 void UI::drawLabel(const char * text) {
el17ajf 21:62d2b5b73160 30 Graphics::UI::drawText(PADDING_X, nextY(), text);
el17ajf 21:62d2b5b73160 31 }
el17ajf 21:62d2b5b73160 32
el17ajf 27:2ed9e3c9f4e9 33 void UI::drawFlashingLabel(const char * text) {
el17ajf 27:2ed9e3c9f4e9 34 Graphics::UI::drawText(PADDING_X, nextY(), (frame % 16) > 8 ? text : "");
el17ajf 27:2ed9e3c9f4e9 35 }
el17ajf 27:2ed9e3c9f4e9 36
el17ajf 21:62d2b5b73160 37 void UI::newLine() {
el17ajf 21:62d2b5b73160 38 nextY();
el17ajf 21:62d2b5b73160 39 }
el17ajf 17:cc448ab7266f 40
el17ajf 26:baa7077449e7 41 int oldBorderX1,oldBorderY1, oldBorderX2, oldBorderY2;
el17ajf 26:baa7077449e7 42
el17ajf 21:62d2b5b73160 43 bool UI::drawAndCheckButton(const char * text) {
el17ajf 21:62d2b5b73160 44 buttonCurrentlyDrawing++;
el17ajf 21:62d2b5b73160 45
el17ajf 21:62d2b5b73160 46 int y = nextY();
el17ajf 21:62d2b5b73160 47
el17ajf 21:62d2b5b73160 48 Graphics::UI::drawText(PADDING_X, y, text);
el17ajf 21:62d2b5b73160 49
el17ajf 21:62d2b5b73160 50 bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected;
el17ajf 21:62d2b5b73160 51
el17ajf 21:62d2b5b73160 52 int wordWidth = strlen(text) * (Graphics::UI::CHAR_WIDTH + Graphics::UI::CHAR_SPACE) - 1;
el17ajf 21:62d2b5b73160 53
el17ajf 21:62d2b5b73160 54 if (selected) {
el17ajf 26:baa7077449e7 55 int borderX1 = PADDING_X - 2;
el17ajf 26:baa7077449e7 56 int borderY1 = y - 2;
el17ajf 26:baa7077449e7 57 int borderX2 = PADDING_X + wordWidth + 2;
el17ajf 26:baa7077449e7 58 int borderY2 = y + Graphics::UI::CHAR_HEIGHT + 1;
el17ajf 21:62d2b5b73160 59 Graphics::UI::drawBorder(
el17ajf 26:baa7077449e7 60 Math::lerp(oldBorderX1, borderX1),
el17ajf 26:baa7077449e7 61 Math::lerp(oldBorderY1, borderY1),
el17ajf 26:baa7077449e7 62 Math::lerp(oldBorderX2, borderX2),
el17ajf 26:baa7077449e7 63 Math::lerp(oldBorderY2, borderY2)
el17ajf 21:62d2b5b73160 64 );
el17ajf 26:baa7077449e7 65 oldBorderX1 = Math::lerp(oldBorderX1, borderX1);
el17ajf 26:baa7077449e7 66 oldBorderY1 = Math::lerp(oldBorderY1, borderY1);
el17ajf 26:baa7077449e7 67 oldBorderX2 = Math::lerp(oldBorderX2, borderX2);
el17ajf 26:baa7077449e7 68 oldBorderY2 = Math::lerp(oldBorderY2, borderY2);
el17ajf 21:62d2b5b73160 69 }
el17ajf 18:24ce897024d0 70
el17ajf 21:62d2b5b73160 71 return buttonPressedFrame && selected;
el17ajf 17:cc448ab7266f 72 }
el17ajf 21:62d2b5b73160 73
el17ajf 21:62d2b5b73160 74 void UI::selectNextButton() {
el17ajf 21:62d2b5b73160 75 if (buttonCurrentlySelected < buttonCurrentlyDrawing) {
el17ajf 21:62d2b5b73160 76 buttonCurrentlySelected++;
el17ajf 21:62d2b5b73160 77 }
el17ajf 21:62d2b5b73160 78 }
el17ajf 21:62d2b5b73160 79
el17ajf 21:62d2b5b73160 80 void UI::selectPreviousButton() {
el17ajf 21:62d2b5b73160 81 if (buttonCurrentlySelected > 0) {
el17ajf 21:62d2b5b73160 82 buttonCurrentlySelected--;
el17ajf 21:62d2b5b73160 83 }
el17ajf 17:cc448ab7266f 84 }
el17ajf 21:62d2b5b73160 85
el17ajf 21:62d2b5b73160 86 void UI::pressButton() {
el17ajf 21:62d2b5b73160 87 buttonPressedFrame = true;
el17ajf 17:cc448ab7266f 88 }
el17ajf 21:62d2b5b73160 89
el17ajf 21:62d2b5b73160 90 int UI::nextY() {
el17ajf 21:62d2b5b73160 91 int currentYPos = nextYPos;
el17ajf 21:62d2b5b73160 92 nextYPos += Graphics::UI::CHAR_HEIGHT + LINE_PADDING;
el17ajf 21:62d2b5b73160 93 return currentYPos;
el17ajf 21:62d2b5b73160 94 }
el17ajf 21:62d2b5b73160 95 };