Files
ac-decomp/src/m_fbdemo_fade.c
T
2023-12-09 13:34:31 +01:00

88 lines
2.6 KiB
C

#include "m_fbdemo_fade.h"
#include "libultra/gu.h"
#include "libultra/libultra.h"
#include "m_common_data.h"
Gfx fbdemo_fade_gfx_init[] = {
gsDPPipeSync(),
gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG |
G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR |
G_LOD | G_SHADING_SMOOTH),
gsDPSetOtherMode(G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT |
G_TF_BILERP | G_TT_NONE | G_TL_TILE | G_TD_CLAMP |
G_TP_NONE | G_CYC_1CYCLE | G_PM_1PRIMITIVE,
G_AC_NONE | G_ZS_PIXEL | G_RM_CLD_SURF | G_RM_CLD_SURF2),
gsDPSetCombineMode(G_CC_PRIMITIVE, G_CC_PRIMITIVE),
gsSPEndDisplayList(),
};
fbdemo_fade* fbdemo_fade_init(fbdemo_fade* this) {
bzero(this, sizeof(fbdemo_fade));
return this;
}
void fbdemo_fade_move(fbdemo_fade* this, int rate) {
f32 ftimer;
int alpha;
if (this->timer != 0) {
this->timer -= 1;
return;
}
if (this->type != 7) {
this->frame += rate;
if (this->frame >= Common_Get(transition).fade_rate) {
this->frame = Common_Get(transition).fade_rate;
this->isDone = 1;
}
ftimer = (f32)this->frame;
if (ftimer < 0.0f) {
ftimer = 0.0f;
}
alpha = (255.0f * ftimer) / Common_Get(transition).fade_rate;
if (this->type == 1) {
this->color.a = 255 - alpha;
} else {
this->color.a = alpha;
}
}
}
void fbdemo_fade_draw(fbdemo_fade* this, Gfx** gfxP) {
Gfx* gfx;
if (this->color.a != 0) {
gfx = *gfxP;
gSPDisplayList(gfx++, fbdemo_fade_gfx_init);
gDPSetPrimColor(gfx++, 0, 0, this->color.r, this->color.g, this->color.b,
this->color.a);
gDPFillRectangle(gfx++, 0, 0, N64_SCREEN_WIDTH * 2, N64_SCREEN_HEIGHT * 2);
gDPPipeSync(gfx++);
*gfxP = gfx;
}
}
void fbdemo_fade_startup(fbdemo_fade* this) {
static s8 start_frame[] = {0x00, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static u8 start_color[] = {0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
this->color.a = start_color[this->type];
this->frame = start_frame[this->type];
this->isDone = 0;
if (this->type == 1) {
this->timer = 10;
}
}
void fbdemo_fade_settype(fbdemo_fade* this, int type) { this->type = type; }
void fbdemo_fade_setcolor_rgba8888(fbdemo_fade* this, u32 color) {
this->color.rgba = color;
}
u8 fbdemo_fade_is_finish(fbdemo_fade* this) { return this->isDone; }