From 371ae9d6424aa865f8cf97b61c6efdf6e484861b Mon Sep 17 00:00:00 2001 From: Sebastian Krzyszkowiak Date: Thu, 16 Feb 2012 15:40:58 +0100 Subject: [PATCH] move gamestates into separate files --- loading.c | 35 +++++++++++++++ loading.h | 4 ++ main.c | 130 ++++-------------------------------------------------- main.h | 43 ++++++++++++++++++ make | 2 +- menu.c | 78 ++++++++++++++++++++++++++++++++ menu.h | 6 +++ 7 files changed, 175 insertions(+), 123 deletions(-) create mode 100644 loading.c create mode 100644 loading.h create mode 100644 main.h create mode 100644 menu.c create mode 100644 menu.h diff --git a/loading.c b/loading.c new file mode 100644 index 0000000..aac1dfe --- /dev/null +++ b/loading.c @@ -0,0 +1,35 @@ +#include +#include +#include "loading.h" + +void Loading_Draw(struct Game *game) { + for(int fadeloop=0; fadeloop<256; fadeloop+=10){ + al_draw_tinted_bitmap(game->loading.loading_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); + al_flip_display(); + } + + al_draw_bitmap(game->loading.loading_bitmap,0,0,0); + al_flip_display(); + + PreloadGameState(game); + for(int fadeloop=255; fadeloop>0; fadeloop-=10){ + al_draw_tinted_bitmap(game->loading.loading_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); + al_flip_display(); + } + al_clear_to_color(al_map_rgb(0,0,0)); + al_flip_display(); + //al_rest(0.2); + LoadGameState(game); +} + +void Loading_Load(struct Game *game) { + game->loading.image = al_load_bitmap( "loading.png" ); + + // Scale "Loading" bitmap + game->loading.loading_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); + al_set_target_bitmap(game->loading.loading_bitmap); + al_draw_scaled_bitmap(game->loading.image,0, 0, al_get_bitmap_width(game->loading.image), al_get_bitmap_height(game->loading.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0); + al_draw_text(game->font, al_map_rgb(255,255,255), 30, al_get_display_height(game->display)-120, ALLEGRO_ALIGN_LEFT, "Loading..."); + al_set_target_bitmap(al_get_backbuffer(game->display)); + al_destroy_bitmap(game->loading.image); +} \ No newline at end of file diff --git a/loading.h b/loading.h new file mode 100644 index 0000000..25e1a42 --- /dev/null +++ b/loading.h @@ -0,0 +1,4 @@ +#include "main.h" + +void Loading_Draw(struct Game *game); +void Loading_Load(struct Game *game); \ No newline at end of file diff --git a/main.c b/main.c index a5fca2f..ae7a6e4 100644 --- a/main.c +++ b/main.c @@ -1,120 +1,30 @@ #include -#include -#include -#include -#include -#include -#include -#include +#include "menu.h" +#include "loading.h" float FPS = 40; int DISPLAY_WIDTH = 800; int DISPLAY_HEIGHT = 500; bool FULLSCREEN = true; -enum gamestate_enum { - GAMESTATE_LOADING, - GAMESTATE_MENU -}; - -struct Menu { - ALLEGRO_BITMAP *menu_bitmap, *menu_fade_bitmap, *image; - ALLEGRO_BITMAP *cloud_bitmap, *cloud; - ALLEGRO_BITMAP *pinkcloud_bitmap, *pinkcloud; - float cloud_position; - ALLEGRO_SAMPLE *sample; -}; - -struct Loading { - ALLEGRO_BITMAP *loading_bitmap, *image; -}; - -struct Game { - ALLEGRO_DISPLAY *display; - ALLEGRO_FONT *font; - enum gamestate_enum gamestate; - enum gamestate_enum loadstate; - ALLEGRO_EVENT_QUEUE *event_queue; - ALLEGRO_TIMER *timer; - struct Menu menu; - struct Loading loading; -}; - void PreloadGameState(struct Game *game) { if (game->loadstate==GAMESTATE_MENU) { - game->menu.cloud_position = 100; - game->menu.image = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); //FIXME: WHYYYYYYY? - game->menu.image = al_load_bitmap( "menu.png" ); - - game->menu.sample = al_load_sample( "menu.wav" ); - game->menu.cloud = al_load_bitmap( "cloud.png" ); - game->menu.pinkcloud = al_load_bitmap( "pinkcloud.png" ); - - if (!game->menu.sample){ - fprintf(stderr, "Audio clip sample not loaded!\n" ); - exit(-1); - } - - // Scale menu bitmap - game->menu.menu_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); - game->menu.menu_fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); - al_set_target_bitmap(game->menu.menu_bitmap); - al_draw_scaled_bitmap(game->menu.image,0, 0, al_get_bitmap_width(game->menu.image), al_get_bitmap_height(game->menu.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0); - al_destroy_bitmap(game->menu.image); - - al_set_target_bitmap(game->menu.menu_fade_bitmap); - al_clear_to_color(al_map_rgb(183,234,193)); - al_draw_bitmap(game->menu.menu_bitmap,0, 0, 0); - - // Cloud menu bitmap - game->menu.cloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.25); - al_set_target_bitmap(game->menu.cloud_bitmap); - al_draw_scaled_bitmap(game->menu.cloud,0, 0, al_get_bitmap_width(game->menu.cloud), al_get_bitmap_height(game->menu.cloud), 0, 0, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap),0); - al_destroy_bitmap(game->menu.cloud); - - game->menu.pinkcloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.33125, al_get_display_height(game->display)*0.8122); - al_set_target_bitmap(game->menu.pinkcloud_bitmap); - al_draw_scaled_bitmap(game->menu.pinkcloud,0, 0, al_get_bitmap_width(game->menu.pinkcloud), al_get_bitmap_height(game->menu.pinkcloud), 0, 0, al_get_bitmap_width(game->menu.pinkcloud_bitmap), al_get_bitmap_height(game->menu.pinkcloud_bitmap),0); - al_destroy_bitmap(game->menu.pinkcloud); - - al_set_target_bitmap(game->menu.menu_fade_bitmap); - al_draw_bitmap(game->menu.pinkcloud_bitmap,al_get_display_width(game->display)*0.132, 0,0); - al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.2, ALLEGRO_ALIGN_CENTRE, "Super Derpy"); - - al_set_target_bitmap(al_get_backbuffer(game->display)); - + Menu_Preload(game); } } void UnloadGameState(struct Game *game) { if (game->gamestate==GAMESTATE_MENU) { - al_destroy_sample(game->menu.sample); - for(int fadeloop=255; fadeloop>=0; fadeloop-=10){ - al_draw_tinted_bitmap(game->menu.menu_fade_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); - al_flip_display(); - } - al_destroy_bitmap(game->menu.menu_fade_bitmap); + Menu_Unload(game); } } void LoadGameState(struct Game *game) { if (game->loadstate==GAMESTATE_MENU) { - al_play_sample(game->menu.sample, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_LOOP, NULL); - for(int fadeloop=0; fadeloop<256; fadeloop+=10){ - al_draw_tinted_bitmap(game->menu.menu_fade_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); - al_flip_display(); - } + Menu_Load(game); } else if (game->loadstate==GAMESTATE_LOADING) { - game->loading.image = al_load_bitmap( "loading.png" ); - - // Scale "Loading" bitmap - game->loading.loading_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); - al_set_target_bitmap(game->loading.loading_bitmap); - al_draw_scaled_bitmap(game->loading.image,0, 0, al_get_bitmap_width(game->loading.image), al_get_bitmap_height(game->loading.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0); - al_draw_text(game->font, al_map_rgb(255,255,255), 30, al_get_display_height(game->display)-120, ALLEGRO_ALIGN_LEFT, "Loading..."); - al_set_target_bitmap(al_get_backbuffer(game->display)); - al_destroy_bitmap(game->loading.image); + Loading_Load(game); } game->gamestate = game->loadstate; game->loadstate = -1; @@ -218,34 +128,10 @@ int main(int argc, char **argv){ if(redraw && al_is_event_queue_empty(game.event_queue)) { redraw = false; if (game.gamestate==GAMESTATE_LOADING) { - for(int fadeloop=0; fadeloop<256; fadeloop+=10){ - al_draw_tinted_bitmap(game.loading.loading_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); - al_flip_display(); - } - - al_draw_bitmap(game.loading.loading_bitmap,0,0,0); - al_flip_display(); - - PreloadGameState(&game); - for(int fadeloop=255; fadeloop>0; fadeloop-=10){ - al_draw_tinted_bitmap(game.loading.loading_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); - al_flip_display(); - } - al_clear_to_color(al_map_rgb(0,0,0)); - al_flip_display(); - //al_rest(0.2); - LoadGameState(&game); + Loading_Draw(&game); } else if (game.gamestate==GAMESTATE_MENU) { - al_clear_to_color(al_map_rgb(183,234,193)); - al_draw_scaled_bitmap(game.menu.cloud_bitmap,0,0,al_get_bitmap_width(game.menu.cloud_bitmap), al_get_bitmap_height(game.menu.cloud_bitmap), al_get_display_width(game.display)*(game.menu.cloud_position-20)/(-75), al_get_display_height(game.display)*0.15, al_get_bitmap_width(game.menu.cloud_bitmap)/2, al_get_bitmap_height(game.menu.cloud_bitmap)/2,0); - al_draw_bitmap(game.menu.menu_bitmap,0, 0,0); - al_draw_bitmap(game.menu.pinkcloud_bitmap,(al_get_display_width(game.display)*0.132) + (cos((game.menu.cloud_position/50+80)*1.74444))*20, 0,0); - al_draw_bitmap(game.menu.cloud_bitmap,al_get_display_width(game.display)*game.menu.cloud_position/100, 30,0); - al_draw_text(game.font, al_map_rgb(255,255,255), al_get_display_width(game.display)*0.5, al_get_display_height(game.display)*0.2, ALLEGRO_ALIGN_CENTRE, "Super Derpy"); - game.menu.cloud_position-=0.2; - if (game.menu.cloud_position<-80) game.menu.cloud_position=100; - al_flip_display(); + Menu_Draw(&game); } } } diff --git a/main.h b/main.h new file mode 100644 index 0000000..4f9a7a2 --- /dev/null +++ b/main.h @@ -0,0 +1,43 @@ +#ifndef MAIN_H +#define MAIN_H + +#include +#include +#include +#include +#include +#include + +enum gamestate_enum { + GAMESTATE_LOADING, + GAMESTATE_MENU +}; + +struct Menu { + ALLEGRO_BITMAP *menu_bitmap, *menu_fade_bitmap, *image; + ALLEGRO_BITMAP *cloud_bitmap, *cloud; + ALLEGRO_BITMAP *pinkcloud_bitmap, *pinkcloud; + float cloud_position; + ALLEGRO_SAMPLE *sample; +}; + +struct Loading { + ALLEGRO_BITMAP *loading_bitmap, *image; +}; + +struct Game { + ALLEGRO_DISPLAY *display; + ALLEGRO_FONT *font; + enum gamestate_enum gamestate; + enum gamestate_enum loadstate; + ALLEGRO_EVENT_QUEUE *event_queue; + ALLEGRO_TIMER *timer; + struct Menu menu; + struct Loading loading; +}; + +void PreloadGameState(struct Game *game); +void UnloadGameState(struct Game *game); +void LoadGameState(struct Game *game); + +#endif \ No newline at end of file diff --git a/make b/make index 629d95d..021286c 100755 --- a/make +++ b/make @@ -1,2 +1,2 @@ #!/bin/sh -gcc main.c -o superderpy -lallegro -lallegro_audio -lallegro_acodec -lallegro_image -lallegro_font -lallegro_ttf -std=gnu99 -g && ./superderpy +gcc main.c menu.c loading.c -o superderpy -lallegro -lallegro_audio -lallegro_acodec -lallegro_image -lallegro_font -lallegro_ttf -std=gnu99 -g && ./superderpy diff --git a/menu.c b/menu.c new file mode 100644 index 0000000..286dc11 --- /dev/null +++ b/menu.c @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include "menu.h" + +void Menu_Draw(struct Game *game) { + al_clear_to_color(al_map_rgb(183,234,193)); + al_draw_scaled_bitmap(game->menu.cloud_bitmap,0,0,al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap), al_get_display_width(game->display)*(game->menu.cloud_position-20)/(-75), al_get_display_height(game->display)*0.15, al_get_bitmap_width(game->menu.cloud_bitmap)/2, al_get_bitmap_height(game->menu.cloud_bitmap)/2,0); + al_draw_bitmap(game->menu.menu_bitmap,0, 0,0); + al_draw_bitmap(game->menu.pinkcloud_bitmap,(al_get_display_width(game->display)*0.132) + (cos((game->menu.cloud_position/50+80)*1.74444))*20, 0,0); + al_draw_bitmap(game->menu.cloud_bitmap,al_get_display_width(game->display)*game->menu.cloud_position/100, 30,0); + al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.2, ALLEGRO_ALIGN_CENTRE, "Super Derpy"); + game->menu.cloud_position-=0.2; + if (game->menu.cloud_position<-80) game->menu.cloud_position=100; + al_flip_display(); +} + +void Menu_Preload(struct Game *game) { + game->menu.cloud_position = 100; + game->menu.image = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); //FIXME: WHYYYYYYY? + game->menu.image = al_load_bitmap( "menu.png" ); + + game->menu.sample = al_load_sample( "menu.wav" ); + game->menu.cloud = al_load_bitmap( "cloud.png" ); + game->menu.pinkcloud = al_load_bitmap( "pinkcloud.png" ); + + if (!game->menu.sample){ + fprintf(stderr, "Audio clip sample not loaded!\n" ); + exit(-1); + } + + // Scale menu bitmap + game->menu.menu_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); + game->menu.menu_fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display)); + al_set_target_bitmap(game->menu.menu_bitmap); + al_draw_scaled_bitmap(game->menu.image,0, 0, al_get_bitmap_width(game->menu.image), al_get_bitmap_height(game->menu.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0); + al_destroy_bitmap(game->menu.image); + + al_set_target_bitmap(game->menu.menu_fade_bitmap); + al_clear_to_color(al_map_rgb(183,234,193)); + al_draw_bitmap(game->menu.menu_bitmap,0, 0, 0); + + // Cloud menu bitmap + game->menu.cloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.25); + al_set_target_bitmap(game->menu.cloud_bitmap); + al_draw_scaled_bitmap(game->menu.cloud,0, 0, al_get_bitmap_width(game->menu.cloud), al_get_bitmap_height(game->menu.cloud), 0, 0, al_get_bitmap_width(game->menu.cloud_bitmap), al_get_bitmap_height(game->menu.cloud_bitmap),0); + al_destroy_bitmap(game->menu.cloud); + + game->menu.pinkcloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.33125, al_get_display_height(game->display)*0.8122); + al_set_target_bitmap(game->menu.pinkcloud_bitmap); + al_draw_scaled_bitmap(game->menu.pinkcloud,0, 0, al_get_bitmap_width(game->menu.pinkcloud), al_get_bitmap_height(game->menu.pinkcloud), 0, 0, al_get_bitmap_width(game->menu.pinkcloud_bitmap), al_get_bitmap_height(game->menu.pinkcloud_bitmap),0); + al_destroy_bitmap(game->menu.pinkcloud); + + al_set_target_bitmap(game->menu.menu_fade_bitmap); + al_draw_bitmap(game->menu.pinkcloud_bitmap,(al_get_display_width(game->display)*0.132) + (cos((82)*1.74444))*20, 0,0); + al_draw_text(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.2, ALLEGRO_ALIGN_CENTRE, "Super Derpy"); + + al_set_target_bitmap(al_get_backbuffer(game->display)); +} + +void Menu_Unload(struct Game *game) { + al_destroy_sample(game->menu.sample); + for(int fadeloop=255; fadeloop>=0; fadeloop-=10){ + al_draw_tinted_bitmap(game->menu.menu_fade_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); + al_flip_display(); + } + al_destroy_bitmap(game->menu.menu_fade_bitmap); +} + +void Menu_Load(struct Game *game) { + al_play_sample(game->menu.sample, 1.0, 0.0, 1.0, ALLEGRO_PLAYMODE_LOOP, NULL); + for(int fadeloop=0; fadeloop<256; fadeloop+=10){ + al_draw_tinted_bitmap(game->menu.menu_fade_bitmap,al_map_rgba_f(fadeloop/255.0,fadeloop/255.0,fadeloop/255.0,1),0,0,0); + al_flip_display(); + } +} \ No newline at end of file diff --git a/menu.h b/menu.h new file mode 100644 index 0000000..3283415 --- /dev/null +++ b/menu.h @@ -0,0 +1,6 @@ +#include "main.h" + +void Menu_Draw(struct Game *game); +void Menu_Preload(struct Game *game); +void Menu_Unload(struct Game *game); +void Menu_Load(struct Game *game); \ No newline at end of file