summaryrefslogtreecommitdiff
path: root/src/m/m_fader_base.cpp
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2024-06-16 11:56:52 +0200
committerrobojumper <robojumper@gmail.com>2024-06-16 11:56:52 +0200
commit22edfeae16eedf3d5c65f219212ff5bf2675ae66 (patch)
treedddda004b144e4b1d915577c788b130f9d290860 /src/m/m_fader_base.cpp
parenta1871d7d9470915899b981491e25bc2269cc8e19 (diff)
m_faders
Diffstat (limited to 'src/m/m_fader_base.cpp')
-rw-r--r--src/m/m_fader_base.cpp68
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;
+}