Animation.h now also includes AnimationSlice to show only part of an animation.
This commit is contained in:
@ -33,12 +33,13 @@
|
||||
#include "Animation.h"
|
||||
#include "functions.h"
|
||||
|
||||
Animation::Animation(AnimationData *d, CRGB *bg_color, uint16_t x, uint16_t y) {
|
||||
Animation::Animation(AnimationData *d, CRGB *bg_color, int8_t x, int8_t y) {
|
||||
this->data = d;
|
||||
this->bgColor = bg_color;
|
||||
this->xOffset = x;
|
||||
this->yOffset = y;
|
||||
|
||||
this->endFrame = d->frame_count-1;
|
||||
this->colors = new CRGB[this->data->color_count];
|
||||
uint8_t *color_data = new uint8_t[this->data->color_count * 3];
|
||||
memcpy_P(color_data, this->data->colors, this->data->color_count * 3);
|
||||
@ -88,7 +89,8 @@ bool Animation::advance() {
|
||||
if (this->currentFrameSince == 0) {
|
||||
this->currentFrameSince = millis();
|
||||
} else if (this->currentFrameSince + this->getFrameDelay(currentFrame) < millis() || this->currentFrameSince > millis()) {
|
||||
currentFrame = (currentFrame + 1) % this->data->frame_count;
|
||||
currentFrame++;
|
||||
if (currentFrame > endFrame) currentFrame = startFrame;
|
||||
this->currentFrameSince = millis();
|
||||
return true;
|
||||
}
|
||||
@ -108,3 +110,10 @@ CRGB* Animation::getColor(uint8_t index) {
|
||||
if (index==1) return this->bgColor;
|
||||
else return &this->colors[index - 2];
|
||||
}
|
||||
|
||||
AnimationSlice::AnimationSlice(AnimationData* d, uint8_t start, uint8_t end, CRGB* color, int8_t x, int8_t y) : Animation(d, color, x, y) {
|
||||
if (start <= end && end < d->frame_count) {
|
||||
this->startFrame = start;
|
||||
this->endFrame = end;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user