-
Notifications
You must be signed in to change notification settings - Fork 4
/
Animation.cpp
58 lines (41 loc) · 1.05 KB
/
Animation.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "Animation.hpp"
// Warning: This is a code example for the article "guideline for modular firmware".
// It is code in a transition phase, do not use it as it is!
#include "Display.hpp"
#include "AnimationMode.hpp"
namespace Animation {
const uint8_t cModeCount = 4;
AnimationMode* const gAnimation[] = {
new AnimationModeFade(),
new AnimationModeRoll(AnimationModeRoll::Left),
new AnimationModeRoll(AnimationModeRoll::Right),
new AnimationModeBlink(),
};
Mode gCurrentMode = Mode::Fade;
void initialize()
{
gAnimation[static_cast<uint8_t>(gCurrentMode)]->initialize();
}
void setMode(Mode mode)
{
if (gCurrentMode != mode) {
gCurrentMode = mode;
gAnimation[static_cast<uint8_t>(gCurrentMode)]->initialize();
}
}
void cycleMode(CycleDirection cycleDirection)
{
uint8_t mode = static_cast<uint8_t>(gCurrentMode);
if (cycleDirection == Next) {
++mode;
} else {
--mode;
}
mode &= 0x3;
setMode(static_cast<Mode>(mode));
}
void progress()
{
gAnimation[static_cast<uint8_t>(gCurrentMode)]->progress();
}
}