64 if (mStatus == Fader::HIDDEN) {
66 }
else if (mStatus == Fader::OPAQUE) {
68 }
else if (mStatus == Fader::FADE_IN) {
69 u16 endFrame = mFrameCount;
70 u16 currFrame = mFrame++;
72 if (currFrame > endFrame) {
73 mStatus = Fader::HIDDEN;
74 result = mFlag.onBit(ColorFader::SIGNAL_ON_FADE_IN);
78 mCurrColor.a = 255 - (currFrame * 255 / mFrameCount);
79 }
else if (mStatus == Fader::FADE_OUT) {
80 u16 endFrame = mFrameCount;
81 u16 currFrame = mFrame++;
83 if (currFrame > endFrame) {
84 if (currFrame > endFrame + 1) {
85 mStatus = Fader::OPAQUE;
86 result = mFlag.onBit(ColorFader::SIGNAL_ON_FADE_OUT);
89 endFrame = mFrameCount;
93 mCurrColor.a = currFrame * 255 / endFrame;
100 if (mCurrColor.a == 0) {
105 C_MTXOrtho(&projMtx, mDims.top, mDims.bottom, mDims.left, mDims.right, 0.0f, 1.0f);
106 GXSetProjection(&projMtx, GX_ORTHOGRAPHIC);
108 GXSetViewport(mDims.left, mDims.top, mDims.GetWidth(), mDims.GetHeight(), 0.0f, 1.0f);
109 GXSetScissor(mDims.left, mDims.top, mDims.GetWidth(), mDims.GetHeight());
113 GXLoadPosMtxImm(&posMtx, 0);
117 GXInvalidateVtxCache();
119 GXSetVtxDesc(GX_VA_POS, GX_VA_TEX0MTXIDX);
120 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
123 GXSetChanMatColor(GX_COLOR0A0, mCurrColor);
124 GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
127 GXSetNumIndStages(0);
128 __GXSetIndirectMask(0);
130 GXSetNumTevStages(1);
131 GXSetTevOp(GX_TEVSTAGE0, 4);
132 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
134 if (mCurrColor.a == 255) {
135 GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
137 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
142 GXSetZMode(0, GX_NEVER, 0);
145 GXBegin(GX_QUADS, GX_VTXFMT0, 4);
147 GXPosition3f32(mDims.left, mDims.top, 0.0f);
148 GXPosition3f32(mDims.right, mDims.top, 0.0f);
149 GXPosition3f32(mDims.right, mDims.bottom, 0.0f);
150 GXPosition3f32(mDims.left, mDims.bottom, 0.0f);