diff options
Diffstat (limited to 'puzzle/neo')
-rw-r--r-- | puzzle/neo/main.cpp | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/puzzle/neo/main.cpp b/puzzle/neo/main.cpp index 5958ea5..fce0874 100644 --- a/puzzle/neo/main.cpp +++ b/puzzle/neo/main.cpp @@ -44,15 +44,15 @@ pb_global_state_t puzzleState = PB_GS_NOINIT; * @throws None. */ uint32_t scaleBrightness(uint32_t color, float scale) { - uint8_t r = (color >> 16) & 0xFF; - uint8_t g = (color >> 8) & 0xFF; - uint8_t b = color & 0xFF; + uint8_t r = (color >> 16) & 0xFF; + uint8_t g = (color >> 8) & 0xFF; + uint8_t b = color & 0xFF; - r = uint8_t(r * scale); - g = uint8_t(g * scale); - b = uint8_t(b * scale); + r = uint8_t(r * scale); + g = uint8_t(g * scale); + b = uint8_t(b * scale); - return (uint32_t(r) << 16) | (uint32_t(g) << 8) | uint32_t(b); + return (uint32_t(r) << 16) | (uint32_t(g) << 8) | uint32_t(b); } /** @@ -64,19 +64,21 @@ uint32_t scaleBrightness(uint32_t color, float scale) { * @throws None */ void toggleAdjacentLEDs(int x, int y) { - for (int dx = -1; dx <= 1; ++dx) { - for (int dy = -1; dy <= 1; ++dy) { - int nx = x + dx, ny = y + dy; - if (nx >= 0 && nx < MATRIX_SIZE && ny >= 0 && ny < MATRIX_SIZE) { - neoMatrix[nx][ny] = !neoMatrix[nx][ny]; // Toggle each adjacent LED - uint32_t color = neoMatrix[nx][ny] ? LED_COLOR_ON : LED_COLOR_OFF; - trellis.setPixelColor(nx * MATRIX_SIZE + ny, scaleBrightness(color, brightness)); - } - } - } + for (int dx = -1; dx <= 1; ++dx) { + for (int dy = -1; dy <= 1; ++dy) { + int nx = x + dx, ny = y + dy; + if (nx >= 0 && nx < MATRIX_SIZE && ny >= 0 && ny < MATRIX_SIZE) { + neoMatrix[nx][ny] + = !neoMatrix[nx][ny]; // Toggle each adjacent LED + uint32_t color + = neoMatrix[nx][ny] ? LED_COLOR_ON : LED_COLOR_OFF; + trellis.setPixelColor(nx * MATRIX_SIZE + ny, + scaleBrightness(color, brightness)); + } + } + } } - /** * Checks if the NeoPuzzle is solved. * @@ -144,28 +146,28 @@ void setup() { * @throws None */ void set_game_field() { - if (!gamefield) { - bool toggle = false; - for (int i = 0; i < MATRIX_SIZE; i++) { - for (int j = 0; j < MATRIX_SIZE; j++) { - neoMatrix[i][j] = toggle; - uint32_t color = neoMatrix[i][j] ? LED_COLOR_ON : LED_COLOR_OFF; - trellis.setPixelColor(i * MATRIX_SIZE + j, scaleBrightness(color, brightness)); - toggle = !toggle; - } - toggle = !toggle; - } - trellis.show(); - - for (int i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++) { - trellis.activateKey(i, SEESAW_KEYPAD_EDGE_RISING, true); - trellis.activateKey(i, SEESAW_KEYPAD_EDGE_FALLING, true); - trellis.registerCallback(i, buttonCallback); - } - gamefield = true; - } -} + if (!gamefield) { + bool toggle = false; + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + neoMatrix[i][j] = toggle; + uint32_t color = neoMatrix[i][j] ? LED_COLOR_ON : LED_COLOR_OFF; + trellis.setPixelColor(i * MATRIX_SIZE + j, + scaleBrightness(color, brightness)); + toggle = !toggle; + } + toggle = !toggle; + } + trellis.show(); + for (int i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++) { + trellis.activateKey(i, SEESAW_KEYPAD_EDGE_RISING, true); + trellis.activateKey(i, SEESAW_KEYPAD_EDGE_FALLING, true); + trellis.registerCallback(i, buttonCallback); + } + gamefield = true; + } +} pb_global_state_t pb_hook_mod_state_read() { return puzzleState; } @@ -181,30 +183,33 @@ void pb_hook_mod_state_write(pb_global_state_t state) { puzzleState = state; } * @throws None */ void flashCorners(uint32_t color) { - unsigned long currentMillis = millis(); - if (currentMillis - previousMillis >= interval) { - previousMillis = currentMillis; - ledState = !ledState; - color = scaleBrightness(color, brightness); // Scale color brightness - - for (int i = 0; i < MATRIX_SIZE / 4; i++) { - for (int j = 0; j < MATRIX_SIZE / 4; j++) { - int baseIndex = (i * 4 * MATRIX_SIZE) + (j * 4); - if (ledState) { - trellis.setPixelColor(baseIndex, color); - trellis.setPixelColor(baseIndex + 3, color); - trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE, color); - trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE + 3, color); - } else { - trellis.setPixelColor(baseIndex, LED_COLOR_OFF); - trellis.setPixelColor(baseIndex + 3, LED_COLOR_OFF); - trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE, LED_COLOR_OFF); - trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE + 3, LED_COLOR_OFF); - } - } - } - trellis.show(); - } + unsigned long currentMillis = millis(); + if (currentMillis - previousMillis >= interval) { + previousMillis = currentMillis; + ledState = !ledState; + color = scaleBrightness(color, brightness); // Scale color brightness + + for (int i = 0; i < MATRIX_SIZE / 4; i++) { + for (int j = 0; j < MATRIX_SIZE / 4; j++) { + int baseIndex = (i * 4 * MATRIX_SIZE) + (j * 4); + if (ledState) { + trellis.setPixelColor(baseIndex, color); + trellis.setPixelColor(baseIndex + 3, color); + trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE, color); + trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE + 3, + color); + } else { + trellis.setPixelColor(baseIndex, LED_COLOR_OFF); + trellis.setPixelColor(baseIndex + 3, LED_COLOR_OFF); + trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE, + LED_COLOR_OFF); + trellis.setPixelColor(baseIndex + 3 * MATRIX_SIZE + 3, + LED_COLOR_OFF); + } + } + } + trellis.show(); + } } /** |