summaryrefslogtreecommitdiff
path: root/src/m/m_fader_base.cpp
blob: e97a8085a8d81600e77727669560470af7787481 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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;
}

bool mFaderBase_c::calc() {
    bool 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;
}