summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/base/proto.c55
-rw-r--r--src/base/proto.h4
-rw-r--r--src/base/server.c6
-rw-r--r--src/client/client.c1
-rwxr-xr-xsrc/client/font.c41
-rwxr-xr-xsrc/client/font.h1
-rw-r--r--src/client/panel.c6
-rw-r--r--src/client/radar.c2
-rw-r--r--src/screen/screen_world.c55
10 files changed, 132 insertions, 42 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d2d93c7..c97e4f5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -10,7 +10,8 @@ ${WORKDIR}/net/udp ${WORKDIR}/net/dns
SET ( SRC_client
-${WORKDIR}/client/language ${WORKDIR}/client/radar ${WORKDIR}/client/interface ${WORKDIR}/client/game ${WORKDIR}/client/image ${WORKDIR}/client/term ${WORKDIR}/client/layer ${WORKDIR}/client/screen ${WORKDIR}/client/panel ${WORKDIR}/client/client ${WORKDIR}/client/configFile ${WORKDIR}/client/font ${WORKDIR}/client/keytable
+#${WORKDIR}/client/language ${WORKDIR}/client/radar ${WORKDIR}/client/interface ${WORKDIR}/client/game #${WORKDIR}/client/image ${WORKDIR}/client/term ${WORKDIR}/client/layer ${WORKDIR}/client/screen ${WORKDIR}/client/panel #${WORKDIR}/client/client ${WORKDIR}/client/configFile ${WORKDIR}/client/font ${WORKDIR}/client/keytable
+${WORKDIR}/client/layer ${WORKDIR}/client/term ${WORKDIR}/client/screen ${WORKDIR}/client/interface ${WORKDIR}/client/client ${WORKDIR}/client/chat ${WORKDIR}/client/configFile ${WORKDIR}/client/language ${WORKDIR}/client/keytable ${WORKDIR}/client/font ${WORKDIR}/client/game ${WORKDIR}/client/radar ${WORKDIR}/client/panel ${WORKDIR}/client/image
${WORKDIR}/screen/screen_choiceArena ${WORKDIR}/screen/screen_table ${WORKDIR}/screen/screen_setting ${WORKDIR}/screen/screen_credits ${WORKDIR}/screen/screen_world ${WORKDIR}/screen/screen_analyze ${WORKDIR}/screen/screen_mainMenu ${WORKDIR}/screen/screen_browser ${WORKDIR}/screen/screen_gameType
diff --git a/src/base/proto.c b/src/base/proto.c
index 722d443..b5f8d39 100644
--- a/src/base/proto.c
+++ b/src/base/proto.c
@@ -27,6 +27,7 @@
#include "client.h"
#include "term.h"
#include "radar.h"
+#include "chat.h"
#endif
#ifdef PUBLIC_SERVER
@@ -687,6 +688,60 @@ void proto_recv_shot_client(char *msg)
#ifndef PUBLIC_SERVER
+void proto_send_chat_client(char *s)
+{
+ char msg[STR_PROTO_SIZE];
+ sprintf(msg, "chat %s\n", s);
+ sendServer(msg);
+}
+
+#endif
+
+void proto_recv_chat_server(client_t *client, char *msg)
+{
+ char out[STR_PROTO_SIZE];
+ int len;
+
+ if( client->tux == NULL )
+ {
+ return;
+ }
+
+ len = strlen(msg);
+ msg[len-1] = '\0';
+
+ snprintf(out, STR_PROTO_SIZE, "chat %s:%s\n", client->tux->name, msg+5);
+
+ proto_send_chat_server(PROTO_SEND_ALL, NULL, out);
+}
+
+void proto_send_chat_server(int type, client_t *client, char *msg)
+{
+ protoSendClient(type, client, msg, CHECK_FORNT_TYPE_SIMPLE, CHECK_FRONT_ID_NONE);
+
+#ifndef PUBLIC_SERVER
+ proto_recv_chat_client(msg);
+#endif
+}
+
+#ifndef PUBLIC_SERVER
+
+void proto_recv_chat_client(char *msg)
+{
+ int len;
+
+ assert( msg != NULL );
+
+ len = strlen(msg);
+ msg[len-1] = '\0';
+
+ addToChat(msg+5);
+}
+
+#endif
+
+#ifndef PUBLIC_SERVER
+
void proto_send_ping_client()
{
char msg[STR_PROTO_SIZE];
diff --git a/src/base/proto.h b/src/base/proto.h
index 116562b..bcc8f42 100644
--- a/src/base/proto.h
+++ b/src/base/proto.h
@@ -69,6 +69,10 @@ extern void proto_recv_additem_client(char *msg);
extern void proto_send_shot_server(int type, client_t *client, shot_t *p);
extern void proto_recv_shot_client(char *msg);
extern void proto_send_ping_client();
+extern void proto_send_chat_client(char *s);
+extern void proto_recv_chat_server(client_t *client, char *msg);
+extern void proto_send_chat_server(int type, client_t *client, char *msg);
+extern void proto_recv_chat_client(char *msg);
extern void proto_recv_ping_server(client_t *client, char *msg);
extern void proto_send_ping_server(int type, client_t *client);
extern void proto_recv_ping_client(char *msg);
diff --git a/src/base/server.c b/src/base/server.c
index 9132a46..3c1148a 100644
--- a/src/base/server.c
+++ b/src/base/server.c
@@ -613,6 +613,12 @@ static void eventClientBuffer(client_t *client)
continue;
}
+ if( strncmp(line, "chat", 4) == 0 )
+ {
+ proto_recv_chat_server(client, line);
+ continue;
+ }
+
if( strncmp(line, "ping", 4) == 0 )
{
proto_recv_ping_server(client, line);
diff --git a/src/client/client.c b/src/client/client.c
index 26df8dc..1ac74dd 100644
--- a/src/client/client.c
+++ b/src/client/client.c
@@ -172,6 +172,7 @@ void eventServerBuffer()
if( strncmp(line, "additem", 7) == 0 )proto_recv_additem_client(line);
if( strncmp(line, "shot", 4) == 0 )proto_recv_shot_client(line);
if( strncmp(line, "kill", 4) == 0 )proto_recv_kill_client(line);
+ if( strncmp(line, "chat", 4) == 0 )proto_recv_chat_client(line);
if( strncmp(line, "ping", 4) == 0 )proto_recv_ping_client(line);
if( strncmp(line, "end", 3) == 0 )proto_recv_end_client(line);
diff --git a/src/client/font.c b/src/client/font.c
index 3b1267a..0e67921 100755
--- a/src/client/font.c
+++ b/src/client/font.c
@@ -69,6 +69,47 @@ void drawFont(char *s, int x, int y, int r, int g, int b)
SDL_FreeSurface(text);
}
+void drawFontMaxSize(char *s, int x, int y, int w, int h, int r, int g, int b)
+{
+ SDL_Rect src_rect, dst_rect;
+ SDL_Surface *text;
+ SDL_Surface *p;
+ SDL_Color farba_pisma = {r, g, b, 0};
+ int my_w, my_h;
+
+ assert( s != NULL );
+
+ p = getSDL_Screen();
+
+ text = TTF_RenderUTF8_Blended(g_font, s, farba_pisma);
+
+
+ my_w = text->w;
+
+ if( my_w > w )
+ {
+ my_w = w;
+ }
+
+ my_h = text->h;
+
+ if( my_w > w )
+ {
+ my_h = h;
+ }
+
+ src_rect.x = 0;
+ src_rect.y = 0;
+ src_rect.w = my_w;
+ src_rect.h = my_h;
+
+ dst_rect.x = x;
+ dst_rect.y = y;
+
+ SDL_BlitSurface(text, &src_rect, p, &dst_rect);
+ SDL_FreeSurface(text);
+}
+
/*
* Vrati velkost daneho fontu.
*/
diff --git a/src/client/font.h b/src/client/font.h
index f938b3b..cf8ece6 100755
--- a/src/client/font.h
+++ b/src/client/font.h
@@ -19,6 +19,7 @@
extern bool_t isFontInicialized();
extern void initFont(char *file,int size);
extern void drawFont(char *s,int x,int y,int r,int g,int b);
+extern void drawFontMaxSize(char *s, int x, int y, int w, int h, int r, int g, int b);
extern int getFontSize();
extern void getTextSize(char *s, int *w, int *h);
extern void quitFont();
diff --git a/src/client/panel.c b/src/client/panel.c
index 3338544..7a5b3e2 100644
--- a/src/client/panel.c
+++ b/src/client/panel.c
@@ -10,6 +10,7 @@
#include "image.h"
#include "panel.h"
#include "font.h"
+#include "chat.h"
static SDL_Surface *g_panel;
static SDL_Surface *g_shot;
@@ -145,6 +146,11 @@ void drawPanel(list_t *listTux)
drawImage(g_panel, PANEL_LOCATION_X, PANEL_LOCATION_Y, 0, 0, g_panel->w, g_panel->h);
drawScore(listTux);
+ if( isRecivedNewMsg() )
+ {
+ drawFont("recived new msg", PANEL_LOCATION_X, PANEL_LOCATION_Y, COLOR_WHITE);
+ }
+
for( i = 0 ; i < listTux->count ; i++ )
{
tux_t *thisTux;
diff --git a/src/client/radar.c b/src/client/radar.c
index 789fb45..6f6b028 100644
--- a/src/client/radar.c
+++ b/src/client/radar.c
@@ -85,7 +85,7 @@ void initRadar()
assert( isImageInicialized() == TRUE );
assert( isInterfaceInicialized() == TRUE );
- g_radar = addImageData("radar.png", IMAGE_ALPHA, "radar", IMAGE_GROUP_USER);
+ g_radar = addImageData("radar.png", IMAGE_NO_ALPHA, "radar", IMAGE_GROUP_USER);
listRadar = newList();
}
diff --git a/src/screen/screen_world.c b/src/screen/screen_world.c
index 10e9623..1c0ad4a 100644
--- a/src/screen/screen_world.c
+++ b/src/screen/screen_world.c
@@ -20,11 +20,11 @@
#include "keytable.h"
#include "layer.h"
#include "image.h"
-//#include "heightScore.h"
#include "term.h"
#include "font.h"
#include "panel.h"
#include "radar.h"
+#include "chat.h"
#ifndef NO_SOUND
#include "music.h"
@@ -150,7 +150,7 @@ void prepareArena()
if( isSettingAI() )
{
- if( loadModule("modAI.so") == 0 )
+ if( loadModule("libmodAI.so") == 0 )
{
tux->control = TUX_CONTROL_AI;
}
@@ -174,25 +174,6 @@ void prepareArena()
}
}
-/*
-static void drawServerLag()
-{
- char msg[STR_SIZE];
-
- if( lastServerLag == LAG_SERVER_UNKNOWN )
- {
- sprintf(msg, "lag server: unknown");
- }
- else
- {
- sprintf(msg, "lag server: %d", lastServerLag);
- }
-
- drawFont(msg, WINDOW_SIZE_X-150, 20, COLOR_WHITE);
-
-}
-*/
-
void drawWorld()
{
if( arena != NULL )
@@ -207,6 +188,7 @@ void drawWorld()
}
drawTerm();
+ drawChat();
}
static void netAction(tux_t *tux, int action)
@@ -382,22 +364,6 @@ static void control_keyboard_left(tux_t *tux)
tuDown:;
}
-
-/*
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_MOVE_UP)] == SDL_PRESSED )actionTux(tux, TUX_UP);
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_MOVE_RIGHT)] == SDL_PRESSED )actionTux(tux, TUX_RIGHT);
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_MOVE_LEFT)] == SDL_PRESSED )actionTux(tux, TUX_LEFT);
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_MOVE_DOWN)] == SDL_PRESSED )actionTux(tux, TUX_DOWN);
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_SHOOT)] == SDL_PRESSED )actionTux(tux, TUX_SHOT);
-
- if( mapa[(SDLKey)getKey(KEY_TUX_LEFT_SWITCH_WEAPON)] == SDL_PRESSED )
- {
- if( tux->isCanSwitchGun == TRUE )
- {
- actionTux(tux, TUX_SWITCH_GUN);
- }
- }
-*/
}
static void eventEsc()
@@ -405,7 +371,7 @@ static void eventEsc()
Uint8 *mapa;
mapa = SDL_GetKeyState(NULL);
- if( mapa[(SDLKey)SDLK_ESCAPE] == SDL_PRESSED )
+ if( mapa[(SDLKey)SDLK_ESCAPE] == SDL_PRESSED && isChatActive() == FALSE )
{
isEndWorld = TRUE;
setWorldEnd();
@@ -466,11 +432,17 @@ void tuxControl(tux_t *p)
break;
case TUX_CONTROL_KEYBOARD_LEFT :
- control_keyboard_left(p);
+ if( isChatActive() == FALSE)
+ {
+ control_keyboard_left(p);
+ }
break;
case TUX_CONTROL_KEYBOARD_RIGHT :
- control_keyboard_right(p);
+ if( isChatActive() == FALSE)
+ {
+ control_keyboard_right(p);
+ }
break;
}
}
@@ -498,6 +470,7 @@ void eventWorld()
eventTerm();
eventEnd();
eventEsc();
+ eventChat();
}
void startWorld()
@@ -513,6 +486,7 @@ void startWorld()
initModule();
setGameType();
initTerm();
+ initChat();
prepareArena();
}
@@ -583,6 +557,7 @@ void stoptWorld()
#endif
quitModule();
quitTerm();
+ quitChat();
quitListID();
}