NerfStatTrak/StateLoseTheGame.cpp
Mark van Renswoude 2e8007d510 Support for gun armed detection
First attempt at implementing animation
2016-12-05 23:42:20 +01:00

87 lines
3.0 KiB
C++

#include "StateLoseTheGame.h"
#include "Globals.h"
#include "StateDefault.h"
#include "SegmentDisplayChars.h"
#define CharPipeLeft SegmentE | SegmentF
#define CharPipeRight SegmentB | SegmentC
struct Frame
{
uint32_t time;
char frame[6];
};
Frame const animation[] = {
// Snake towards the middle
{ 100, { SegmentF, 0, 0, 0, 0, SegmentB } },
{ 100, { SegmentF | SegmentE, 0, 0, 0, 0, SegmentB | SegmentC } },
{ 100, { SegmentE | SegmentD, 0, 0, 0, 0, SegmentC | SegmentD } },
{ 100, { SegmentD | SegmentC, 0, 0, 0, 0, SegmentD | SegmentE } },
{ 100, { SegmentC | SegmentB, 0, 0, 0, 0, SegmentE | SegmentF } },
{ 100, { SegmentB, SegmentF, 0, 0, SegmentB, SegmentF } },
{ 100, { 0, SegmentF | SegmentE, 0, 0, SegmentB | SegmentC, 0 } },
{ 100, { 0, SegmentE | SegmentD, 0, 0, SegmentC | SegmentD, 0 } },
{ 100, { 0, SegmentD | SegmentC, 0, 0, SegmentD | SegmentE, 0 } },
{ 100, { 0, SegmentC | SegmentB, 0, 0, SegmentE | SegmentF, 0 } },
{ 100, { 0, SegmentB, SegmentF, SegmentB, SegmentF, 0 } },
{ 100, { 0, 0, SegmentF | SegmentE, SegmentB | SegmentC, 0, 0 } },
{ 100, { 0, 0, SegmentE | SegmentD, SegmentC | SegmentD, 0, 0 } },
{ 100, { 0, 0, SegmentD | SegmentC, SegmentD | SegmentE, 0, 0 } },
{ 500, { 0, 0, SegmentC | SegmentB, SegmentE | SegmentF, 0, 0 } },
// Slide open to reveal 'you'
{ 100, { 0, 0, CharPipeLeft | CharO, CharU | CharPipeRight, 0, 0 } },
{ 100, { 0, CharPipeRight, CharO, CharU, CharPipeLeft, 0 } },
{ 100, { 0, CharPipeLeft | CharY, CharO, CharU, CharPipeRight, 0 } },
{ 100, { CharPipeRight, CharY, CharO, CharU, 0, CharPipeLeft } },
{ 100, { CharPipeLeft, CharY, CharO, CharU, 0, CharPipeRight } },
{ 500, { 0, CharY, CharO, CharU, 0, 0 } },
// The rest of the text
{ 750, { 0, CharL, CharO, CharS, CharT, 0 } },
{ 750, { 0, 0, CharT, CharH, CharE, 0 } },
{ 500, { SegmentDP, CharG, CharA | SegmentDP, CharM, CharE | SegmentDP, 0 } },
{ 500, { 0, CharG | SegmentDP, CharA, CharM | SegmentDP, CharE, SegmentDP } },
{ 500, { SegmentDP, CharG, CharA | SegmentDP, CharM, CharE | SegmentDP, 0 } },
{ 500, { 0, CharG | SegmentDP, CharA, CharM | SegmentDP, CharE, SegmentDP } },
{ 500, { SegmentDP, CharG, CharA | SegmentDP, CharM, CharE | SegmentDP, 0 } },
{ 500, { 0, CharG | SegmentDP, CharA, CharM | SegmentDP, CharE, SegmentDP } },
{ 500, { SegmentDP, CharG, CharA | SegmentDP, CharM, CharE | SegmentDP, 0 } },
{ 500, { 0, CharG | SegmentDP, CharA, CharM | SegmentDP, CharE, SegmentDP } },
{ 0, { 0, 0, 0, 0, 0, 0 } }
};
void LoseTheGameState::setup()
{
animationTime = currentTime;
animationStep = 0;
}
void LoseTheGameState::loop()
{
if (buttonA->pressed() || buttonB->pressed())
{
setCurrentState(new DefaultState());
}
if (currentTime - animationTime > animation[animationStep].time)
{
animationStep++;
animationTime = currentTime;
if (animation[animationStep].time == 0)
setCurrentState(new DefaultState());
}
display->writeRaw(animation[animationStep].frame);
}