diff options
| author | robojumper <robojumper@gmail.com> | 2024-06-16 11:56:52 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2024-06-16 11:56:52 +0200 |
| commit | 22edfeae16eedf3d5c65f219212ff5bf2675ae66 (patch) | |
| tree | dddda004b144e4b1d915577c788b130f9d290860 /src/m/m_fader_base.cpp | |
| parent | a1871d7d9470915899b981491e25bc2269cc8e19 (diff) | |
m_faders
Diffstat (limited to 'src/m/m_fader_base.cpp')
| -rw-r--r-- | src/m/m_fader_base.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/m/m_fader_base.cpp b/src/m/m_fader_base.cpp new file mode 100644 index 00000000..ae5c182b --- /dev/null +++ b/src/m/m_fader_base.cpp @@ -0,0 +1,68 @@ +#include <m/m_fader_base.h> + +mFaderBase_c::mFaderBase_c(const mColor &color, EStatus status) : mFlag(0), mFrame(20), mElapsed(0) { + setColor(color); + mFlag |= FLAG_2; + + switch (status) { + case FADED_OUT: + mStatus = FADED_OUT; + break; + case FADED_IN: + mStatus = FADED_IN; + break; + } +} + +mFaderBase_c::~mFaderBase_c() {} + +void mFaderBase_c::setFrame(u16 frame) { + mFrame = frame; +} + +void mFaderBase_c::setColor(const mColor &newColor) { + mFaderColor.r = newColor.r; + mFaderColor.g = newColor.g; + mFaderColor.b = newColor.b; +} + +mFaderBase_c::EStatus mFaderBase_c::getStatus() const { + return mStatus; +} + +bool mFaderBase_c::fadeIn() { + bool canFadeIn = mStatus == FADED_OUT; + if (canFadeIn) { + mStatus = FADING_IN; + mElapsed = 0; + } + + return canFadeIn; +} + +bool mFaderBase_c::fadeOut() { + bool canFadeOut = mStatus == FADED_IN; + if (canFadeOut) { + mStatus = FADING_OUT; + mElapsed = 0; + } + + return canFadeOut; +} + +u8 mFaderBase_c::calc() { + u8 result = 0; + if (mStatus == FADING_IN) { + if (mElapsed++ > mFrame) { + mStatus = FADED_IN; + result = (mFlag & FLAG_1) != 0; + } + } else if (mStatus == FADING_OUT) { + if (++mElapsed > mFrame + 1) { + mStatus = FADED_OUT; + result = (mFlag & FLAG_2) != 0; + } + } + + return result; +} |
