Select Git revision
display.cpp
display.cpp 2.91 KiB
#include <Arduino.h>
#include "gameoflife.h"
#include "display.h"
#define COLOR_DEPTH 24 // known working: 24, 48 - If the sketch uses type `rgb24` directly, COLOR_DEPTH must be 24
const uint8_t kMatrixWidth = 64; // known working: 32, 64, 96, 128
const uint8_t kMatrixHeight = 64; // known working: 16, 32, 48, 64
const uint8_t kRefreshDepth = 24; // known working: 24, 36, 48
const uint8_t kDmaBufferRows = 2; // known working: 2-4, use 2 to save memory, more to keep from dropping frames and automatically lowering refresh rate
const uint8_t kPanelType = SMARTMATRIX_HUB75_64ROW_MOD32SCAN; // use SMARTMATRIX_HUB75_16ROW_MOD8SCAN for common 16x32 panels
const uint8_t kMatrixOptions = (SMARTMATRIX_OPTIONS_NONE); // see http://docs.pixelmatix.com/SmartMatrix for options
const uint8_t kBackgroundLayerOptions = (SM_BACKGROUND_OPTIONS_NONE);
const uint8_t kIndexedLayerOptions = (SM_INDEXED_OPTIONS_NONE);
const int defaultBrightness = (brightnessPercent * 255) / 100;
rgb24 colorWhite = {0xff, 0xff, 0xff};
rgb24 colorBlack = {0x00, 0x00, 0x00};
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);
void setupDisplay()
{
matrix.addLayer(&backgroundLayer);
matrix.addLayer(&indexedLayer);
matrix.begin();
matrix.setBrightness(defaultBrightness);
backgroundLayer.setBrightness(255);
backgroundLayer.enableColorCorrection(true);
}
void displayLoop()
{
if (runGame)
{
for (int i = 0; i < SCREEN_HEIGHT; i++)
{
for (int j = 0; j < SCREEN_WIDTH; j++)
{
backgroundLayer.drawPixel(j, i, g[i][j] ? colorWhite : colorBlack);
}
}
backgroundLayer.swapBuffers();
}
}
void showEndScreen(int ticks) {
showEvolutions(ticks);
}
void fadeOutGame(int brightness) {
brightness = lightPowerMap8bit[brightness];
backgroundLayer.setBrightness(brightness);
backgroundLayer.swapBuffers();
}
void showEvolutions(int ticks)
{
char msg[15] = "Life has ended";
char evolutions[17];
sprintf(evolutions, "Evolutions: %d", ticks);
indexedLayer.setFont(font3x5);
indexedLayer.drawString((matrix.getScreenWidth() / 2) - (strlen(msg) * 4) / 2, (matrix.getScreenHeight() / 2) - 2 - 5 , 1, msg);
indexedLayer.drawString((matrix.getScreenWidth() / 2) - (strlen(evolutions) * 4) / 2, (matrix.getScreenHeight() / 2) + 2, 1, evolutions);
indexedLayer.swapBuffers();
indexedLayer.fillScreen(0);
}