Transition tweaks
This commit is contained in:
parent
57053210dd
commit
a36d18d156
5 changed files with 45 additions and 24 deletions
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue