void BlockMap::ResetConnectivity() { for (int r = 0; r < Rows(); r++) { for (int c = 0; c < Cols(); c++) { Block& currBlock = m_BlockMatrix[r][c]; // Set reachable neighbors currBlock.neighborOffsets.clear(); Vector2 lOffset(0, -1); Vector2 rOffset(0, 1); Vector2 tOffset(-1, 0); Vector2 bOffset(1, 0); if (ValidCoord(currBlock.coord + lOffset)) currBlock.neighborOffsets.insert(lOffset); if (ValidCoord(currBlock.coord + rOffset)) currBlock.neighborOffsets.insert(rOffset); if (ValidCoord(currBlock.coord + tOffset)) currBlock.neighborOffsets.insert(tOffset); if (ValidCoord(currBlock.coord + bOffset)) currBlock.neighborOffsets.insert(bOffset); } } }
// Constructor for hardware SPI -- must connect to MOSI, SCK pins Adafruit_DotStar::Adafruit_DotStar(uint16_t n, uint8_t o) : numLEDs(n), dataPin(USE_HW_SPI), brightness(0), pixels(NULL), rOffset(o & 3), gOffset((o >> 2) & 3), bOffset((o >> 4) & 3) { updateLength(n); } // Constructor for 'soft' (bitbang) SPI -- any two pins can be used Adafruit_DotStar::Adafruit_DotStar(uint16_t n, uint8_t data, uint8_t clock, uint8_t o) : dataPin(data), clockPin(clock), brightness(0), pixels(NULL), rOffset(o & 3), gOffset((o >> 2) & 3), bOffset((o >> 4) & 3) { updateLength(n); } Adafruit_DotStar::~Adafruit_DotStar(void) { // Destructor if(pixels) free(pixels); if(dataPin == USE_HW_SPI) hw_spi_end(); else sw_spi_end(); } void Adafruit_DotStar::begin(void) { // Initialize SPI if(dataPin == USE_HW_SPI) hw_spi_init(); else sw_spi_init(); } // Pins may be reassigned post-begin(), so a sketch can store hardware // config in flash, SD card, etc. rather than hardcoded. Also permits // "recycling" LED ram across multiple strips: set pins to first strip, // render & write all data, reassign pins to next strip, render & write, // etc. They won't update simultaneously, but usually unnoticeable. // Change to hardware SPI -- must connect to MOSI, SCK pins void Adafruit_DotStar::updatePins(void) { sw_spi_end(); dataPin = USE_HW_SPI; hw_spi_init(); }