about summary refs log tree commit diff
path: root/src/game/client/components/emoticon.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-30 08:20:06 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-08-30 08:20:06 +0000
commit71fa35606c268594f8cf4c52626057f86861c3de (patch)
treebbb67479ab1b89a0e18af6cd4dc9c3a3cca5d0ba /src/game/client/components/emoticon.cpp
parentb4cef60d62e24d3c0c0451e94adf99254a259a3d (diff)
downloadzcatch-71fa35606c268594f8cf4c52626057f86861c3de.tar.gz
zcatch-71fa35606c268594f8cf4c52626057f86861c3de.zip
fixed emoticons
Diffstat (limited to 'src/game/client/components/emoticon.cpp')
-rw-r--r--src/game/client/components/emoticon.cpp41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/game/client/components/emoticon.cpp b/src/game/client/components/emoticon.cpp
index f359530a..75859f60 100644
--- a/src/game/client/components/emoticon.cpp
+++ b/src/game/client/components/emoticon.cpp
@@ -3,6 +3,7 @@
 #include <game/generated/gc_data.hpp>
 
 #include <game/gamecore.hpp> // get_angle
+#include <game/client/gameclient.hpp>
 #include <game/client/gc_ui.hpp>
 #include <game/client/gc_render.hpp>
 #include "emoticon.hpp"
@@ -12,22 +13,42 @@ EMOTICON::EMOTICON()
 	on_reset();
 }
 
+void EMOTICON::con_key_emoticon(void *result, void *user_data)
+{
+	((EMOTICON *)user_data)->active = console_arg_int(result, 0) != 0;
+}
+
+void EMOTICON::on_init()
+{
+	MACRO_REGISTER_COMMAND("+emote", "", con_key_emoticon, this);
+}
+
 void EMOTICON::on_reset()
 {
-	selector_active = 0;
+	was_active = false;
+	active = false;
 	selected_emote = -1;
 }
 
 void EMOTICON::on_message(int msgtype, void *rawmsg)
 {
+	if(msgtype == NETMSGTYPE_SV_EMOTICON)
+	{
+		NETMSG_SV_EMOTICON *msg = (NETMSG_SV_EMOTICON *)rawmsg;
+		gameclient.clients[msg->cid].emoticon = msg->emoticon;
+		gameclient.clients[msg->cid].emoticon_start = client_tick();
+	}	
 }
 
-bool EMOTICON::on_input(INPUT_EVENT e)
+bool EMOTICON::on_mousemove(float x, float y)
 {
-	return false;
+	if(!active)
+		return false;
+	
+	selector_mouse += vec2(x,y);
+	return true;
 }
 
-
 void EMOTICON::draw_circle(float x, float y, float r, int segments)
 {
 	float f_segments = (float)segments;
@@ -54,6 +75,16 @@ void EMOTICON::draw_circle(float x, float y, float r, int segments)
 	
 void EMOTICON::on_render()
 {
+	if(!active)
+	{
+		if(was_active && selected_emote)
+			emote(selected_emote);
+		was_active = false;
+		return;
+	}
+	
+	was_active = true;
+	
 	int x, y;
 	inp_mouse_relative(&x, &y);
 
@@ -110,8 +141,6 @@ void EMOTICON::on_render()
     gfx_quads_end();
 }
 
-
-
 void EMOTICON::emote(int emoticon)
 {
 	NETMSG_CL_EMOTICON msg;