Transition tweaks

This commit is contained in:
Andrei "Akari" Alexeyev 2017-02-25 15:23:22 +02:00
parent 57053210dd
commit a36d18d156
5 changed files with 45 additions and 24 deletions

View file

@ -217,6 +217,11 @@ void credits_draw(void) {
draw_transition();
}
void credits_finish(void *arg) {
credits.end = 0;
set_transition(TransLoader, 0, FADE_TIME*10);
}
void credits_process(void) {
TIMER(&global.frames);
@ -233,7 +238,7 @@ void credits_process(void) {
}
if(global.frames == credits.end) {
set_transition(TransFadeWhite, CREDITS_FADEOUT, CREDITS_FADEOUT);
set_transition_callback(TransFadeWhite, CREDITS_FADEOUT, CREDITS_FADEOUT, credits_finish, NULL);
}
}
@ -251,7 +256,7 @@ void credits_free(void) {
void credits_loop(void) {
credits_init();
while(global.frames <= credits.end + CREDITS_FADEOUT) {
while(credits.end) {
handle_events(NULL, 0, NULL);
credits_process();
credits_draw();

View file

@ -169,6 +169,8 @@ int main(int argc, char **argv) {
load_resources();
printf("initialization complete.\n");
set_transition(TransLoader, 0, FADE_TIME*2);
atexit(taisei_shutdown);
if(replay_path) {

View file

@ -62,7 +62,6 @@ void main_menu_update_spellpractice(void) {
void begin_main_menu(MenuData *m) {
start_bgm("bgm_menu");
set_transition(TransLoader, 0, FADE_TIME*2);
}
void create_main_menu(MenuData *m) {

View file

@ -11,37 +11,43 @@
Transition transition;
void TransFadeBlack(Transition *t) {
fade_out(t->fade);
void TransFadeBlack(double fade) {
fade_out(fade);
}
void TransFadeWhite(Transition *t) {
colorfill(1,1,1,t->fade);
void TransFadeWhite(double fade) {
colorfill(1, 1, 1, fade);
}
void TransLoader(Transition *t) {
glColor4f(1,1,1,t->fade);
draw_texture(SCREEN_W/2,SCREEN_H/2,"loading");
glColor4f(1,1,1,1);
void TransLoader(double fade) {
glColor4f(1, 1, 1, fade);
draw_texture(SCREEN_W/2, SCREEN_H/2, "loading");
glColor4f(1, 1, 1, 1);
}
void TransMenu(Transition *t) {
glColor4f(1,1,1,t->fade);
void TransMenu(double fade) {
glColor4f(1, 1, 1, fade);
draw_texture(SCREEN_W/2, SCREEN_H/2, "mainmenu/mainmenubg");
glColor4f(1, 1, 1, 1);
}
void TransMenuDark(Transition *t) {
glColor4f(0.3,0.3,0.3,t->fade);
void TransMenuDark(double fade) {
glColor4f(0.3, 0.3, 0.3, fade);
draw_texture(SCREEN_W/2, SCREEN_H/2, "mainmenu/mainmenubg");
glColor4f(1, 1, 1, 1);
}
void TransEmpty(Transition *t) { }
void TransEmpty(double fade) { }
static bool popq(void) {
if(transition.queued.rule) {
transition.rule2 = transition.rule;
transition.rule = transition.queued.rule;
if(transition.state == TRANS_IDLE || transition.rule2 == transition.rule) {
transition.rule2 = NULL;
}
transition.dur1 = transition.queued.dur1;
transition.dur2 = transition.queued.dur2;
transition.callback = transition.queued.callback;
@ -88,6 +94,7 @@ void set_transition_callback(TransitionRule rule, int dur1, int dur2, Transition
if(!initialized) {
popq();
initialized = true;
transition.rule2 = NULL;
}
if(transition.state == TRANS_IDLE || rule == transition.rule) {
@ -109,13 +116,20 @@ void draw_transition(void) {
return;
}
transition.rule(&transition);
transition.rule(transition.fade);
if(transition.rule2 && transition.rule2 != transition.rule) {
transition.rule2(transition.fade);
}
if(transition.state == TRANS_FADE_IN) {
transition.fade = approach(transition.fade, 1.0, 1.0/transition.dur1);
if(transition.fade == 1.0) {
transition.state = TRANS_FADE_OUT;
call_callback();
if(popq()) {
call_callback();
}
}
} else if(transition.state == TRANS_FADE_OUT) {
transition.fade = transition.dur2 ? approach(transition.fade, 0.0, 1.0/transition.dur2) : 0.0;

View file

@ -11,7 +11,7 @@
#include <stdbool.h>
typedef struct Transition Transition;
typedef void (*TransitionRule)(Transition *t);
typedef void (*TransitionRule)(double fade);
typedef void (*TransitionCallback)(void *a);
struct Transition {
@ -28,6 +28,7 @@ struct Transition {
} state;
TransitionRule rule;
TransitionRule rule2;
struct {
int dur1;
@ -40,12 +41,12 @@ struct Transition {
extern Transition transition;
void TransFadeBlack(Transition *t);
void TransFadeWhite(Transition *t);
void TransLoader(Transition *t);
void TransMenu(Transition *t);
void TransMenuDark(Transition *t);
void TransEmpty(Transition *t);
void TransFadeBlack(double fade);
void TransFadeWhite(double fade);
void TransLoader(double fade);
void TransMenu(double fade);
void TransMenuDark(double fade);
void TransEmpty(double fade);
void set_transition(TransitionRule rule, int dur1, int dur2);
void set_transition_callback(TransitionRule rule, int dur1, int dur2, TransitionCallback cb, void *arg);