#include #include #include #include "pico/stdlib.h" #include "libraries/pico_graphics/pico_graphics.hpp" #include "galactic_unicorn.hpp" #include "okcolor.hpp" using namespace pimoroni; PicoGraphics_PenRGB888 graphics(53, 11, nullptr); GalacticUnicorn galactic_unicorn; // extra row of pixels for sourcing flames and averaging float heat[53][13] = {0.0f}; int main() { stdio_init_all(); galactic_unicorn.init(); while(true) { if(galactic_unicorn.is_pressed(galactic_unicorn.SWITCH_BRIGHTNESS_UP)) { galactic_unicorn.adjust_brightness(+0.01); } if(galactic_unicorn.is_pressed(galactic_unicorn.SWITCH_BRIGHTNESS_DOWN)) { galactic_unicorn.adjust_brightness(-0.01); } graphics.set_pen(0, 0, 0); graphics.clear(); for(int y = 0; y < 12; y++) { for(int x = 0; x < 53; x++) { if(heat[x][y] > 0.5f) { graphics.set_pen(255, 255, 180); graphics.pixel(Point(x, y)); }else if(heat[x][y] > 0.4f) { graphics.set_pen(220, 160, 0); graphics.pixel(Point(x, y)); }else if(heat[x][y] > 0.3f) { graphics.set_pen(180, 50, 0); graphics.pixel(Point(x, y)); }else if(heat[x][y] > 0.2f) { graphics.set_pen(40, 40, 40); graphics.pixel(Point(x, y)); } // update this pixel by averaging the below pixels if(x == 0) { heat[x][y] = (heat[x][y] + heat[x][y + 2] + heat[x][y + 1] + heat[x + 1][y + 1]) / 4.0f; } else if(x == 52) { heat[x][y] = (heat[x][y] + heat[x][y + 2] + heat[x][y + 1] + heat[x - 1][y + 1]) / 4.0f; } else { heat[x][y] = (heat[x][y] + heat[x][y + 2] + heat[x][y + 1] + heat[x - 1][y + 1] + heat[x + 1][y + 1]) / 5.0f; } heat[x][y] -= 0.01f; heat[x][y] = heat[x][y] < 0.0f ? 0.0f: heat[x][y]; } } galactic_unicorn.update(&graphics); // clear the bottom row and then add a new fire seed to it for(int x = 0; x < 53; x++) { heat[x][11] = 0.0f; } // add a new random heat source for(int c = 0; c < 5; c++) { int px = (rand() % 51) + 1; heat[px][11] = 1.0f; heat[px + 1][11] = 1.0f; heat[px - 1][11] = 1.0f; heat[px][12] = 1.0f; heat[px + 1][12] = 1.0f; heat[px - 1][12] = 1.0f; } sleep_ms(50); } return 0; }