mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
move gamestates into separate files
This commit is contained in:
parent
d59141bf05
commit
371ae9d642
7 changed files with 175 additions and 123 deletions
35
loading.c
Normal file
35
loading.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include <allegro5/allegro.h>
|
||||
#include <allegro5/allegro_font.h>
|
||||
#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);
|
||||
}
|
4
loading.h
Normal file
4
loading.h
Normal file
|
@ -0,0 +1,4 @@
|
|||
#include "main.h"
|
||||
|
||||
void Loading_Draw(struct Game *game);
|
||||
void Loading_Load(struct Game *game);
|
130
main.c
130
main.c
|
@ -1,120 +1,30 @@
|
|||
#include <stdio.h>
|
||||
#include <allegro5/allegro.h>
|
||||
#include <allegro5/allegro_audio.h>
|
||||
#include <allegro5/allegro_acodec.h>
|
||||
#include <allegro5/allegro_image.h>
|
||||
#include <allegro5/allegro_font.h>
|
||||
#include <allegro5/allegro_ttf.h>
|
||||
#include <math.h>
|
||||
#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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
43
main.h
Normal file
43
main.h
Normal file
|
@ -0,0 +1,43 @@
|
|||
#ifndef MAIN_H
|
||||
#define MAIN_H
|
||||
|
||||
#include <allegro5/allegro.h>
|
||||
#include <allegro5/allegro_audio.h>
|
||||
#include <allegro5/allegro_acodec.h>
|
||||
#include <allegro5/allegro_image.h>
|
||||
#include <allegro5/allegro_font.h>
|
||||
#include <allegro5/allegro_ttf.h>
|
||||
|
||||
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
|
2
make
2
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
|
||||
|
|
78
menu.c
Normal file
78
menu.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
#include <stdio.h>
|
||||
#include <allegro5/allegro.h>
|
||||
#include <allegro5/allegro_font.h>
|
||||
#include <allegro5/allegro_audio.h>
|
||||
#include <math.h>
|
||||
#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();
|
||||
}
|
||||
}
|
6
menu.h
Normal file
6
menu.h
Normal file
|
@ -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);
|
Loading…
Reference in a new issue