Re-organized Animation code to move from multiple different constructors to one constructor and a handfull of setters for options.
This commit is contained in:
parent
560b71425d
commit
a821985479
@ -43,7 +43,7 @@ class Animation {
|
|||||||
uint8_t* animation_data;
|
uint8_t* animation_data;
|
||||||
CRGB* colors;
|
CRGB* colors;
|
||||||
CRGB* fgColor;
|
CRGB* fgColor;
|
||||||
CRGB* bgColor;
|
CRGB* bgColor = new CRGB(0x000000);
|
||||||
int8_t xOffset = 0;
|
int8_t xOffset = 0;
|
||||||
int8_t yOffset = 0;
|
int8_t yOffset = 0;
|
||||||
uint8_t startFrame;
|
uint8_t startFrame;
|
||||||
@ -54,34 +54,17 @@ class Animation {
|
|||||||
void drawPixel(int index, CRGB* color);
|
void drawPixel(int index, CRGB* color);
|
||||||
uint16_t getFrameDelay(int frame);
|
uint16_t getFrameDelay(int frame);
|
||||||
public:
|
public:
|
||||||
Animation(AnimationData* d) : Animation(d, new CRGB(0x000000), 0, 0) {};
|
Animation(AnimationData* d);
|
||||||
Animation(AnimationData* d, CRGB* bg_color): Animation(d, bg_color, 0, 0) {};
|
void setFgColor(CRGB*);
|
||||||
Animation(AnimationData* d, CRGB* bg_color, int8_t xOffset, int8_t yOffset);
|
void setBgColor(CRGB* bg_color);
|
||||||
|
bool invert();
|
||||||
|
void setOffsets(int8_t x, int8_t y);
|
||||||
|
void setStartFrame(uint8_t sf);
|
||||||
|
void setEndFrame(uint8_t ef);
|
||||||
|
void setFrameRange(uint8_t sf, uint8_t ef);
|
||||||
|
void setSingleFrame(uint8_t frame);
|
||||||
virtual ~Animation();
|
virtual ~Animation();
|
||||||
void draw();
|
void draw();
|
||||||
void drawFrame();
|
void drawFrame();
|
||||||
virtual bool advance();
|
virtual bool advance();
|
||||||
};
|
};
|
||||||
|
|
||||||
class AnimationSlice : public Animation {
|
|
||||||
public:
|
|
||||||
AnimationSlice(AnimationData* d, uint8_t start, uint8_t end) : AnimationSlice(d, start, end, new CRGB(0x000000), 0, 0) {};
|
|
||||||
AnimationSlice(AnimationData* d, uint8_t start, uint8_t end, CRGB* color) : AnimationSlice(d, start, end, color, 0, 0) {};
|
|
||||||
AnimationSlice(AnimationData* d, uint8_t start, uint8_t end, CRGB* color, int8_t x, int8_t y);
|
|
||||||
};
|
|
||||||
|
|
||||||
class Image : public AnimationSlice {
|
|
||||||
public:
|
|
||||||
Image(AnimationData* d) : AnimationSlice(d, 0, 0, new CRGB(0x000000), 0, 0) {};
|
|
||||||
Image(AnimationData* d, CRGB* color) : AnimationSlice(d, 0, 0, color, 0, 0) {};
|
|
||||||
Image(AnimationData* d, CRGB* color, int8_t x, int8_t y) : AnimationSlice(d, 0, 0, color, x, y) {};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Sprite : public Image {
|
|
||||||
protected:
|
|
||||||
virtual CRGB* getColor(uint8_t color_index);
|
|
||||||
public:
|
|
||||||
void setFgColor(CRGB c);
|
|
||||||
void setBgColor(CRGB c);
|
|
||||||
void setColors(CRGB c1, CRGB c2);
|
|
||||||
};
|
|
||||||
|
@ -33,11 +33,8 @@
|
|||||||
#include "Animation.h"
|
#include "Animation.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
|
|
||||||
Animation::Animation(AnimationData *d, CRGB *bg_color, int8_t x, int8_t y) {
|
Animation::Animation(AnimationData *d) {
|
||||||
this->data = d;
|
this->data = d;
|
||||||
this->bgColor = bg_color;
|
|
||||||
this->xOffset = x;
|
|
||||||
this->yOffset = y;
|
|
||||||
|
|
||||||
this->endFrame = d->frame_count-1;
|
this->endFrame = d->frame_count-1;
|
||||||
this->colors = new CRGB[this->data->color_count];
|
this->colors = new CRGB[this->data->color_count];
|
||||||
@ -50,6 +47,49 @@ Animation::Animation(AnimationData *d, CRGB *bg_color, int8_t x, int8_t y) {
|
|||||||
memcpy_P(this->animation_data, this->data->data, length);
|
memcpy_P(this->animation_data, this->data->data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Animation::setFgColor(CRGB* fg_color) {
|
||||||
|
this->fgColor = fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setBgColor(CRGB* bg_color) {
|
||||||
|
this->bgColor = bg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Animation::invert() {
|
||||||
|
if (this->fgColor == NULL) return false;
|
||||||
|
CRGB* temp = this->fgColor;
|
||||||
|
this->fgColor = this->bgColor;
|
||||||
|
this->bgColor = temp;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setOffsets(int8_t x, int8_t y) {
|
||||||
|
this->xOffset = x;
|
||||||
|
this->yOffset = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setStartFrame(uint8_t sf) {
|
||||||
|
if (sf <= this->endFrame && sf < this->data->frame_count ) this->startFrame = sf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setEndFrame(uint8_t ef) {
|
||||||
|
if (ef >= this->startFrame && ef < this->data->frame_count) this->endFrame = ef;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setFrameRange(uint8_t sf, uint8_t ef) {
|
||||||
|
if (sf<=ef && ef < this->data->frame_count) {
|
||||||
|
this->startFrame = sf;
|
||||||
|
this->endFrame = ef;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Animation::setSingleFrame(uint8_t frame) {
|
||||||
|
if (frame < this->data->frame_count) {
|
||||||
|
this->startFrame = frame;
|
||||||
|
this->endFrame = frame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Animation::~Animation() {
|
Animation::~Animation() {
|
||||||
delete this->colors;
|
delete this->colors;
|
||||||
delete this->animation_data;
|
delete this->animation_data;
|
||||||
@ -108,12 +148,6 @@ uint16_t Animation::getFrameDelay(int frame) {
|
|||||||
|
|
||||||
CRGB* Animation::getColor(uint8_t index) {
|
CRGB* Animation::getColor(uint8_t index) {
|
||||||
if (index==1) return this->bgColor;
|
if (index==1) return this->bgColor;
|
||||||
|
else if (this->fgColor) return this->fgColor;
|
||||||
else return &this->colors[index - 2];
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -9,7 +9,9 @@ AnimationEffect::AnimationEffect(AnimationData* anim, CRGB* bg, int x, int y) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AnimationEffect::start() {
|
void AnimationEffect::start() {
|
||||||
this->animation = new Animation(this->animation_data, this->bg_color, this->xOffset, this->yOffset);
|
this->animation = new Animation(this->animation_data);
|
||||||
|
this->animation->setBgColor(this->bg_color);
|
||||||
|
this->animation->setOffsets(this->xOffset, this->yOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnimationEffect::stop() {
|
void AnimationEffect::stop() {
|
||||||
|
Loading…
Reference in New Issue
Block a user