tetris/game-ctrl/canvas.c

62 lines
1.4 KiB
C
Raw Normal View History

2024-03-08 09:57:47 +01:00
#include <string.h>
#include <stdint.h>
#include "canvas.h"
#include "displayDriver.h"
static uint8_t canvasStorage[CANVAS_WIDTH * CANVAS_HEIGHT];
2024-03-12 23:00:17 +01:00
const canvas_t canvas = {
.height = CANVAS_HEIGHT,
.width = CANVAS_WIDTH,
.size = CANVAS_WIDTH * CANVAS_HEIGHT,
.canvas = canvasStorage
};
2024-03-08 09:57:47 +01:00
void canvasInit() {
2024-03-12 23:00:17 +01:00
canvasClear();
2024-03-08 09:57:47 +01:00
displayDriverTransferCanvas();
}
2024-03-12 18:18:26 +01:00
void canvasClear() {
memset(canvas.canvas, 0x80, canvas.size);
}
void canvasSetAll(uint8_t color) {
memset(canvas.canvas, color + 0x80, canvas.size);
}
2024-03-08 09:57:47 +01:00
void canvasShow() {
displayDriverTransferCanvas();
}
2024-03-08 14:07:09 +01:00
void canvasSetPixel(uint8_t column, uint8_t row, uint8_t color) {
*((canvas.canvas) + (row * canvas.width + column)) = (color + 0x80);
}
2024-03-12 17:53:42 +01:00
void canvasWipeRow(uint8_t row) {
memmove(((canvas.canvas)+canvas.width), canvas.canvas, canvas.width*row);
for (uint8_t i = 10; i < canvas.width*(row+1); i++) {
*((canvas.canvas)+i) += 0x80;
}
memset(canvas.canvas, 0x80, canvas.width);
}
uint8_t canvasIsRowFilled(uint8_t row) {
uint8_t res = 1;
for (uint8_t column = 0; column < canvas.width; column++) {
if (*((canvas.canvas) + (row * canvas.width + column)) == 0) {
res = 0;
break;
}
}
return res;
}
2024-03-14 14:46:31 +01:00
uint8_t canvasIsPixelFree(uint8_t column, uint8_t row) {
return (*((canvas.canvas) + (row * canvas.width + column)) == 0) &&
(column < canvas.width) &&
(row < canvas.height);
}