Added basic square pattern animation. Unfortunately, it did not turn out to be as beautiful as intended. Borg displays can be limiting at times...
This commit is contained in:
parent
96ff16629c
commit
663443055c
|
@ -69,6 +69,10 @@ ifeq ($(ANIMATION_BLACKHOLE),y)
|
||||||
SRC += blackhole.c
|
SRC += blackhole.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(ANIMATION_SQUARES),y)
|
||||||
|
SRC += squares.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(ANIMATION_TIME),y)
|
ifeq ($(ANIMATION_TIME),y)
|
||||||
SRC += borg_time.c
|
SRC += borg_time.c
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -70,6 +70,8 @@ comment "Animations"
|
||||||
|
|
||||||
bool "Black Hole" ANIMATION_BLACKHOLE
|
bool "Black Hole" ANIMATION_BLACKHOLE
|
||||||
|
|
||||||
|
dep_bool "Squares" ANIMATION_SQUARES $RANDOM_SUPPORT
|
||||||
|
|
||||||
comment "Special Animations"
|
comment "Special Animations"
|
||||||
bool "Test Animations" ANIMATION_TESTS
|
bool "Test Animations" ANIMATION_TESTS
|
||||||
bool "Display off mode" ANIMATION_OFF
|
bool "Display off mode" ANIMATION_OFF
|
||||||
|
|
|
@ -0,0 +1,67 @@
|
||||||
|
/**
|
||||||
|
* \defgroup squares Square patterns for the Borg.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file squares.c
|
||||||
|
* @brief Moves layers of translucent checker boards over each other.
|
||||||
|
* @author Christian Kroll
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "../config.h"
|
||||||
|
#include "../util.h"
|
||||||
|
#include "../pixel.h"
|
||||||
|
#include "../random/prng.h"
|
||||||
|
#include "squares.h"
|
||||||
|
|
||||||
|
#define STEP_WIDTH (NUMPLANE * 2u)
|
||||||
|
#define TICK 150
|
||||||
|
#define CYCLES 200u
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves layers of translucent checker boards over each other.
|
||||||
|
*/
|
||||||
|
void squares(void) {
|
||||||
|
// add a rotating color map for smooth transitions
|
||||||
|
uint8_t nColorMap[NUMPLANE * 2];
|
||||||
|
for (uint8_t i = 0; i < (((NUMPLANE + 1) * 2) - 1); ++i) {
|
||||||
|
if (i < (NUMPLANE + 1)) {
|
||||||
|
nColorMap[i] = i;
|
||||||
|
} else {
|
||||||
|
nColorMap[i] = (NUMPLANE * 2) - i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t nOffsets[NUMPLANE] = {0};
|
||||||
|
uint8_t nColOffset = 0;
|
||||||
|
for (uint8_t nCount = CYCLES; nCount--;) {
|
||||||
|
for (uint8_t x = 0; x < NUM_COLS ; ++x) {
|
||||||
|
for (uint8_t y = 0; y < NUM_ROWS; ++y) {
|
||||||
|
uint8_t nColor = 0;
|
||||||
|
for (uint8_t nLayer = 0; nLayer < NUMPLANE; ++nLayer) {
|
||||||
|
nColor += (((x + nOffsets[nLayer]) / STEP_WIDTH) + ((y +
|
||||||
|
nOffsets[nLayer] + STEP_WIDTH) / STEP_WIDTH)) % 2u;
|
||||||
|
}
|
||||||
|
setpixel((pixel){x, y},
|
||||||
|
nColorMap[(nColOffset + nColor) % (2* NUMPLANE)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add randomly calculated offsets to each layer starting points
|
||||||
|
for (uint8_t i = 0; i < NUMPLANE; ++i) {
|
||||||
|
nOffsets[i] = (nOffsets[i] + random8()) & STEP_WIDTH;
|
||||||
|
}
|
||||||
|
// rotate color map
|
||||||
|
nColOffset = (nColOffset + 1) % (NUMPLANE * 2);
|
||||||
|
|
||||||
|
// pause for a moment to ensure that frame transitions are visible
|
||||||
|
wait(TICK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@}*/
|
|
@ -0,0 +1,19 @@
|
||||||
|
/**
|
||||||
|
* \addtogroup squares
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file squares.h
|
||||||
|
* @brief Moves layers of translucent checker boards over each other.
|
||||||
|
* @author Christian Kroll
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SQUARES_H_
|
||||||
|
#define SQUARES_H_
|
||||||
|
|
||||||
|
void squares(void);
|
||||||
|
|
||||||
|
#endif /* SQUARES_H_ */
|
||||||
|
|
||||||
|
/*@}*/
|
|
@ -20,6 +20,7 @@
|
||||||
#include "animations/fpmath_patterns.h"
|
#include "animations/fpmath_patterns.h"
|
||||||
#include "animations/mherweg.h"
|
#include "animations/mherweg.h"
|
||||||
#include "animations/blackhole.h"
|
#include "animations/blackhole.h"
|
||||||
|
#include "animations/squares.h"
|
||||||
#ifdef ANIMATION_TIME
|
#ifdef ANIMATION_TIME
|
||||||
#include "animations/borg_time.h"
|
#include "animations/borg_time.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -240,6 +241,12 @@ void display_loop(){
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ANIMATION_SQUARES
|
||||||
|
case 25:
|
||||||
|
squares();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ANIMATION_TESTS
|
#ifdef ANIMATION_TESTS
|
||||||
case 31:
|
case 31:
|
||||||
test_level(1);
|
test_level(1);
|
||||||
|
|
Loading…
Reference in New Issue