From 9b78b781bc7e88c2bb0cec3e27768b84de0e0cf8 Mon Sep 17 00:00:00 2001 From: Jan Grewe <jan@faked.org> Date: Sat, 17 Jun 2023 03:27:35 +0200 Subject: [PATCH] refactor message display --- src/display.cpp | 61 ++++++++++++++++++++++++++++++++++------------ src/display.h | 5 ++-- src/gameoflife.cpp | 2 +- src/main.cpp | 2 +- src/network.cpp | 2 +- 5 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/display.cpp b/src/display.cpp index b444ae3..eed3e09 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -18,6 +18,9 @@ rgb24 gameColor = {colorR, colorG, colorB}; rgb24 textColor = {255, 255, 255}; rgb24 pixelColor = {255, 255, 255}; +uint8_t fontWidth = 3; +uint8_t fontHeight = 5; + SMARTMATRIX_ALLOCATE_BUFFERS(matrix, kMatrixWidth, kMatrixHeight, kRefreshDepth, kDmaBufferRows, kPanelType, kMatrixOptions); SMARTMATRIX_ALLOCATE_BACKGROUND_LAYER(backgroundLayer, kMatrixWidth, kMatrixHeight, COLOR_DEPTH, kBackgroundLayerOptions); SMARTMATRIX_ALLOCATE_INDEXED_LAYER(indexedLayer, kMatrixWidth, kMatrixHeight, COLOR_DEPTH, kIndexedLayerOptions); @@ -105,29 +108,57 @@ void ageColor(uint8_t age, uint8_t decay) } } -void showMessage(String strMsg) +void showMessage(int lineOffset, String message, bool firstLine, bool lastLine) { - uint8_t fontWidth = 3; - uint8_t fontHeight = 5; - indexedLayer.fillScreen(0); - uint8_t msgLen = strMsg.length(); + if (firstLine) + { + indexedLayer.fillScreen(0); + } + + uint8_t lineSpacing = 3; + uint8_t msgLen = message.length(); uint8_t msgWidth = (msgLen * fontWidth) + msgLen; + uint8_t linePosY; + if (lineOffset < 0) + { + linePosY = (matrix.getScreenHeight() / 2) - floor(fontHeight / 2) - (lineOffset * -1) * (fontHeight + lineSpacing); + } + else if (lineOffset == 0) + { + linePosY = (matrix.getScreenHeight() / 2) - floor(fontHeight / 2); + } + else if (lineOffset > 0) + { + linePosY = (matrix.getScreenHeight() / 2) - floor(fontHeight / 2) + lineOffset * (fontHeight + lineSpacing); + } + char charMsg[msgLen + 1]; - strMsg.toCharArray(charMsg, msgLen + 1); - indexedLayer.drawString((matrix.getScreenWidth() / 2) - (msgWidth / 2), (matrix.getScreenHeight() / 2) - ceil(fontHeight / 2), 1, charMsg); - indexedLayer.swapBuffers(false); + message.toCharArray(charMsg, msgLen + 1); + indexedLayer.drawString((matrix.getScreenWidth() / 2) - (msgWidth / 2), linePosY, 1, charMsg); + + if (lastLine) + { + indexedLayer.swapBuffers(false); + } +} + +void showStartScreen() { + showMessage(-1, "Game", true, false); + showMessage(0, "of", false, false); + showMessage(1, "Life", false, true); } -void showEndScreen(uint16_t ticks) +void showEndScreen(uint16_t ticks, uint16_t cells) { char msg_game[15]; sprintf(msg_game, "Game %d ended", gameEra); - char msg_evo[12]; - sprintf(msg_evo, "Ticks: %d", ticks); - indexedLayer.fillScreen(0); - indexedLayer.drawString((matrix.getScreenWidth() / 2) - (strlen(msg_game) * 4) / 2, (matrix.getScreenHeight() / 2) - 2 - 5, 1, msg_game); - indexedLayer.drawString((matrix.getScreenWidth() / 2) - (strlen(msg_evo) * 4) / 2, (matrix.getScreenHeight() / 2) + 2, 1, msg_evo); - indexedLayer.swapBuffers(false); + showMessage(-1, String(msg_game), true, false); + char msg_ticks[12]; + sprintf(msg_ticks, "Ticks: %d", ticks); + showMessage(0, String(msg_ticks), false, false); + char msg_cells[12]; + sprintf(msg_cells, "Cells: %d", cells); + showMessage(1, String(msg_cells), false, true); } void displayBrightness(uint8_t brightness) diff --git a/src/display.h b/src/display.h index 9b9f31f..252fe82 100644 --- a/src/display.h +++ b/src/display.h @@ -17,8 +17,9 @@ extern uint8_t colorB; void setupDisplay(); void displayLoop(); void ageColor(uint8_t age, uint8_t decay); -void showEndScreen(uint16_t ticks); -void showMessage(String msg); +void showStartScreen(); +void showEndScreen(uint16_t ticks, uint16_t cells); +void showMessage(int lineOffset, String message, bool firstLine, bool lastLine); void displayBrightness(uint8_t brightness); void gameBrightness(uint8_t brightness); void setGameColor(uint8_t r, uint8_t g, uint8_t b); diff --git a/src/gameoflife.cpp b/src/gameoflife.cpp index cc0fe51..297c6ee 100644 --- a/src/gameoflife.cpp +++ b/src/gameoflife.cpp @@ -168,7 +168,7 @@ void gameLoop() { finalTicks = currentTick - noEvolutionTicksLimit; currentMillis = millis(); - showEndScreen(finalTicks); + showEndScreen(finalTicks, cellsAliveNow); if (updateHighscores(gameEra, finalTicks, cellsAliveNow)) { sendHighscores(); diff --git a/src/main.cpp b/src/main.cpp index 6bec086..9333df6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,7 +21,7 @@ void setup() logLine("", true); loadSettings(); setupDisplay(); - showMessage("Game of Life"); + showStartScreen(); setupNetwork(); clearDisplay(); setupGame(); diff --git a/src/network.cpp b/src/network.cpp index fe1100d..5b63710 100644 --- a/src/network.cpp +++ b/src/network.cpp @@ -73,7 +73,7 @@ void setupOTA() if (percent > otaProgress) { char msg[9]; sprintf(msg, "OTA:%3d%%", percent); - showMessage(String(msg)); + showMessage(0, String(msg), true, true); logLine("OTA: ", false); logLine((String)percent, false); logLine("%"); -- GitLab