mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-08 06:06:43 +01:00
make TM_AddToArgs variadic function
This commit is contained in:
parent
001ed62181
commit
f73b9abd26
7 changed files with 34 additions and 41 deletions
|
@ -64,8 +64,7 @@ bool Stop(struct Game *game, struct TM_Action *action, enum TM_ActionState state
|
|||
|
||||
bool FadeIn(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(float)));
|
||||
action->arguments = TM_AddToArgs(action->arguments, (void*)al_create_bitmap(game->viewport.width, game->viewport.height));
|
||||
action->arguments = TM_AddToArgs(action->arguments, 2, malloc(sizeof(float)), (void*)al_create_bitmap(game->viewport.width, game->viewport.height));
|
||||
}
|
||||
float* fadeloop;
|
||||
ALLEGRO_BITMAP* fade_bitmap;
|
||||
|
@ -94,8 +93,7 @@ bool FadeIn(struct Game *game, struct TM_Action *action, enum TM_ActionState sta
|
|||
|
||||
bool FadeOut(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(float)));
|
||||
action->arguments = TM_AddToArgs(action->arguments, (void*)al_create_bitmap(game->viewport.width, game->viewport.height));
|
||||
action->arguments = TM_AddToArgs(action->arguments, 2, malloc(sizeof(float)), (void*)al_create_bitmap(game->viewport.width, game->viewport.height));
|
||||
}
|
||||
float* fadeloop;
|
||||
ALLEGRO_BITMAP* fade_bitmap;
|
||||
|
@ -126,8 +124,7 @@ bool FadeOut(struct Game *game, struct TM_Action *action, enum TM_ActionState st
|
|||
bool Welcome(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
float* tmp; bool* in;
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(float)));
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(bool)));
|
||||
action->arguments = TM_AddToArgs(action->arguments, 2, malloc(sizeof(float)), malloc(sizeof(bool)));
|
||||
}
|
||||
tmp = (float*)action->arguments->value;
|
||||
in = (bool*)action->arguments->next->value;
|
||||
|
@ -184,17 +181,14 @@ bool PassLevel(struct Game *game, struct TM_Action *action, enum TM_ActionState
|
|||
|
||||
bool Letter(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
if (state == TM_ACTIONSTATE_INIT) {
|
||||
float* f = (float*)malloc(sizeof(float));
|
||||
*f = 0;
|
||||
ALLEGRO_AUDIO_STREAM** stream = (ALLEGRO_AUDIO_STREAM**)malloc(sizeof(ALLEGRO_AUDIO_STREAM*));
|
||||
TM_WrapArg(float, f, 0);
|
||||
TM_WrapArg(ALLEGRO_AUDIO_STREAM*, stream, al_load_audio_stream(GetDataFilePath(game, "levels/1/letter.flac"), 4, 1024));
|
||||
//FIXME: GetLevelFilename
|
||||
//*stream = al_load_audio_stream(GetDataFilePath(game, GetLevelFilename(game, "levels/?/letter.flac")), 4, 1024);
|
||||
*stream = al_load_audio_stream(GetDataFilePath(game, "levels/1/letter.flac"), 4, 1024);
|
||||
al_attach_audio_stream_to_mixer(*stream, game->audio.voice);
|
||||
al_set_audio_stream_playing(*stream, false);
|
||||
al_set_audio_stream_gain(*stream, 2.00); // FIXME: fix audio file instead of gaining it here...
|
||||
action->arguments = TM_AddToArgs(action->arguments, (void*)f);
|
||||
action->arguments = TM_AddToArgs(action->arguments, (void*)stream);
|
||||
action->arguments = TM_AddToArgs(action->arguments, 2, f, stream);
|
||||
action->arguments->next->next = NULL;
|
||||
} else if (state == TM_ACTIONSTATE_DESTROY) {
|
||||
ALLEGRO_AUDIO_STREAM** stream = (ALLEGRO_AUDIO_STREAM**)action->arguments->next->value;
|
||||
|
|
|
@ -60,10 +60,8 @@ void Gamestate_Start(struct Game *game, struct Level1Resources* data) {
|
|||
|
||||
// cutscene goes here */
|
||||
|
||||
struct TM_Arguments *args = TM_AddToArgs(NULL, strdup("level1"));
|
||||
TM_WrapArg(int, level, 1);
|
||||
TM_AddToArgs(args, level);
|
||||
TM_AddAction(&PassLevel, args, "passlevel");
|
||||
TM_AddAction(&PassLevel, TM_AddToArgs(NULL, 2, strdup("level1"), level), "passlevel");
|
||||
|
||||
// init level specific obstacle (owl) for Dodger module
|
||||
struct Obstacle *obst = malloc(sizeof(struct Obstacle));
|
||||
|
|
|
@ -45,11 +45,8 @@ void* Gamestate_Load(struct Game *game, void (*progress)(struct Game*)) {
|
|||
data->moonwalk = Moonwalk_Load(game, LEVEL);
|
||||
(*progress)(game);
|
||||
|
||||
struct TM_Arguments *args = TM_AddToArgs(NULL, strdup(levelx));
|
||||
int* level = malloc(sizeof(int));
|
||||
*level=LEVEL;
|
||||
TM_AddToArgs(args, level);
|
||||
TM_AddAction(&PassLevel, args, "passlevel");
|
||||
TM_WrapArg(int, level, LEVEL);
|
||||
TM_AddAction(&PassLevel, TM_AddToArgs(NULL, 2, strdup(levelx), level), "passlevel");
|
||||
(*progress)(game);
|
||||
|
||||
data->font = al_load_ttf_font(GetDataFilePath(game, "fonts/ShadowsIntoLight.ttf"),game->viewport.height*0.09,0 );
|
||||
|
|
|
@ -93,7 +93,7 @@ bool Run(struct Game *game, struct TM_Action *action, enum TM_ActionState state)
|
|||
bool GenerateObstacles(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||
int* count;
|
||||
if (!action->arguments) {
|
||||
action->arguments = TM_AddToArgs(action->arguments, malloc(sizeof(int)));
|
||||
action->arguments = TM_AddToArgs(action->arguments, 1, malloc(sizeof(int)));
|
||||
}
|
||||
count = (int*)action->arguments->value;
|
||||
if (state == TM_ACTIONSTATE_INIT) {
|
||||
|
|
|
@ -86,7 +86,7 @@ struct Moonwalk* Moonwalk_Load(struct Game *game, int current_level) {
|
|||
al_set_sample_instance_playmode(data->music, ALLEGRO_PLAYMODE_LOOP);
|
||||
|
||||
TM_Init(game);
|
||||
TM_AddAction(&DoMoonwalk, TM_AddToArgs(NULL, data->derpy), "moonwalk");
|
||||
TM_AddAction(&DoMoonwalk, TM_AddToArgs(NULL, 1, data->derpy), "moonwalk");
|
||||
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -266,12 +266,8 @@ bool runinbackground(struct Game* game, struct TM_Action* action, enum TM_Action
|
|||
}
|
||||
|
||||
struct TM_Action* TM_AddQueuedBackgroundAction(bool (*func)(struct Game*, struct TM_Action*, enum TM_ActionState), struct TM_Arguments* args, int delay, char* name) {
|
||||
struct TM_Arguments* arguments = TM_AddToArgs(NULL, (void*) func);
|
||||
arguments = TM_AddToArgs(arguments, malloc(sizeof(int)));
|
||||
arguments = TM_AddToArgs(arguments, NULL);
|
||||
*(int*)(arguments->next->value) = delay;
|
||||
arguments->next->next->value = strdup(name);
|
||||
|
||||
TM_WrapArg(int, del, delay);
|
||||
struct TM_Arguments* arguments = TM_AddToArgs(NULL, 3, (void*) func, del, strdup(name));
|
||||
arguments->next->next->next = args;
|
||||
return TM_AddAction(*runinbackground, arguments, "TM_BackgroundAction");
|
||||
}
|
||||
|
@ -343,20 +339,28 @@ void TM_Destroy(void) {
|
|||
game = NULL;
|
||||
}
|
||||
|
||||
struct TM_Arguments* TM_AddToArgs(struct TM_Arguments* args, void* arg) {
|
||||
struct TM_Arguments* TM_AddToArgs(struct TM_Arguments* args, int num, ...) {
|
||||
|
||||
va_list ap;
|
||||
int i;
|
||||
va_start(ap, num);
|
||||
struct TM_Arguments* tmp = args;
|
||||
if (!args) {
|
||||
tmp = malloc(sizeof(struct TM_Arguments));
|
||||
tmp->value = arg;
|
||||
tmp->next = NULL;
|
||||
return tmp;
|
||||
for(i = 0; i < num; i++) {
|
||||
if (!tmp) {
|
||||
tmp = malloc(sizeof(struct TM_Arguments));
|
||||
tmp->value = va_arg(ap, void*);
|
||||
tmp->next = NULL;
|
||||
args = tmp;
|
||||
} else {
|
||||
while (tmp->next) {
|
||||
tmp = tmp->next;
|
||||
}
|
||||
tmp->next = malloc(sizeof(struct TM_Arguments));
|
||||
tmp->next->value = va_arg(ap, void*);
|
||||
tmp->next->next = NULL;
|
||||
}
|
||||
}
|
||||
while (tmp->next) {
|
||||
tmp = tmp->next;
|
||||
}
|
||||
tmp->next = malloc(sizeof(struct TM_Arguments));
|
||||
tmp->next->value = arg;
|
||||
tmp->next->next = NULL;
|
||||
va_end(ap);
|
||||
return args;
|
||||
}
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ void TM_AddDelay(int delay);
|
|||
/*! \brief Destroy timeline. */
|
||||
void TM_Destroy(void);
|
||||
/*! \brief Add data to TM_Arguments queue. */
|
||||
struct TM_Arguments* TM_AddToArgs(struct TM_Arguments* args, void* arg);
|
||||
struct TM_Arguments* TM_AddToArgs(struct TM_Arguments* args, int num, ...);
|
||||
/*! \brief Destroy TM_Arguments queue. */
|
||||
void TM_DestroyArgs(struct TM_Arguments* args);
|
||||
/*! \brief Check if timeline is initialised. */
|
||||
|
|
Loading…
Reference in a new issue