Arduboy-homemade-package/board-package-source/libraries/ArduboyFX/examples/chompies/chompies.ino

86 lines
3.9 KiB
C++

/* *****************************************************************************
* FX drawBitmap test v1.3 by Mr.Blinky Apr 2019-May 2021 licenced under CC0
* *****************************************************************************
*
* The map and whale images used in this example were made by 2bitcrook and are
* licenced under CC-BY-NC-SA licence.
* This test depend on the file fxdata.bin being uploaded to the external FX flash
* chip using the uploader-gui.py or flash-writer.py Python script in the
* development area. When using the flash writer script. Use the following command:
*
* python flash-writer.py -d fxdata.bin
*
* This example uses a 816 by 368 pixel image as background and a
* 107 x 69 image for masked sprite. Both can be moved around using the button combos
* below. This example also shows how you can make use of the different draw modes.
*
*
* A Invert the while sprite from black to white and vice versa
* B Show or hide the coordinates in the top left corner
* D-PAD move around the whale sprite
* D-PAD + A move around the whale sprite in single pixel steps
* D-PAD + B move around the background image
*
******************************************************************************/
#include <Arduboy2.h> // required to build for Arduboy
#include <ArduboyFX.h> // required to access the FX external flash
#include "fxdata.h" // this file contains all references to FX data
#define FRAME_RATE 120
Arduboy2 arduboy;
bool showposition = true;
uint8_t select,color;
int x [2];
int y [2];
void setup() {
arduboy.begin();
arduboy.setFrameRate(FRAME_RATE);
FX::disableOLED(); // OLED must be disabled before external flash is accessed. OLED display should only be enabled prior updating the display.
FX::begin(FX_DATA_PAGE); //external flash chip may be in power down mode so wake it up (Cathy bootloader puts chip into powerdown mode)
}
void loop() {
if (!arduboy.nextFrame()) return;
arduboy.pollButtons();
if (arduboy.justPressed(B_BUTTON)) showposition = !showposition;
if (arduboy.pressed(B_BUTTON)) select = 0;
else select = 1;
if (arduboy.justPressed(A_BUTTON)) color ^= dbmReverse;
if (arduboy.pressed(A_BUTTON))
{
if (arduboy.justPressed(UP_BUTTON)) y[select]--;
if (arduboy.justPressed(DOWN_BUTTON)) y[select]++;
if (arduboy.justPressed(LEFT_BUTTON)) x[select]--;
if (arduboy.justPressed(RIGHT_BUTTON)) x[select]++;
}
else
{
if (arduboy.pressed(UP_BUTTON)) y[select]--;
if (arduboy.pressed(DOWN_BUTTON)) y[select]++;
if (arduboy.pressed(LEFT_BUTTON)) x[select]--;
if (arduboy.pressed(RIGHT_BUTTON)) x[select]++;
}
FX::drawBitmap(x[0],y[0],mapGfx,0,dbmNormal);
FX::drawBitmap(x[1],y[1],whaleGfx,0,dbmMasked | color); // comment this line and uncomment one below to test the drawing modes
//FX::drawBitmap(x[1],y[1],whaleGfx,0,dbmMasked | dbmBlack); // black pixels as drawn solid. White pixels are transparent. Mask is ignored.
//FX::drawBitmap(x[1],y[1],whaleGfx,0,dbmMasked | dbmWhite); // white pixels are drawn solid. Black pixels are transparent. Mask is ignored.
//FX::drawBitmap(x[1],y[1],whaleGfx,0,dbmMasked | dbmInvert); // white pixels are xored together with background pixels. Mask is ignored.
//FX::drawBitmap(x[1],y[1],whaleGfx,0,dbmMasked | dbmReverse); // Inverts the image: white pixels are drawn as black, black pixels are drawn as white pixels. Mask is applied.
if (showposition)
{
arduboy.setCursor(0,0);
arduboy.print(x[select]);
arduboy.setCursor(0,8);
arduboy.print(y[select]);
}
FX::enableOLED(); // only enable OLED for updating the display
arduboy.display(CLEAR_BUFFER); // Using CLEAR_BUFFER will clear the display buffer after it is displayed
FX::disableOLED(); // disable display again so external flash can be accessed at any time
}