From bbb0d34aba557e433b836fb9368815a5fac7ab42 Mon Sep 17 00:00:00 2001 From: scarab Date: Sun, 27 Jul 2008 21:01:34 +0000 Subject: - uvod do nastaveni klaves, nekde je tam nejakej leak ale na vistach nemam gdb takze to spravim pozdejs takhle to proste pri vypnuti spadne - zbejva moznost nastavit klavesu, prenastaveni ukladani konfigu, ikonky :] - pridany nektere nove veci do lang + obvykla varka prepsani hlasek z SK -> EN git-svn-id: http://opensvn.csie.org/tuxanci_ng@173 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e --- src/screen/screen_setting.c | 17 ++- src/screen/screen_setting.h | 2 - src/screen/screen_settingKeys.c | 321 ++++++++++++++++++++++++++++++++++++++++ src/screen/screen_settingKeys.h | 30 ++++ src/screen/screen_world.c | 2 +- 5 files changed, 365 insertions(+), 7 deletions(-) create mode 100644 src/screen/screen_settingKeys.c create mode 100644 src/screen/screen_settingKeys.h (limited to 'src/screen') diff --git a/src/screen/screen_setting.c b/src/screen/screen_setting.c index 350788d..8115842 100644 --- a/src/screen/screen_setting.c +++ b/src/screen/screen_setting.c @@ -23,6 +23,7 @@ #include "screen_mainMenu.h" #include "screen_setting.h" +#include "screen_settingKeys.h" #include "widget_label.h" #include "widget_button.h" @@ -34,6 +35,7 @@ static widget_image_t *image_backgorund; static widget_button_t *button_back; +static widget_button_t *button_keys; // setting of keycontrols static widget_label_t *label_count_round; static widget_label_t *label_name_player1; @@ -136,6 +138,7 @@ void drawScreenSetting() drawWidgetCheck(check_ai); drawWidgetButton(button_back); + drawWidgetButton(button_keys); } void eventScreenSetting() @@ -168,6 +171,7 @@ void eventScreenSetting() eventWidgetCheck(check_ai); eventWidgetButton(button_back); + eventWidgetButton(button_keys); } void stopScreenSetting() @@ -186,6 +190,10 @@ static void eventWidget(void *p) { setScreen("mainMenu"); } + if( button == button_keys ) + { + setScreen("settingKeys"); + } #ifndef NO_SOUND if( check == check_music ) @@ -319,7 +327,8 @@ void initScreenSetting() image = getImage(IMAGE_GROUP_BASE, "screen_main"); image_backgorund = newWidgetImage(0, 0, image); - button_back = newWidgetButton(getMyText("BACK"), WINDOW_SIZE_X-200, WINDOW_SIZE_Y-100, eventWidget); + button_back = newWidgetButton(getMyText("BACK"), WINDOW_SIZE_X - 200, WINDOW_SIZE_Y - 100, eventWidget); + button_keys = newWidgetButton(getMyText("CONTROLS"), WINDOW_SIZE_X - 200, button_back->y - WIDGET_BUTTON_HEIGHT - 10, eventWidget); #ifndef NO_SOUND label_music = newWidgetLabel(getMyText("MUSIC"), 100, WINDOW_SIZE_Y-85, WIDGET_LABEL_LEFT); @@ -349,13 +358,13 @@ void initScreenSetting() textfield_name_player1 = newWidgetTextfield( getParamElse("--name1", NAME_PLAYER_RIGHT), WIDGET_TEXTFIELD_FILTER_ALPHANUM, - 110+label_name_player1->w, + 110+label_count_round->w, WINDOW_SIZE_Y-160); textfield_name_player2 = newWidgetTextfield( getParamElse("--name2", NAME_PLAYER_LEFT), WIDGET_TEXTFIELD_FILTER_ALPHANUM, - 110+label_name_player2->w, + 110+label_count_round->w, WINDOW_SIZE_Y-120); for( i = GUN_DUAL_SIMPLE ; i <= GUN_BOMBBALL ; i++ ) @@ -532,5 +541,5 @@ void quitScreenSetting() } destroyWidgetButton(button_back); + destroyWidgetButton(button_keys); } - diff --git a/src/screen/screen_setting.h b/src/screen/screen_setting.h index 2dfb897..d6e6b09 100644 --- a/src/screen/screen_setting.h +++ b/src/screen/screen_setting.h @@ -19,6 +19,4 @@ extern bool_t isSettingAI(); extern bool_t isSettingAnyItem(); extern bool_t isSettingItem(int item); extern void quitScreenSetting(); - #endif - diff --git a/src/screen/screen_settingKeys.c b/src/screen/screen_settingKeys.c new file mode 100644 index 0000000..aff367c --- /dev/null +++ b/src/screen/screen_settingKeys.c @@ -0,0 +1,321 @@ + +#include +#include +#include + +#include "main.h" +#include "list.h" +#include "tux.h" +#include "textFile.h" +#include "director.h" +#include "homeDirector.h" +#include "configFile.h" +#include "language.h" +#include "interface.h" +#include "screen.h" +#include "image.h" +#ifndef NO_SOUND +#include "music.h" +#include "sound.h" +#endif +#include "screen_mainMenu.h" +#include "screen_setting.h" +#include "screen_settingKeys.h" +#include "widget_button.h" +#include "widget_image.h" +#include "widget_label.h" + +static int keytable[KEY_LENGTH]; +static char keynametable[KEY_LENGTH][STR_SIZE]={}; +static textFile_t *keytableFile; +static textFile_t *keycontrolFile; + +static widget_image_t *image_backgorund; + +static widget_button_t *button_back; + +// key names +static widget_label_t *tux_right; +static widget_label_t *tux_right_keyup; +static widget_label_t *tux_right_keydown; +static widget_label_t *tux_right_keyleft; +static widget_label_t *tux_right_keyright; +static widget_label_t *tux_right_keyswitch; +static widget_label_t *tux_right_keyfire; +static widget_label_t *tux_left; +static widget_label_t *tux_left_keyup; +static widget_label_t *tux_left_keydown; +static widget_label_t *tux_left_keyleft; +static widget_label_t *tux_left_keyright; +static widget_label_t *tux_left_keyswitch; +static widget_label_t *tux_left_keyfire; +// key values +static widget_label_t *tux_right_keyup_val; +static widget_label_t *tux_right_keydown_val; +static widget_label_t *tux_right_keyleft_val; +static widget_label_t *tux_right_keyright_val; +static widget_label_t *tux_right_keyswitch_val; +static widget_label_t *tux_right_keyfire_val; +static widget_label_t *tux_left_keyup_val; +static widget_label_t *tux_left_keydown_val; +static widget_label_t *tux_left_keyleft_val; +static widget_label_t *tux_left_keyright_val; +static widget_label_t *tux_left_keyswitch_val; +static widget_label_t *tux_left_keyfire_val; +// todo add key images +// possible variant will be reusing widget_image for current widget_label so there wont +// be key names but only images + +void startScreenSettingKeys() +{ +#ifndef NO_SOUND + playMusic("menu", MUSIC_GROUP_BASE); +#endif +} +static int getKeyCode(char *s) +{ + char str[STR_SIZE]; + char *find; + int i; + + sprintf(str, "keycode %s = ", s); + + for(i = 0 ; i < keytableFile->text->count ; i++) { + char *line; + line = (char *) (keytableFile->text->list[i]); + if((find = strstr(line, str)) != NULL) { + int ret; + ret = atoi( strchr(line, '=')+1 ); + return ret; + } + } + + return -1; +} + +void initKeyTable() +{ + char path[STR_PATH_SIZE]; + char val[STR_SIZE]; +/* + int i; +*/ + sprintf(path, PATH_CONFIG "keytable.conf"); + keytableFile = loadTextFile(path); + + if(keytableFile == NULL) { + fprintf(stderr, "Don't load %s\n", path); + return; + } + + sprintf(path, "%s/keycontrol.conf", getHomeDirector()); + keycontrolFile = loadTextFile(path); + + if(keycontrolFile == NULL) { + fprintf(stderr, "Don't load %s\n", path); + fprintf(stderr, "I create %s\n", path); + keycontrolFile = newTextFile(path); + } + + if(keycontrolFile == NULL) { + fprintf(stderr, "Don't create %s\n", path); + return; + } + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_UP", val, STR_SIZE, "SDLK_UP"); + keytable[ KEY_TUX_RIGHT_MOVE_UP ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_MOVE_UP ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_RIGHT", val, STR_SIZE, "SDLK_RIGHT"); + keytable[ KEY_TUX_RIGHT_MOVE_RIGHT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_MOVE_RIGHT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_LEFT", val, STR_SIZE, "SDLK_LEFT"); + keytable[ KEY_TUX_RIGHT_MOVE_LEFT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_MOVE_LEFT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_MOVE_DOWN", val, STR_SIZE, "SDLK_DOWN"); + keytable[ KEY_TUX_RIGHT_MOVE_DOWN ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_MOVE_DOWN ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_SHOOT", val, STR_SIZE, "SDLK_KP0"); + keytable[ KEY_TUX_RIGHT_SHOOT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_SHOOT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_RIGHT_SWITCH_WEAPON", val, STR_SIZE, "SDLK_KP1"); + keytable[ KEY_TUX_RIGHT_SWITCH_WEAPON] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_RIGHT_SWITCH_WEAPON ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_UP", val, STR_SIZE, "SDLK_w"); + keytable[ KEY_TUX_LEFT_MOVE_UP ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_MOVE_UP ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_RIGHT", val, STR_SIZE, "SDLK_d"); + keytable[ KEY_TUX_LEFT_MOVE_RIGHT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_MOVE_RIGHT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_LEFT", val, STR_SIZE, "SDLK_a"); + keytable[ KEY_TUX_LEFT_MOVE_LEFT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_MOVE_LEFT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_MOVE_DOWN", val, STR_SIZE, "SDLK_s"); + keytable[ KEY_TUX_LEFT_MOVE_DOWN ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_MOVE_DOWN ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_SHOOT", val, STR_SIZE, "SDLK_q"); + keytable[ KEY_TUX_LEFT_SHOOT ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_SHOOT ], "%s", val); + + loadValueFromConfigFile(keycontrolFile, "TUX_LEFT_SWITCH_WEAPON", val, STR_SIZE, "SDLK_TAB"); + keytable[ KEY_TUX_LEFT_SWITCH_WEAPON ] = getKeyCode(val); + sprintf(keynametable[ KEY_TUX_LEFT_SWITCH_WEAPON ], "%s", val); + +/* + for( i = 0 ; i < KEY_LENGTH ; i++) + { + printf("keytable[%d] = %d\n", i, keytable[i]); + } +*/ + saveTextFile(keycontrolFile); +} +int getKey(int n) +{ + assert( n >= 0 && n < KEY_LENGTH ); + +// printf("keytable[n] = %d\n", keytable[n]); + + return keytable[n]; +} +void drawScreenSettingKeys() +{ + drawWidgetImage(image_backgorund); + drawWidgetButton(button_back); + // key names + drawWidgetLabel(tux_right); + drawWidgetLabel(tux_left); + drawWidgetLabel(tux_right_keyup); + drawWidgetLabel(tux_right_keydown); + drawWidgetLabel(tux_right_keyleft); + drawWidgetLabel(tux_right_keyright); + drawWidgetLabel(tux_right_keyswitch); + drawWidgetLabel(tux_right_keyfire); + drawWidgetLabel(tux_left_keyup); + drawWidgetLabel(tux_left_keydown); + drawWidgetLabel(tux_left_keyleft); + drawWidgetLabel(tux_left_keyright); + drawWidgetLabel(tux_left_keyswitch); + drawWidgetLabel(tux_left_keyfire); + // key values + drawWidgetLabel(tux_right_keyup_val); + drawWidgetLabel(tux_right_keydown_val); + drawWidgetLabel(tux_right_keyleft_val); + drawWidgetLabel(tux_right_keyright_val); + drawWidgetLabel(tux_right_keyswitch_val); + drawWidgetLabel(tux_right_keyfire_val); + drawWidgetLabel(tux_left_keyup_val); + drawWidgetLabel(tux_left_keydown_val); + drawWidgetLabel(tux_left_keyleft_val); + drawWidgetLabel(tux_left_keyright_val); + drawWidgetLabel(tux_left_keyswitch_val); + drawWidgetLabel(tux_left_keyfire_val); +} +static void eventWidget(void *p) +{ + widget_button_t *button; + widget_label_t *label; + + button = (widget_button_t *)(p); + label = (widget_label_t *)(p); + + if(button == button_back) { + setScreen("setting"); + } +} +void eventScreenSettingKeys() +{ + eventWidgetButton(button_back); +} +void stopScreenSettingKeys() +{ +} +void initScreenSettingKeys() +{ + initKeyTable(); + image_t *image; + image = getImage(IMAGE_GROUP_BASE, "screen_main"); + image_backgorund = newWidgetImage(0, 0, image); + + button_back = newWidgetButton(getMyText("BACK"), WINDOW_SIZE_X - 200, WINDOW_SIZE_Y - 100, eventWidget); + + tux_left = newWidgetLabel(getMyText("TUXLEFT"), WINDOW_SIZE_X/4, 150, WIDGET_LABEL_CENTER); + tux_left_keyup = newWidgetLabel(getMyText("KEY_UP"), 50, tux_left->y+50, WIDGET_LABEL_LEFT); + tux_left_keydown = newWidgetLabel(getMyText("KEY_DOWN"), tux_left_keyup->x, tux_left_keyup->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyleft = newWidgetLabel(getMyText("KEY_LEFT"), tux_left_keyup->x, tux_left_keydown->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyright = newWidgetLabel(getMyText("KEY_RIGHT"), tux_left_keyup->x, tux_left_keyleft->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyfire = newWidgetLabel(getMyText("KEY_FIRE"), tux_left_keyup->x, tux_left_keyright->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyswitch = newWidgetLabel(getMyText("KEY_SWITCH"), tux_left_keyup->x, tux_left_keyfire->y + 20, WIDGET_LABEL_LEFT); + + tux_right = newWidgetLabel(getMyText("TUXRIGHT"), WINDOW_SIZE_X/2 + WINDOW_SIZE_X/4, tux_left->y, WIDGET_LABEL_CENTER); + tux_right_keyup = newWidgetLabel(getMyText("KEY_UP"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_left->y+50, WIDGET_LABEL_LEFT); + tux_right_keydown = newWidgetLabel(getMyText("KEY_DOWN"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_left_keyup->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyleft = newWidgetLabel(getMyText("KEY_LEFT"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_right_keydown->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyright = newWidgetLabel(getMyText("KEY_RIGHT"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_right_keyleft->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyfire = newWidgetLabel(getMyText("KEY_FIRE"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_left_keyright->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyswitch = newWidgetLabel(getMyText("KEY_SWITCH"), WINDOW_SIZE_X/2 + tux_left_keyup->x, tux_left_keyfire->y + 20, WIDGET_LABEL_LEFT); + + tux_left_keyup_val = newWidgetLabel(keynametable[6], tux_left_keyup->x+200, tux_left->y+50, WIDGET_LABEL_LEFT); + tux_left_keydown_val = newWidgetLabel(keynametable[9], tux_left_keyup_val->x, tux_left_keyup->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyleft_val = newWidgetLabel(keynametable[8], tux_left_keyup_val->x, tux_left_keydown->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyright_val = newWidgetLabel(keynametable[7], tux_left_keyup_val->x, tux_left_keyleft->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyfire_val = newWidgetLabel(keynametable[10], tux_left_keyup_val->x, tux_left_keyright->y + 20, WIDGET_LABEL_LEFT); + tux_left_keyswitch_val = newWidgetLabel(keynametable[11], tux_left_keyup_val->x, tux_left_keyfire->y + 20, WIDGET_LABEL_LEFT); + + tux_right_keyup_val = newWidgetLabel(keynametable[0], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_left->y+50, WIDGET_LABEL_LEFT); + tux_right_keydown_val = newWidgetLabel(keynametable[3], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_left_keyup->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyleft_val = newWidgetLabel(keynametable[2], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_right_keydown->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyright_val = newWidgetLabel(keynametable[1], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_right_keyleft->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyfire_val = newWidgetLabel(keynametable[4], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_left_keyright->y + 20, WIDGET_LABEL_LEFT); + tux_right_keyswitch_val = newWidgetLabel(keynametable[5], WINDOW_SIZE_X/2 + tux_left_keyup_val->x, tux_left_keyfire->y + 20, WIDGET_LABEL_LEFT); + + registerScreen( newScreen("settingKeys", startScreenSettingKeys, eventScreenSettingKeys, + drawScreenSettingKeys, stopScreenSettingKeys) ); +} +void quitKeyTable() { + destroyTextFile(keycontrolFile); + destroyTextFile(keytableFile); +} +void quitScreenSettingKeys() +{ + // key names + destroyWidgetImage(image_backgorund); + destroyWidgetLabel(tux_right); + destroyWidgetLabel(tux_left); + destroyWidgetLabel(tux_right_keyup); + destroyWidgetLabel(tux_right_keydown); + destroyWidgetLabel(tux_right_keyleft); + destroyWidgetLabel(tux_right_keyright); + destroyWidgetLabel(tux_right_keyswitch); + destroyWidgetLabel(tux_right_keyfire); + destroyWidgetLabel(tux_left_keyup); + destroyWidgetLabel(tux_left_keydown); + destroyWidgetLabel(tux_left_keyright); + destroyWidgetLabel(tux_left_keyswitch); + destroyWidgetLabel(tux_left_keyfire); + // key values + destroyWidgetLabel(tux_right_keyup_val); + destroyWidgetLabel(tux_right_keydown_val); + destroyWidgetLabel(tux_right_keyleft_val); + destroyWidgetLabel(tux_right_keyright_val); + destroyWidgetLabel(tux_right_keyswitch_val); + destroyWidgetLabel(tux_right_keyfire_val); + destroyWidgetLabel(tux_left_keyup_val); + destroyWidgetLabel(tux_left_keydown_val); + destroyWidgetLabel(tux_left_keyleft_val); + destroyWidgetLabel(tux_left_keyright_val); + destroyWidgetLabel(tux_left_keyswitch_val); + destroyWidgetLabel(tux_left_keyfire_val); + + quitKeyTable(); + + destroyWidgetButton(button_back); +} diff --git a/src/screen/screen_settingKeys.h b/src/screen/screen_settingKeys.h new file mode 100644 index 0000000..a58aacc --- /dev/null +++ b/src/screen/screen_settingKeys.h @@ -0,0 +1,30 @@ + +#ifndef SCREEN_SETTING_KEYS + +#define SCREEN_SETTING_KEYS + +#include "main.h" +extern void initScreenSettingKeys(); +extern void drawScreenSettingKeys(); +extern void eventScreenSettingKeys(); +extern void quitScreenSettingKeys(); + +#define KEY_LENGTH 12 + +#define KEY_TUX_RIGHT_MOVE_UP 0 +#define KEY_TUX_RIGHT_MOVE_RIGHT 1 +#define KEY_TUX_RIGHT_MOVE_LEFT 2 +#define KEY_TUX_RIGHT_MOVE_DOWN 3 +#define KEY_TUX_RIGHT_SHOOT 4 +#define KEY_TUX_RIGHT_SWITCH_WEAPON 5 +#define KEY_TUX_LEFT_MOVE_UP 6 +#define KEY_TUX_LEFT_MOVE_RIGHT 7 +#define KEY_TUX_LEFT_MOVE_LEFT 8 +#define KEY_TUX_LEFT_MOVE_DOWN 9 +#define KEY_TUX_LEFT_SHOOT 10 +#define KEY_TUX_LEFT_SWITCH_WEAPON 11 + +extern void initKeyTable(); +extern int getKey(int n); +extern void quitKeyTable(); +#endif diff --git a/src/screen/screen_world.c b/src/screen/screen_world.c index 045adc2..b253565 100644 --- a/src/screen/screen_world.c +++ b/src/screen/screen_world.c @@ -17,7 +17,7 @@ #include "idManager.h" #include "interface.h" -#include "keytable.h" +#include "screen_settingKeys.h" #include "layer.h" #include "image.h" #include "font.h" -- cgit v1.2.3