From a34ab4b442bf881b0bc8edc3b8e5a0163fe131cb Mon Sep 17 00:00:00 2001 From: stpohle Date: Sat, 3 Apr 2004 15:47:11 +0000 Subject: [PATCH] working on the keymenu --- bomberclone.prj | 3 +- include/font.h | 6 +++ include/keyb.h | 1 + src/Makefile.am | 3 +- src/configuration.c | 28 +++++++---- src/keyb.c | 112 +++++++++++++++++++++++++++++++++++++++++++- src/playermenu.c | 12 +++++ 7 files changed, 152 insertions(+), 13 deletions(-) create mode 100644 src/playermenu.c diff --git a/bomberclone.prj b/bomberclone.prj index 115567d..6a3d112 100644 --- a/bomberclone.prj +++ b/bomberclone.prj @@ -147,7 +147,8 @@ module.source.files=\ help.c\ menuimages.c\ playerinput.c\ - keyb.c + keyb.c\ + playermenu.c module.pixmap.name=pixmaps module.pixmap.type= diff --git a/include/font.h b/include/font.h index 8b25bbf..1890064 100644 --- a/include/font.h +++ b/include/font.h @@ -22,6 +22,12 @@ struct __font { _point size; } typedef _font; + +struct _key_codes { + int code; + char *text; +}; + extern _point font_lastsize; extern _font font[3]; diff --git a/include/keyb.h b/include/keyb.h index a4f885d..983ed1d 100644 --- a/include/keyb.h +++ b/include/keyb.h @@ -37,6 +37,7 @@ extern BCGameKeys keyb_gamekeys; extern void keyb_config (); extern void keyb_configreset (); +extern void keyb_config_createkeymenu (int key, int x, int y, int menu_nr); extern void keyb_init (); extern void keyb_loop (SDL_Event *event); diff --git a/src/Makefile.am b/src/Makefile.am index 7f8df57..2a212f6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -42,6 +42,7 @@ bomberclone_SOURCES = \ flyingitems.c\ help.c\ playerinput.c\ - keyb.c + keyb.c\ + playermenu.c ## bomberclone_LDADD = diff --git a/src/configuration.c b/src/configuration.c index d472fe8..a11ab15 100644 --- a/src/configuration.c +++ b/src/configuration.c @@ -1,4 +1,4 @@ -/* $Id: configuration.c,v 1.53 2004/04/03 14:48:42 stpohle Exp $ +/* $Id: configuration.c,v 1.54 2004/04/03 15:47:13 stpohle Exp $ * configuration */ #include @@ -12,6 +12,7 @@ #include "sound.h" #include "menu.h" #include "keyb.h" +#include "player.h" void config_init (int argc, char **argv) @@ -90,14 +91,14 @@ config_init (int argc, char **argv) draw_logo (); bman.playername[LEN_PLAYERNAME - 1] = 0; bman.playername[0] = 0; - config_menu (); + player_menu (); } else { ReadPrgArgs (argc, argv); gfx_init (); draw_logo (); if (bman.askplayername) - config_menu (); + player_menu (); } snd_init (); @@ -496,15 +497,16 @@ config_menu () while (menuselect != -1 && bman.state != GS_quit) { menu_new ("Configuration", 400, 300); menu_create_label ("General Option", -1, 50, 1, COLOR_brown); - menu_create_entry ("Name", -1, 85, 200, bman.playername, LEN_PLAYERNAME, MENU_entrytext, 1); - menu_create_button ("Video Setup", -1, 120, 200, 2); + menu_create_button ("Playermenu", 25, 85, 150, 1); + menu_create_button ("Keyboard", 225, 85, 150, 2); + menu_create_button ("Video Setup", -1, 120, 200, 3); menu_create_label ("Sound", 25, 154, 0, COLOR_brown); - menu_create_bool ("ON", 100, 150, 50, &snd.playsound, 3); + menu_create_bool ("ON", 100, 150, 50, &snd.playsound, 4); menu_create_label ("Music", 250, 154, 0, COLOR_brown); - menu_create_bool ("ON", 325, 150, 50, &snd.playmusic, 4); + menu_create_bool ("ON", 325, 150, 50, &snd.playmusic, 5); menu_create_label ("Extended Option", -1, 200, 1, COLOR_brown); - menu_create_bool ("Debug", 25, 230, 150, &debug, 5); - menu_create_bool ("Ask Playername", 250, 230, 150, &bman.askplayername, 6); + menu_create_bool ("Debug", 25, 230, 150, &debug, 6); + menu_create_bool ("Ask Playername", 250, 230, 150, &bman.askplayername, 7); menu_create_button ("Ok", -1, 270, 150, 0); if (bman.playername[0] == '\0') menu_focus_id (1); @@ -522,7 +524,13 @@ config_menu () else menuselect = -1; break; - case (2): // Screen Options + case (1): // player screen + player_menu (); + break; + case (2): // keyboard settings + keyb_config (); + break; + case (3): // Screen Options config_video (); break; } diff --git a/src/keyb.c b/src/keyb.c index d2840aa..a0b37cd 100644 --- a/src/keyb.c +++ b/src/keyb.c @@ -1,12 +1,38 @@ -/* $Id: keyb.c,v 1.1 2004/04/03 13:55:30 stpohle Exp $ +/* $Id: keyb.c,v 1.2 2004/04/03 15:47:13 stpohle Exp $ * keyb.c */ #include "bomberclone.h" #include "keyb.h" +#include "menu.h" BCGameKeys keyb_gamekeys; +const struct _key_codes key_codetab [] = { + { SDLK_RSHIFT, "RSHIFT" }, + { SDLK_LSHIFT, "LSHIFT" }, + { SDLK_RCTRL, "RCTRL" }, + { SDLK_LCTRL, "RCTRL" }, + { SDLK_UP, "CurUP" }, + { SDLK_DOWN, "CurDOWN" }, + { SDLK_LEFT, "CurLEFT" }, + { SDLK_RIGHT, "CurRIGHT" }, + { SDLK_F1, "F1" }, + { SDLK_F2, "F2" }, + { SDLK_F3, "F3" }, + { SDLK_F4, "F4" }, + { SDLK_F5, "F5" }, + { SDLK_F6, "F6" }, + { SDLK_F7, "F7" }, + { SDLK_F8, "F8" }, + { SDLK_F9, "F9" }, + { SDLK_F10, "F10" }, + { SDLK_F11, "F11" }, + { SDLK_F12, "F12" }, + { ' ', "SPACE" }, + { -1, "" } +}; + /* * set the default keyboard settings @@ -53,10 +79,94 @@ void keyb_print () { }; +/* + * convert a keycode to a text + */ +void keyb_code2text (int keycode, char *keytext) { + int i; + + for (i = 0; (key_codetab [i].code != -1 && key_codetab[i].code != keycode); i++); + + if (key_codetab[i].code == keycode) + strcpy (keytext, key_codetab[i].text); + else if ((keycode >= 'a' && keycode <= 'z') + || (keycode >= 'Z' && keycode <= 'Z') + || (keycode >= '0' && keycode <= '9')) + sprintf (keytext, "%c", keycode); + else + sprintf (keytext, "%x", keycode); +}; + + +/* + * create a small menu with all informations + */ +void keyb_config_createkeymenu (int key, int x, int y, int menu_nr) { + int key_id; + char keyname [32]; + char keytext [50]; + + if (key >= BCPK_max && key < BCPK_max * 2) + key_id = key - BCPK_max; + else key_id = key; + + switch (key_id) { + case (BCPK_up): + strcpy (keyname, "Up"); + break; + case (BCPK_down): + strcpy (keyname, "Down"); + break; + case (BCPK_left): + strcpy (keyname, "Left"); + break; + case (BCPK_right): + strcpy (keyname, "Right"); + break; + case (BCPK_drop): + strcpy (keyname, "Drop"); + break; + case (BCPK_special): + strcpy (keyname, "Special"); + break; + case (BCK_chat): + strcpy (keyname, "Chat"); + break; + case (BCK_fullscreen): + strcpy (keyname, "Fullscreen"); + break; + case (BCK_help): + strcpy (keyname, "Help"); + break; + case (BCK_mapmenu): + strcpy (keyname, "Mapmenu"); + break; + case (BCK_playermenu): + strcpy (keyname, "Playermenu"); + break; + case (BCK_pause): + strcpy (keyname, "Pause/Start"); + break; + } + + menu_create_label ("UP", x, y + 2, 0, COLOR_brown); + keyb_code2text (keyb_gamekeys.keycode[key], keytext); + menu_create_button (keytext, x + 50, y, 100, menu_nr); +} + + /* * keyboard configuration screen */ void keyb_config () { + menu_new ("Keyboard Config", 420, 400); + menu_create_label ("Player 1", 100, 50, 2, COLOR_brown); + keyb_config_createkeymenu (BCPK_up, 25, 90, 1); + keyb_config_createkeymenu (BCPK_down, 25, 120, 2); + keyb_config_createkeymenu (BCPK_left, 25, 150, 3); + keyb_config_createkeymenu (BCPK_right, 25, 180, 4); + menu_loop (); + menu_delete (); }; diff --git a/src/playermenu.c b/src/playermenu.c new file mode 100644 index 0000000..e342414 --- /dev/null +++ b/src/playermenu.c @@ -0,0 +1,12 @@ +/* $Id: playermenu.c,v 1.1 2004/04/03 15:47:13 stpohle Exp $ + * + */ + +#include "bomberclone.h" +#include "menu.h" + +void player_menu () { + menu_new ("Playermenu", 420, 400); + menu_loop (); + menu_delete (); +};