fade from/to white; yukkuri image; added missing glColor calls

This commit is contained in:
Andrew "Akari" Alexeyew 2012-08-06 07:17:51 +03:00
parent 8d09a57a2e
commit 31690ef3dc
7 changed files with 41 additions and 11 deletions

BIN
gfx/yukkureimu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

View file

@ -35,8 +35,10 @@ void credits_fill(void) {
credits_add("Special Thanks", 300);
credits_add("ZUN\nfor Touhou Project\nhttp://www16.big.or.jp/~zun/", 300);
// credits_add("Burj Khalifa\nfor the Burj Khalifa photo\nhttp://www.burjkhalifa.ae/", 300);
credits_add("Mochizuki Ado\nfor a nice yukkuri image", 300);
credits_add("...and You!\nfor playing", 300);
credits_add("Visit Us\nhttp://taisei-project.org/\n \nAnd join our IRC channel\n#taisei-project at irc.freenode.net", 500);
credits_add("*", 150);
}
void credits_add(char *data, int time) {
@ -133,9 +135,10 @@ void credits_init(void) {
}
void credits_draw_entry(CreditsEntry *e) {
int time = global.frames - 400, i;
int time = global.frames - 400, i, yukkuri = False;
float first, other = 0, fadein = 1, fadeout = 1;
CreditsEntry *o;
Texture *ytex;
for(o = credits.entries; o != e; ++o)
time -= o->time + CREDITS_ENTRY_FADEOUT;
@ -152,7 +155,12 @@ void credits_draw_entry(CreditsEntry *e) {
if(!fadein || !fadeout)
return;
first = stringheight(e->data[0], _fonts.mainmenu) * 1.2;
if(*(e->data[0]) == '*') {
yukkuri = True;
ytex = get_tex("yukkureimu");
}
first = yukkuri? ytex->trueh * CREDITS_YUKKURI_SCALE : (stringheight(e->data[0], _fonts.mainmenu) * 1.2);
if(e->lines > 1)
other = stringheight(e->data[1], _fonts.standard) * 1.3;
@ -163,9 +171,18 @@ void credits_draw_entry(CreditsEntry *e) {
glTranslatef(0, SCREEN_W * pow(1 - fadeout, 2) * -0.5, 0);
glColor4f(1, 1, 1, fadein * fadeout);
for(i = 0; i < e->lines; ++i)
draw_text(AL_Center, 0, (first + other * (e->lines-1)) * -0.25 + (i? first/4 + other/2 * i : 0), e->data[i], (i? _fonts.standard : _fonts.mainmenu));
for(i = 0; i < e->lines; ++i) {
if(yukkuri && !i) {
glPushMatrix();
glScalef(CREDITS_YUKKURI_SCALE, CREDITS_YUKKURI_SCALE, 1.0);
draw_texture_p(0, (first + other * (e->lines-1)) / -8 + 10 * sin(global.frames / 10.0) * fadeout * fadein, ytex);
glPopMatrix();
} else draw_text(AL_Center, 0,
(first + other * (e->lines-1)) * -0.25 + (i? first/4 + other/2 * i : 0) + (yukkuri? other*2.5 : 0), e->data[i],
(i? _fonts.standard : _fonts.mainmenu));
}
glPopMatrix();
glColor4f(1, 1, 1, 1);
}
void credits_draw(void) {
@ -191,14 +208,13 @@ void credits_draw(void) {
glPushMatrix();
glColor4f(1, 1, 1, credits.panelalpha * 0.7);
glTranslatef(SCREEN_W/4*3, SCREEN_H/2, 0);
glColor4f(1, 1, 1, 1);
int i; for(i = 0; i < credits.ecount; ++i)
credits_draw_entry(&(credits.entries[i]));
glPopMatrix();
fade_out(1 - (global.frames / 300.0));
fade_out(credits.fadeout);
colorfill(1, 1, 1, 1 - (global.frames / 300.0));
colorfill(1, 1, 1, credits.fadeout);
}
void credits_process(void) {
@ -257,5 +273,6 @@ void credits_loop(void) {
SDL_GL_SwapBuffers();
frame_rate(&global.lasttime);
}
global.whitefade = 1.0;
credits_free();
}

View file

@ -14,5 +14,6 @@ void credits_add(char*, int);
#define CREDITS_ENTRY_FADEIN 200.0
#define CREDITS_ENTRY_FADEOUT 100.0
#define CREDITS_YUKKURI_SCALE 0.5
#endif

View file

@ -87,10 +87,10 @@ void set_ortho() {
glDisable(GL_DEPTH_TEST);
}
void fade_out(float f) {
if(f == 0) return;
void colorfill(float r, float g, float b, float a) {
if(a <= 0) return;
glColor4f(0,0,0,f);
glColor4f(r,g,b,a);
glPushMatrix();
glScalef(SCREEN_W,SCREEN_H,1);
@ -102,6 +102,10 @@ void fade_out(float f) {
glColor4f(1,1,1,1);
}
void fade_out(float f) {
colorfill(0, 0, 0, f);
}
inline double psin(double x) {
return 0.5 + 0.5 * sin(x);
}

View file

@ -121,6 +121,8 @@ typedef struct {
RandomState rand_game;
RandomState rand_visual;
float whitefade; // hack for credits --> main transition
} Global;
extern Global global;
@ -131,6 +133,7 @@ void game_over();
void frame_rate(int *lasttime);
void calc_fps(FPSCounter *fps);
void set_ortho();
void colorfill(float r, float g, float b, float a);
void fade_out(float f);
void global_processevent(SDL_Event*);

View file

@ -137,6 +137,10 @@ void draw_main_menu(MenuData *menu) {
menu->drawdata[2] += (35*menu->cursor - menu->drawdata[2])/10.0;
fade_out(menu->fade);
if(global.whitefade > 0) {
colorfill(1, 1, 1, global.whitefade);
global.whitefade -= 1 / 300.0;
} else global.whitefade = 0;
}
void main_menu_loop(MenuData *menu) {

View file

@ -97,6 +97,7 @@ void menu_logic(MenuData *menu) {
menu->fade = 1;
if(menu->quit == 1 && menu->fade >= 1.0) {
global.whitefade = 0;
menu->quit = menu->type == MT_Transient ? 2 : 0;
if(menu->selected != -1 && menu->entries[menu->selected].action != NULL)
menu->entries[menu->selected].action(menu->entries[menu->selected].arg);