diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/item.c | 1 | ||||
| -rw-r--r-- | src/base/main.h | 5 | ||||
| -rw-r--r-- | src/base/tux.c | 3 | ||||
| -rw-r--r-- | src/screen/mainMenu.c | 28 | ||||
| -rw-r--r-- | src/screen/world.c | 9 | ||||
| -rw-r--r-- | src/screen/world.h | 1 | ||||
| -rw-r--r-- | src/widget/widget.c | 43 | ||||
| -rw-r--r-- | src/widget/widget.h | 17 | ||||
| -rw-r--r-- | src/widget/widget_buttonimage.h | 1 | ||||
| -rw-r--r-- | src/widget/widget_container.c | 110 | ||||
| -rw-r--r-- | src/widget/widget_container.h | 20 |
11 files changed, 225 insertions, 13 deletions
diff --git a/src/base/item.c b/src/base/item.c index 6bf1a67..0a3a58f 100644 --- a/src/base/item.c +++ b/src/base/item.c @@ -427,7 +427,6 @@ static void tux_event_tux_is_deadWithItem(tux_t *tux, item_t *item) } } - world_inc_round(); tux_event_tux_is_dead(tux); } diff --git a/src/base/main.h b/src/base/main.h index fb23218..12efa80 100644 --- a/src/base/main.h +++ b/src/base/main.h @@ -27,6 +27,11 @@ #define UNUSED(var) if (0 && var) {} +#define FATAL(msg,arg...) \ + do{ \ + fprintf(stderr, msg, ##arg); \ + abort(0); \ + }while(0) extern char *getParam(char *s); extern char *getParamElse(char *s1, char *s2); diff --git a/src/base/tux.c b/src/base/tux.c index b41d63e..bed47fc 100644 --- a/src/base/tux.c +++ b/src/base/tux.c @@ -308,6 +308,8 @@ void tux_event_tux_is_dead(tux_t *tux) return; } + world_inc_round(); + #ifndef NO_SOUND sound_play("dead", SOUND_GROUP_BASE); #endif /* NO_SOUND */ @@ -359,7 +361,6 @@ static void tux_event_tux_is_deadWIthShot(tux_t *tux, shot_t *shot) } - world_inc_round(); tux_event_tux_is_dead(tux); } diff --git a/src/screen/mainMenu.c b/src/screen/mainMenu.c index 7cc2228..147ef59 100644 --- a/src/screen/mainMenu.c +++ b/src/screen/mainMenu.c @@ -22,9 +22,11 @@ #include "widget_textfield.h" #include "widget_check.h" #include "widget_image.h" +#include "widget_container.h" static widget_t *image_backgorund; +static widget_t *widget_container; static widget_t *button_play; static widget_t *button_setting; static widget_t *button_table; @@ -49,20 +51,26 @@ void main_menu_draw() { wid_image_draw(image_backgorund); + widget_container_draw(widget_container); +/* button_draw(button_play); button_draw(button_setting); button_draw(button_table); button_draw(button_credits); button_draw(button_end); +*/ } void main_menu_event() { + widget_container_event(widget_container); +/* button_event(button_play); button_event(button_setting); button_event(button_table); button_event(button_credits); button_event(button_end); +*/ } void main_menu_stop() @@ -105,11 +113,21 @@ void main_menu_init() "screen_main", IMAGE_GROUP_BASE); image_backgorund = wid_image_new(0, 0, image); - button_play = button_new(_("Start game"), WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 200, eventWidget); - button_setting = button_new(_("Settings"), WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 250, eventWidget); - button_table = button_new(_("Highscore"), WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 300, eventWidget); - button_credits = button_new(_("Credits"), WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 350, eventWidget); - button_end = button_new(_("Quit game"), WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 400, eventWidget); + widget_container = widget_container_new(WINDOW_SIZE_X / 2 - WIDGET_BUTTON_WIDTH / 2, 200, WIDGET_BUTTON_WIDTH, 300); + + button_play = button_new(_("Start game"), WIDGET_NONE_VALUE, WIDGET_NONE_VALUE, eventWidget); + button_setting = button_new(_("Settings"), WIDGET_NONE_VALUE, WIDGET_NONE_VALUE, eventWidget); + button_table = button_new(_("Highscore"), WIDGET_NONE_VALUE, WIDGET_NONE_VALUE, eventWidget); + button_credits = button_new(_("Credits"), WIDGET_NONE_VALUE, WIDGET_NONE_VALUE, eventWidget); + button_end = button_new(_("Quit game"), WIDGET_NONE_VALUE, WIDGET_NONE_VALUE, eventWidget); + + widget_container_add(widget_container, button_play); + widget_container_add(widget_container, button_setting); + widget_container_add(widget_container, button_table); + widget_container_add(widget_container, button_credits); + widget_container_add(widget_container, button_end); + + widget_set_layout_table(widget_container, 1, 5, 0, 50); #ifndef NO_SOUND music_add("menu.ogg", "menu", MUSIC_GROUP_BASE); diff --git a/src/screen/world.c b/src/screen/world.c index d573448..c3ccd8c 100644 --- a/src/screen/world.c +++ b/src/screen/world.c @@ -111,6 +111,15 @@ void world_inc_round() } } +bool_t world_is_match_end() +{ + if (arena->max_countRound == WORLD_COUNT_ROUND_UNLIMITED) { + return FALSE; + } + + return (arena->countRound >= arena->max_countRound); +} + void prepareArena() { tux_t *tux; diff --git a/src/screen/world.h b/src/screen/world.h index 35eb74d..f64ac93 100644 --- a/src/screen/world.h +++ b/src/screen/world.h @@ -16,6 +16,7 @@ extern void world_init(); extern void world_set_arena(arenaFile_t *arenaFile); extern void world_do_end(); extern void world_inc_round(); +extern bool_t world_is_match_end(); extern tux_t *world_get_control_tux(int control_type); extern void world_set_control_tux(tux_t *tux, int control_type); extern void world_tux_control(tux_t *p); diff --git a/src/widget/widget.c b/src/widget/widget.c index 4e4143e..57c247b 100644 --- a/src/widget/widget.c +++ b/src/widget/widget.c @@ -5,6 +5,15 @@ #include "widget.h" #include "widget_label.h" +#include "widget_button.h" +#include "widget_buttonimage.h" +#include "widget_textfield.h" +#include "widget_catchkey.h" +#include "widget_check.h" +#include "widget_choicegroup.h" +#include "widget_image.h" +#include "widget_select.h" +#include "widget_statusbar.h" widget_t *widget_new(int type, int x, int y, int w, int h, void *private_data) { @@ -55,6 +64,40 @@ void widget_set_size(widget_t *p, int *w, int *h) } } +void widget_draw(widget_t *p) +{ + switch (p->type) + { + case WIDGET_TYPE_LABEL: label_draw(p); break; + case WIDGET_TYPE_BUTTON: button_draw(p); break; + case WIDGET_TYPE_BUTTONIMAGE: button_image_draw(p); break; + case WIDGET_TYPE_TEXTFILED: text_field_draw(p); break; + case WIDGET_TYPE_CATCHKEY: catch_key_draw(p); break; + case WIDGET_TYPE_CHECK: check_draw(p); break; + case WIDGET_TYPE_CHOICE: choice_group_draw(p); break; + case WIDGET_TYPE_IMAGE: wid_image_draw(p); break; + case WIDGET_TYPE_SELECT: select_draw(p); break; + case WIDGET_TYPE_STATUSBAR: statusbar_draw(p); break; + } +} + +void widget_event(widget_t *p) +{ + switch (p->type) + { + case WIDGET_TYPE_LABEL: label_event(p); break; + case WIDGET_TYPE_BUTTON: button_event(p); break; + case WIDGET_TYPE_BUTTONIMAGE: button_image_event(p); break; + case WIDGET_TYPE_TEXTFILED: text_field_event(p); break; + case WIDGET_TYPE_CATCHKEY: catch_key_event(p); break; + case WIDGET_TYPE_CHECK: check_event(p); break; + case WIDGET_TYPE_CHOICE: choice_group_event(p); break; + case WIDGET_TYPE_IMAGE: wid_image_event(p); break; + case WIDGET_TYPE_SELECT: select_event(p); break; + case WIDGET_TYPE_STATUSBAR: statusbar_event(p); break; + } +} + void widget_destroy(widget_t *p) { free(p); diff --git a/src/widget/widget.h b/src/widget/widget.h index 2d6b717..2f20c90 100644 --- a/src/widget/widget.h +++ b/src/widget/widget.h @@ -7,12 +7,15 @@ #define WIDGET_TYPE_BUTTON 2 #define WIDGET_TYPE_BUTTONIMAGE 3 #define WIDGET_TYPE_TEXTFILED 4 -#define WIDGET_TYPE_CATCHKEY 4 -#define WIDGET_TYPE_CHECK 5 -#define WIDGET_TYPE_CHOICE 6 -#define WIDGET_TYPE_IMAGE 7 -#define WIDGET_TYPE_SELECT 8 -#define WIDGET_TYPE_STATUSBAR 9 +#define WIDGET_TYPE_CATCHKEY 5 +#define WIDGET_TYPE_CHECK 6 +#define WIDGET_TYPE_CHOICE 7 +#define WIDGET_TYPE_IMAGE 8 +#define WIDGET_TYPE_SELECT 9 +#define WIDGET_TYPE_STATUSBAR 10 +#define WIDGET_TYPE_CONTAINER 11 + +#define WIDGET_NONE_VALUE -1 typedef struct widget_struct { int type; @@ -26,6 +29,8 @@ extern void widget_set_location(widget_t *p, int x, int y); extern void widget_get_location(widget_t *p, int *x, int *y); extern void widget_get_size(widget_t *p, int w, int h); extern void widget_set_size(widget_t *p, int *w, int *h); +extern void widget_draw(widget_t *p); +extern void widget_event(widget_t *p); extern void widget_destroy(widget_t *p); #endif /* WIDGET_H */ diff --git a/src/widget/widget_buttonimage.h b/src/widget/widget_buttonimage.h index 197b79b..fff2658 100644 --- a/src/widget/widget_buttonimage.h +++ b/src/widget/widget_buttonimage.h @@ -2,6 +2,7 @@ #define WIDGET_BUTTONIMAGE_H #include "main.h" +#include "image.h" #include "widget.h" #define WIDGET_BUTTONIMAGE_TIME 10 diff --git a/src/widget/widget_container.c b/src/widget/widget_container.c new file mode 100644 index 0000000..3e0888c --- /dev/null +++ b/src/widget/widget_container.c @@ -0,0 +1,110 @@ + +#include <stdlib.h> +#include <assert.h> + +#include "main.h" +#include "widget.h" +#include "widget_container.h" + +widget_t* widget_container_new(int x, int y, int w, int h) +{ + widget_container_t *new; + + new = malloc(sizeof(widget_container_t)); + new->listWidget = list_new(); + + return widget_new(WIDGET_TYPE_CONTAINER, x, y, w, h, new); +} + +void widget_container_add(widget_t *widget, widget_t *widget_add) +{ + widget_container_t *p; + + assert(widget != NULL); + assert(widget->type == WIDGET_TYPE_CONTAINER); + + p = (widget_container_t *) widget->private_data; + list_add(p->listWidget, widget_add); +} + +void widget_set_layout_table(widget_t *widget, int countW, int countH, int w, int h) +{ + widget_container_t *p; + int i, j; + int count; + + assert(widget != NULL); + assert(widget->type == WIDGET_TYPE_CONTAINER); + + p = (widget_container_t *) widget->private_data; + + count = 0; + + for (i = 0; i < countH; i++) { + for (j = 0; j < countW; j++) { + widget_t *widget_tmp; + + if( count >= p->listWidget->count ) + { + break; + } + + widget_tmp = (widget_t*)p->listWidget->list[count]; + + widget_set_location(widget_tmp, widget->x+j*w, widget->y+i*h); + count++; + } + } +} + +void widget_container_draw(widget_t *widget) +{ + widget_container_t *p; + int i; + + assert(widget != NULL); + assert(widget->type == WIDGET_TYPE_CONTAINER); + + p = (widget_container_t *) widget->private_data; + + for (i = 0; i < p->listWidget->count; i++) { + widget_t *widget; + + widget = (widget_t*)p->listWidget->list[i]; + + widget_draw(widget); + } +} + +void widget_container_event(widget_t *widget) +{ + widget_container_t *p; + int i; + + assert(widget != NULL); + assert(widget->type == WIDGET_TYPE_CONTAINER); + + p = (widget_container_t *) widget->private_data; + + for (i = 0; i < p->listWidget->count; i++) { + widget_t *widget; + + widget = (widget_t*)p->listWidget->list[i]; + + widget_event(widget); + } +} + +void widget_container_destroy(widget_t *widget) +{ + widget_container_t *p; + + assert(widget != NULL); + assert(widget->type == WIDGET_TYPE_CONTAINER); + + p = (widget_container_t *) widget->private_data; + list_destroy(p->listWidget); + free(p); + + widget_destroy(widget); +} diff --git a/src/widget/widget_container.h b/src/widget/widget_container.h new file mode 100644 index 0000000..7b7708d --- /dev/null +++ b/src/widget/widget_container.h @@ -0,0 +1,20 @@ +#ifndef WIDGET_CONTAINER_H + +#define WIDGET_CONTAINER_H + +#include "list.h" +#include "widget.h" + +typedef struct widget_container { + + list_t *listWidget; +} widget_container_t; + +extern widget_t* widget_container_new(int x, int y, int w, int h); +extern void widget_container_add(widget_t *widget, widget_t *widget_add); +extern void widget_set_layout_table(widget_t *widget, int countW, int countH, int w, int h); +extern void widget_container_draw(widget_t *widget); +extern void widget_container_event(widget_t *widget); +extern void widget_container_destroy(widget_t *widget); + +#endif /* WIDGET_CONTAINER_H */ |