mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-07-06 11:51:04 -04:00
88 lines
2.6 KiB
C
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; } |