libsuperderpy/main.c

148 lines
3.8 KiB
C
Raw Normal View History

2012-02-15 23:57:06 +01:00
#include <stdio.h>
2012-02-16 15:40:58 +01:00
#include "menu.h"
#include "loading.h"
2012-02-15 23:57:06 +01:00
2012-02-16 17:51:52 +01:00
float FPS = 60;
2012-02-15 23:57:06 +01:00
int DISPLAY_WIDTH = 800;
int DISPLAY_HEIGHT = 500;
2012-02-16 12:48:48 +01:00
bool FULLSCREEN = true;
2012-02-15 23:57:06 +01:00
2012-02-16 12:48:48 +01:00
void PreloadGameState(struct Game *game) {
if (game->loadstate==GAMESTATE_MENU) {
2012-02-16 15:40:58 +01:00
Menu_Preload(game);
2012-02-16 12:48:48 +01:00
}
}
void UnloadGameState(struct Game *game) {
if (game->gamestate==GAMESTATE_MENU) {
2012-02-16 15:40:58 +01:00
Menu_Unload(game);
2012-02-16 12:48:48 +01:00
}
}
void LoadGameState(struct Game *game) {
if (game->loadstate==GAMESTATE_MENU) {
2012-02-16 15:40:58 +01:00
Menu_Load(game);
2012-02-15 23:57:06 +01:00
}
2012-02-16 12:48:48 +01:00
else if (game->loadstate==GAMESTATE_LOADING) {
2012-02-16 15:40:58 +01:00
Loading_Load(game);
2012-02-16 12:48:48 +01:00
}
game->gamestate = game->loadstate;
game->loadstate = -1;
2012-02-15 23:57:06 +01:00
}
int main(int argc, char **argv){
2012-02-16 17:05:16 +01:00
srand(time(NULL));
2012-02-15 23:57:06 +01:00
ALLEGRO_DISPLAY_MODE disp_data;
bool redraw = true;
2012-02-16 12:48:48 +01:00
struct Game game;
2012-02-15 23:57:06 +01:00
if(!al_init()) {
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
2012-02-16 12:48:48 +01:00
al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR);
2012-02-15 23:57:06 +01:00
2012-02-16 12:48:48 +01:00
game.timer = al_create_timer(1.0 / FPS);
if(!game.timer) {
2012-02-15 23:57:06 +01:00
fprintf(stderr, "failed to create timer!\n");
return -1;
}
if(!al_init_image_addon()) {
fprintf(stderr, "failed to initialize image addon!\n");
//al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",
// NULL, ALLEGRO_MESSAGEBOX_ERROR);
return 0;
}
if(!al_install_audio()){
fprintf(stderr, "failed to initialize audio!\n");
return -1;
}
if(!al_install_keyboard()){
fprintf(stderr, "failed to initialize keyboard!\n");
return -1;
}
if(!al_init_acodec_addon()){
fprintf(stderr, "failed to initialize audio codecs!\n");
return -1;
}
if (!al_reserve_samples(1)){
fprintf(stderr, "failed to reserve samples!\n");
return -1;
}
2012-02-16 12:48:48 +01:00
al_init_font_addon();
2012-02-15 23:57:06 +01:00
2012-02-16 12:48:48 +01:00
if(!al_init_ttf_addon()){
fprintf(stderr, "failed to initialize fonts!\n");
2012-02-15 23:57:06 +01:00
return -1;
}
2012-02-16 12:48:48 +01:00
if (FULLSCREEN) al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
game.display = al_create_display(DISPLAY_WIDTH, DISPLAY_HEIGHT);
if(!game.display) {
2012-02-15 23:57:06 +01:00
fprintf(stderr, "failed to create display!\n");
return -1;
}
2012-02-16 12:48:48 +01:00
al_set_window_title(game.display, "Super Derpy: Muffin Attack");
al_hide_mouse_cursor(game.display);
2012-02-16 17:56:16 +01:00
game.font = al_load_ttf_font("ShadowsIntoLight.ttf",al_get_display_height(game.display)*0.09,0 );
2012-02-15 23:57:06 +01:00
2012-02-16 12:48:48 +01:00
game.event_queue = al_create_event_queue();
if(!game.event_queue) {
2012-02-15 23:57:06 +01:00
fprintf(stderr, "failed to create event_queue!\n");
2012-02-16 12:48:48 +01:00
al_destroy_display(game.display);
2012-02-15 23:57:06 +01:00
return -1;
}
2012-02-16 12:48:48 +01:00
al_register_event_source(game.event_queue, al_get_display_event_source(game.display));
al_register_event_source(game.event_queue, al_get_timer_event_source(game.timer));
al_register_event_source(game.event_queue, al_get_keyboard_event_source());
2012-02-15 23:57:06 +01:00
al_clear_to_color(al_map_rgb(0,0,0));
al_flip_display();
2012-02-16 12:48:48 +01:00
al_start_timer(game.timer);
2012-02-15 23:57:06 +01:00
2012-02-16 12:48:48 +01:00
game.loadstate = GAMESTATE_LOADING;
PreloadGameState(&game);
LoadGameState(&game);
game.loadstate = GAMESTATE_MENU;
2012-02-15 23:57:06 +01:00
while(1)
{
ALLEGRO_EVENT ev;
2012-02-16 12:48:48 +01:00
al_wait_for_event(game.event_queue, &ev);
2012-02-15 23:57:06 +01:00
if(ev.type == ALLEGRO_EVENT_TIMER) {
redraw = true;
}
else if((ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) || (ev.type == ALLEGRO_EVENT_KEY_DOWN && ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE)) {
break;
}
2012-02-16 12:48:48 +01:00
if(redraw && al_is_event_queue_empty(game.event_queue)) {
2012-02-15 23:57:06 +01:00
redraw = false;
2012-02-16 12:48:48 +01:00
if (game.gamestate==GAMESTATE_LOADING) {
2012-02-16 15:40:58 +01:00
Loading_Draw(&game);
2012-02-15 23:57:06 +01:00
}
2012-02-16 12:48:48 +01:00
else if (game.gamestate==GAMESTATE_MENU) {
2012-02-16 15:40:58 +01:00
Menu_Draw(&game);
2012-02-15 23:57:06 +01:00
}
}
}
2012-02-16 12:48:48 +01:00
UnloadGameState(&game);
al_destroy_timer(game.timer);
al_destroy_display(game.display);
al_destroy_bitmap(game.loading.loading_bitmap);
al_destroy_event_queue(game.event_queue);
2012-02-16 22:18:20 +01:00
al_destroy_font(game.font);
2012-02-15 23:57:06 +01:00
return 0;
}