From cf2bc20b68c228ccbaf486fc446c65cec5381c13 Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Mon, 9 Apr 2012 12:55:04 +0200 Subject: [PATCH] implement and use TM_AddQueuedBackgroundAction --- src/level.c | 9 ++------- src/timeline.c | 17 +++++++++++++++-- src/timeline.h | 1 + 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/level.c b/src/level.c index b812ef9..c0dd709 100644 --- a/src/level.c +++ b/src/level.c @@ -65,12 +65,7 @@ bool Move(struct Game *game, struct TM_Action *action, enum TM_ActionState state } bool Fly(struct Game *game, struct TM_Action *action, enum TM_ActionState state) { - if (state == TM_ACTIONSTATE_INIT) { action->arguments=NULL; return false; } if (state != TM_ACTIONSTATE_RUNNING) return false; - if (!action->arguments) { - action->arguments++; - TM_AddBackgroundAction(&Accelerate, NULL, 0); - } game->level.derpy_y-=0.004; if (game->level.derpy_y>0.2) return false; game->level.handle_input=true; @@ -216,7 +211,6 @@ bool Welcome(struct Game *game, struct TM_Action *action, enum TM_ActionState st free(action->arguments->next->value); TM_DestroyArgs(action->arguments); action->arguments = NULL; - //TM_AddBackgroundAction(&Accelerate, NULL, 1000); } return false; } @@ -249,11 +243,12 @@ void Level_Load(struct Game *game) { TM_Init(game); TM_AddBackgroundAction(&FadeIn, NULL, 0); TM_AddDelay(1000); - TM_AddAction(&Welcome, NULL); + TM_AddQueuedBackgroundAction(&Welcome, NULL, 0); TM_AddAction(&Walk, NULL); TM_AddAction(&Move, NULL); TM_AddAction(&Stop, NULL); TM_AddDelay(5*1000); + TM_AddQueuedBackgroundAction(&Accelerate, NULL, 0); TM_AddAction(&Fly, NULL); // Derpy walks in... (background - owl) // Derpy reads a letter diff --git a/src/timeline.c b/src/timeline.c index 2b18bfe..0ed6361 100644 --- a/src/timeline.c +++ b/src/timeline.c @@ -190,6 +190,21 @@ struct TM_Action* TM_AddBackgroundAction(bool (*func)(struct Game*, struct TM_Ac return action; } +bool runinbackground(struct Game* game, struct TM_Action* action, enum TM_ActionState state) { + if (state != TM_ACTIONSTATE_RUNNING) return false; + float* delay = (float*) action->arguments->next->value; + TM_AddBackgroundAction(action->arguments->value, action->arguments->next->next, *delay); + return true; +} + +struct TM_Action* TM_AddQueuedBackgroundAction(bool (*func)(struct Game*, struct TM_Action*, enum TM_ActionState), struct TM_Arguments* args, float delay) { + struct TM_Arguments* arguments = TM_AddToArgs(NULL, (void*) func); + arguments = TM_AddToArgs(arguments, malloc(sizeof(float))); + *(float*)(arguments->next->value) = delay; + arguments->next->next = args; + return TM_AddAction(*runinbackground, arguments); +} + void TM_AddDelay(float delay) { /*int *tmp; tmp = malloc(sizeof(int)); @@ -306,5 +321,3 @@ bool TM_Initialized() { if (game) return true; return false; } - -// TODO: write TM_AddQueuedBackgroundAction diff --git a/src/timeline.h b/src/timeline.h index 31b8b00..b41017e 100644 --- a/src/timeline.h +++ b/src/timeline.h @@ -55,3 +55,4 @@ void TM_Destroy(); struct TM_Arguments* TM_AddToArgs(struct TM_Arguments* args, void* arg); void TM_DestroyArgs(struct TM_Arguments* args); bool TM_Initialized(); +struct TM_Action* TM_AddQueuedBackgroundAction(bool (*func)(struct Game*, struct TM_Action*, enum TM_ActionState), struct TM_Arguments* args, float delay);