summaryrefslogtreecommitdiff
path: root/src/screen/screen_gameType.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen/screen_gameType.c')
-rw-r--r--src/screen/screen_gameType.c256
1 files changed, 256 insertions, 0 deletions
diff --git a/src/screen/screen_gameType.c b/src/screen/screen_gameType.c
new file mode 100644
index 0000000..5545fc1
--- /dev/null
+++ b/src/screen/screen_gameType.c
@@ -0,0 +1,256 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/net_multiplayer.h"
+#include "base/tux.h"
+
+#include "client/language.h"
+#include "client/interface.h"
+#include "client/screen.h"
+#include "client/image.h"
+
+#ifndef NO_SOUND
+#include "audio/music.h"
+#endif
+
+#include "screen/screen_gameType.h"
+#include "screen/screen_setting.h"
+
+#include "widget/widget_label.h"
+#include "widget/widget_button.h"
+#include "widget/widget_image.h"
+#include "widget/widget_textfield.h"
+#include "widget/widget_check.h"
+
+static widget_image_t *image_backgorund;
+
+static widget_button_t *button_back;
+static widget_button_t *button_play;
+
+static widget_label_t *label_none;
+static widget_label_t *label_server;
+static widget_label_t *label_client;
+
+static widget_label_t *label_ip;
+static widget_label_t *label_port;
+
+static widget_check_t *check_none;
+static widget_check_t *check_server;
+static widget_check_t *check_client;
+
+static widget_textfield_t *textfield_ip;
+static widget_textfield_t *textfield_port;
+
+void startScreenGameType()
+{
+#ifndef NO_SOUND
+ playMusic("menu", MUSIC_GROUP_BASE);
+#endif
+}
+
+void drawScreenGameType()
+{
+ drawWidgetImage(image_backgorund);
+
+ drawWidgetLabel(label_none);
+ drawWidgetLabel(label_server);
+ drawWidgetLabel(label_client);
+
+ if( check_none->status == FALSE )
+ {
+ drawWidgetLabel(label_port);
+ drawWidgetTextfield(textfield_port);
+ drawWidgetLabel(label_ip);
+ drawWidgetTextfield(textfield_ip);
+ }
+
+ drawWidgetCheck(check_none);
+ drawWidgetCheck(check_server);
+ drawWidgetCheck(check_client);
+
+ drawWidgetButton(button_back);
+ drawWidgetButton(button_play);
+}
+
+void eventScreenGameType()
+{
+ eventWidgetCheck(check_none);
+ eventWidgetCheck(check_server);
+ eventWidgetCheck(check_client);
+
+ eventWidgetTextfield(textfield_ip);
+ eventWidgetTextfield(textfield_port);
+
+ eventWidgetButton(button_back);
+ eventWidgetButton(button_play);
+}
+
+void stopScreenGameType()
+{
+}
+
+static void eventWidget(void *p)
+{
+ widget_button_t *button;
+ widget_check_t *check;
+
+ button = (widget_button_t *)(p);
+ check = (widget_check_t *)(p);
+
+ if( check == check_none )
+ {
+ check_none->status = TRUE;
+ check_server->status = FALSE;
+ check_client->status = FALSE;
+ return;
+ }
+
+ if( check == check_server )
+ {
+ check_none->status = FALSE;
+ check_server->status = TRUE;
+ check_client->status = FALSE;
+ return;
+ }
+
+ if( check == check_client )
+ {
+ check_none->status = FALSE;
+ check_server->status = FALSE;
+ check_client->status = TRUE;
+ return;
+ }
+
+ if( button == button_back )
+ {
+ setScreen("mainMenu");
+ }
+
+ if( button == button_play )
+ {
+ if( getSettingGameType() == NET_GAME_TYPE_CLIENT )
+ {
+ setScreen("world");
+ }
+ else
+ {
+ setScreen("chiceArena");
+ }
+ }
+}
+
+void initScreenGameType()
+{
+ SDL_Surface *image;
+
+ image = getImage(IMAGE_GROUP_BASE, "screen_main");
+ image_backgorund = newWidgetImage(0, 0, image);
+
+ button_back = newWidgetButton(getMyText("BACK"), 100, WINDOW_SIZE_Y-100, eventWidget);
+ button_play = newWidgetButton(getMyText("PLAY"), WINDOW_SIZE_X-200, WINDOW_SIZE_Y-100, eventWidget);
+
+ check_none = newWidgetCheck(100, 150, FALSE, eventWidget);
+ check_server = newWidgetCheck(100, 200, FALSE, eventWidget);
+ check_client = newWidgetCheck(100, 250, FALSE, eventWidget);
+
+ if( isParamFlag("--server") )
+ {
+ check_server->status = TRUE;
+ }
+ else if( isParamFlag("--client") )
+ {
+ check_client->status = TRUE;
+ }
+ else
+ {
+ check_none->status = TRUE;
+ }
+
+ label_none = newWidgetLabel(getMyText("NONE"), 130, 145, WIDGET_LABEL_LEFT);
+ label_server = newWidgetLabel(getMyText("SERVER"), 130, 195, WIDGET_LABEL_LEFT);
+ label_client = newWidgetLabel(getMyText("CLIENT"), 130, 245, WIDGET_LABEL_LEFT);
+
+ label_ip = newWidgetLabel(getMyText("IP_ADDR"), 300, 145, WIDGET_LABEL_LEFT);
+ label_port = newWidgetLabel(getMyText("NET_PORT"), 300, 245, WIDGET_LABEL_LEFT);
+
+ textfield_ip = newWidgetTextfield(getParamElse("--ip", "127.0.0.1"), 300, 180);
+ textfield_port = newWidgetTextfield(getParamElse("--port", "2200"), 300, 280);
+
+ registerScreen( newScreen("gameType", startScreenGameType, eventScreenGameType,
+ drawScreenGameType, stopScreenGameType) );
+}
+
+int getSettingGameType()
+{
+ if( check_none->status == TRUE )
+ {
+ return NET_GAME_TYPE_NONE;
+ }
+
+ if( check_server->status == TRUE )
+ {
+ return NET_GAME_TYPE_SERVER;
+ }
+
+ if( check_client->status == TRUE )
+ {
+ return NET_GAME_TYPE_CLIENT;
+ }
+
+ assert( ! "Chyba pri zistvani type hry !" );
+
+ return -1;
+}
+
+char* getSettingIP()
+{
+ return textfield_ip->text;
+}
+
+int getSettingPort()
+{
+ return atoi( textfield_port->text );
+}
+
+int getSettingProto()
+{
+ if( strstr(textfield_ip->text, ".") != NULL )
+ {
+ return PROTO_UDPv4;
+ }
+
+ if( strstr(textfield_ip->text, ":") != NULL )
+ {
+ return PROTO_UDPv6;
+ }
+
+ printf("IP protokol unknown !\n");
+ return -1;
+}
+
+void quitScreenGameType()
+{
+ destroyWidgetImage(image_backgorund);
+
+ destroyWidgetLabel(label_none);
+ destroyWidgetLabel(label_server);
+ destroyWidgetLabel(label_client);
+
+ destroyWidgetLabel(label_ip);
+ destroyWidgetLabel(label_port);
+
+ destroyWidgetTextfield(textfield_ip);
+ destroyWidgetTextfield(textfield_port);
+
+ destroyWidgetButton(button_back);
+ destroyWidgetButton(button_play);
+
+ destroyWidgetCheck(check_none);
+ destroyWidgetCheck(check_server);
+ destroyWidgetCheck(check_client);
+}
+