From b183286fdbf9fd0d1ee0f40d5acc7166b3a2a916 Mon Sep 17 00:00:00 2001 From: Allanis <allanis@saracraft.net> Date: Wed, 20 Mar 2013 22:29:07 +0000 Subject: [PATCH] [Add] Preliminary main menu. --- TODO | 1 - src/lephisto.c | 11 +++++++---- src/menu.c | 53 ++++++++++++++++++++++++++++++++++++++++++++------ src/menu.h | 9 ++++++++- src/toolkit.h | 2 +- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/TODO b/TODO index d62a658..8e47c7b 100644 --- a/TODO +++ b/TODO @@ -2,7 +2,6 @@ Vital: -- Missions -- Save -- Allow multiple ships in storage. - -- Main Menu. -- Player faction system. Major: diff --git a/src/lephisto.c b/src/lephisto.c index 3038d79..8c984be 100644 --- a/src/lephisto.c +++ b/src/lephisto.c @@ -26,6 +26,7 @@ #include "sound.h" #include "spfx.h" #include "economy.h" +#include "menu.h" #include "music.h" #define XML_START_ID "Start" @@ -160,8 +161,7 @@ int main(int argc, char** argv) { fleet_load(); space_load(); - // Create new player. TODO: Start menu. - player_new(); + menu_main(); gtime = SDL_GetTicks(); // Init the time. @@ -193,9 +193,12 @@ int main(int argc, char** argv) { fps_control(); // Who doesn't love FPS control? toolkit_update(); // Simulate key repetition. - if(!paused && !toolkit) update_space(); // Update the game. - render_space(); + if(!menu_isOpen(MENU_MAIN)) { + if(!paused && !toolkit) update_space(); // Update the game. + render_space(); + } + if(toolkit) toolkit_render(); SDL_GL_SwapBuffers(); diff --git a/src/menu.c b/src/menu.c index 72b269d..e27cb56 100644 --- a/src/menu.c +++ b/src/menu.c @@ -10,6 +10,9 @@ #include "player.h" #include "menu.h" +#define MAIN_WIDTH 120 +#define MAIN_HEIGHT 250 + #define MENU_WIDTH 120 #define MENU_HEIGHT 200 @@ -25,15 +28,13 @@ #define BUTTON_WIDTH 80 #define BUTTON_HEIGHT 30 -#define MENU_SMALL (1<<0) -#define MENU_INFO (1<<1) -#define MENU_DEATH (1<<2) -#define menu_isOpen(f) (menu_open & (f)) #define menu_Open(f) (menu_open |= (f)) #define menu_Close(f) (menu_open ^= (f)) -static int menu_open = 0; +int menu_open = 0; +static void menu_main_close(void); +static void menu_main_new(char* str); static void menu_small_close(char* str); static void edit_options(void); static void exit_game(void); @@ -42,10 +43,50 @@ static void info_outfits_menu(char* str); static void info_outfits_menu_close(char* str); static void menu_death_respawn(char* str); +void menu_main(void) { + unsigned int bwid, wid; + + // Create background image window. + bwid = window_create("BG", -1, -1, gl_screen.w, gl_screen.h); + window_addRect(bwid, 0, 0, gl_screen.w, gl_screen.h, "rctBG", &cBlack, 0); + + // Create menu window. + wid = window_create("Main Menu", -1, -1, MAIN_WIDTH, MAIN_HEIGHT); + window_addButton(wid, 20, 20 + (BUTTON_HEIGHT+20)*3, + BUTTON_WIDTH, BUTTON_HEIGHT, + "btnLoad", "Load Game", NULL); + window_addButton(wid, 20, 20 + (BUTTON_HEIGHT+20)*2, + BUTTON_WIDTH, BUTTON_HEIGHT, + "btnNew", "New Game", menu_main_new); + window_addButton(wid, 20, 20 + (BUTTON_HEIGHT+20), + BUTTON_WIDTH, BUTTON_HEIGHT, + "btnOptions", "Options", (void(*)(char*)) edit_options); + window_addButton(wid, 20, 20, BUTTON_WIDTH, BUTTON_HEIGHT, + "btnExit", "Exit", (void(*)(char*)) exit_game); + + menu_Open(MENU_MAIN); +} + +static void menu_main_close(void) { + window_destroy(window_get("Main Menu")); + window_destroy(window_get("BG")); + + menu_Close(MENU_MAIN); +} + +static void menu_main_new(char* str) { + (void)str; + + menu_main_close(); + player_new(); +} + // Ze ingame menu. // Small ingame menu. void menu_small(void) { - if(menu_isOpen(MENU_SMALL) || menu_isOpen(MENU_DEATH)) + if(menu_isOpen(MENU_MAIN) || + menu_isOpen(MENU_SMALL) || + menu_isOpen(MENU_DEATH)) return; // It's already open.. pause(); diff --git a/src/menu.h b/src/menu.h index 1231040..82c658f 100644 --- a/src/menu.h +++ b/src/menu.h @@ -1,7 +1,14 @@ #pragma once -void menu_small(void); +#define MENU_MAIN (1<<0) +#define MENU_SMALL (1<<1) +#define MENU_INFO (1<<2) +#define MENU_DEATH (1<<3) +#define menu_isOpen(f) (menu_open & (f)) +extern int menu_open; +void menu_main(void); +void menu_small(void); void menu_info(void); void menu_deah(void); diff --git a/src/toolkit.h b/src/toolkit.h index ab0cda6..1bded20 100644 --- a/src/toolkit.h +++ b/src/toolkit.h @@ -46,7 +46,7 @@ void window_modifyText(const unsigned int wid, char* name, char* newstring); void window_modifyImage(const unsigned int wid, char* name, glTexture* image); // Get! -glTexture window_getImage(const unsigned int wid, char* name); +glTexture* window_getImage(const unsigned int wid, char* name); // Get the window by name. int window_exists(const char* wdwname);