summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDusan Durech <dusan.d@Centrum.sk>2009-06-15 14:49:04 +0200
committerDusan Durech <dusan.d@Centrum.sk>2009-06-15 14:49:04 +0200
commit9b7a6f66182020913cd9b5b1205634dabbcf081e (patch)
tree1d21745d28f559a1c1f13be4bdaaf8ef0cc7ba56 /src
parent20def950be569ed6c6e9887f80dc3beca27765d8 (diff)
add widget container, hi is use in mainMenu and small diff
Diffstat (limited to 'src')
-rw-r--r--src/base/item.c1
-rw-r--r--src/base/main.h5
-rw-r--r--src/base/tux.c3
-rw-r--r--src/screen/mainMenu.c28
-rw-r--r--src/screen/world.c9
-rw-r--r--src/screen/world.h1
-rw-r--r--src/widget/widget.c43
-rw-r--r--src/widget/widget.h17
-rw-r--r--src/widget/widget_buttonimage.h1
-rw-r--r--src/widget/widget_container.c110
-rw-r--r--src/widget/widget_container.h20
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 */