diff --git a/include/Animation.h b/include/Animation.h index 14a2f2f..3a39053 100644 --- a/include/Animation.h +++ b/include/Animation.h @@ -43,7 +43,7 @@ class Animation { uint8_t* animation_data; CRGB* colors; CRGB* fgColor; - CRGB* bgColor; + CRGB* bgColor = new CRGB(0x000000); int8_t xOffset = 0; int8_t yOffset = 0; uint8_t startFrame; @@ -54,34 +54,17 @@ class Animation { void drawPixel(int index, CRGB* color); uint16_t getFrameDelay(int frame); public: - Animation(AnimationData* d) : Animation(d, new CRGB(0x000000), 0, 0) {}; - Animation(AnimationData* d, CRGB* bg_color): Animation(d, bg_color, 0, 0) {}; - Animation(AnimationData* d, CRGB* bg_color, int8_t xOffset, int8_t yOffset); + Animation(AnimationData* d); + void setFgColor(CRGB*); + 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(); void draw(); void drawFrame(); 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); -}; diff --git a/src/Animation.cpp b/src/Animation.cpp index f7432a1..3fce3b9 100644 --- a/src/Animation.cpp +++ b/src/Animation.cpp @@ -33,11 +33,8 @@ #include "Animation.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->bgColor = bg_color; - this->xOffset = x; - this->yOffset = y; this->endFrame = d->frame_count-1; 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); } +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() { delete this->colors; delete this->animation_data; @@ -108,12 +148,6 @@ uint16_t Animation::getFrameDelay(int frame) { CRGB* Animation::getColor(uint8_t index) { if (index==1) return this->bgColor; + else if (this->fgColor) return this->fgColor; 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; - } -} diff --git a/src/effect_animation.cpp b/src/effect_animation.cpp index 18c7dc5..131b0e6 100644 --- a/src/effect_animation.cpp +++ b/src/effect_animation.cpp @@ -9,7 +9,9 @@ AnimationEffect::AnimationEffect(AnimationData* anim, CRGB* bg, int x, int y) { } 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() {