Index: kart_menu.c
===================================================================
--- kart_menu.c	(revision 666)
+++ kart_menu.c	(revision 667)
@@ -0,0 +1,489 @@
+// Kartogony - Menu Items
+
+typedef struct MenuItem
+{
+char state;
+char text[RAYDIUM_MAX_NAME_LEN];
+char texture[RAYDIUM_MAX_NAME_LEN];
+void *OnClick; //event
+int  param;
+float px;
+float py;
+float sizex;
+float sizey;
+float text_size;
+float colors[9]; // 3 each, off, on, current
+} MenuItem;
+
+#define MAX_MENU_ITEMS 20
+MenuItem menus[MAX_MENU_ITEMS];
+char menu;
+char menu_server_ip[RAYDIUM_MAX_NAME_LEN];
+char menu_networked_game;;
+int  menu_team;
+
+void MenuItem_init(MenuItem *e)
+{
+e->state=0;
+e->OnClick=NULL;
+}
+
+void MenuItem_colors(MenuItem *e, float off_r, float off_g, float off_b, float on_r, float on_g, float on_b)
+{
+float f[9];
+f[0]=off_r;
+f[1]=off_g;
+f[2]=off_b;
+f[3]=on_r;
+f[4]=on_g;
+f[5]=on_b;
+// current color
+f[6]=off_r;
+f[7]=off_g;
+f[8]=off_b;
+memcpy(e->colors,f,sizeof(float)*9);
+}
+
+void MenuItem_init_all(void)
+{
+int i;
+for(i=0;i<MAX_MENU_ITEMS;i++)
+    MenuItem_init(&menus[i]);
+}
+
+void MenuItem_draw(void)
+{
+int i;
+void (*f)(int);
+float dec;
+
+float mx;
+float my;
+float inc;
+
+mx=(raydium_mouse_x/(raydium_window_tx+0.1))*100;
+my=100-(raydium_mouse_y/(raydium_window_ty+0.1))*100;
+inc=frame_time*4;
+
+for(i=0;i<MAX_MENU_ITEMS;i++)
+    if(menus[i].state)
+	{
+	f=menus[i].OnClick;
+	
+	if(mx>menus[i].px-(menus[i].sizex/2) && mx<menus[i].px+(menus[i].sizex/2) &&
+	   my>menus[i].py-(menus[i].sizey/2) && my<menus[i].py+(menus[i].sizey/2) )
+	   {
+	   // selected
+	   if(menus[i].colors[3]>menus[i].colors[0] && menus[i].colors[6]<menus[i].colors[3])
+		menus[i].colors[6]+=inc;
+	   if(menus[i].colors[0]>menus[i].colors[3] && menus[i].colors[6]>menus[i].colors[3])
+		menus[i].colors[6]-=inc;
+
+	   if(menus[i].colors[4]>menus[i].colors[1] && menus[i].colors[7]<menus[i].colors[4])
+		menus[i].colors[7]+=inc;
+	   if(menus[i].colors[1]>menus[i].colors[4] && menus[i].colors[7]>menus[i].colors[4])
+		menus[i].colors[7]-=inc;
+
+	   if(menus[i].colors[5]>menus[i].colors[2] && menus[i].colors[8]<menus[i].colors[5])
+		menus[i].colors[8]+=inc;
+	   if(menus[i].colors[2]>menus[i].colors[5] && menus[i].colors[8]>menus[i].colors[5])
+		menus[i].colors[8]-=inc;	   
+	   if(raydium_mouse_click==1 && f) 
+	    { 
+	    f(menus[i].param); 
+	    raydium_mouse_click=0;
+//	    return;
+	    }
+	   }
+	   else
+	   {
+	   // not selected
+	   if(menus[i].colors[3]>menus[i].colors[0] && menus[i].colors[6]>menus[i].colors[0])
+		menus[i].colors[6]-=inc;
+	   if(menus[i].colors[0]>menus[i].colors[3] && menus[i].colors[6]<menus[i].colors[0])
+		menus[i].colors[6]+=inc;
+
+	   if(menus[i].colors[4]>menus[i].colors[1] && menus[i].colors[7]>menus[i].colors[1])
+		menus[i].colors[7]-=inc;
+	   if(menus[i].colors[1]>menus[i].colors[4] && menus[i].colors[7]<menus[i].colors[1])
+		menus[i].colors[7]+=inc;
+
+	   if(menus[i].colors[5]>menus[i].colors[2] && menus[i].colors[8]>menus[i].colors[2])
+		menus[i].colors[8]-=inc;
+	   if(menus[i].colors[2]>menus[i].colors[5] && menus[i].colors[8]<menus[i].colors[2])
+		menus[i].colors[8]+=inc;	   
+
+	   }
+	   
+	raydium_osd_color_rgba(menus[i].colors[6],menus[i].colors[7],menus[i].colors[8],1);
+	raydium_osd_draw_name(menus[i].texture,
+			      menus[i].px-(menus[i].sizex/2),
+			      menus[i].py-(menus[i].sizey/2),
+			      menus[i].px+(menus[i].sizex/2),
+			      menus[i].py+(menus[i].sizey/2));
+	dec=strlen(menus[i].text)-2;
+	dec*=(menus[i].text_size/26);
+	raydium_osd_printf(menus[i].px-dec,menus[i].py,menus[i].text_size,0.5,"font2.tga","%s",menus[i].text);
+	}
+}
+
+
+
+/////////////////
+void menu_color(int);
+void menu_ip(int);
+void menu_main(int);
+void menu_game(int);
+void start_game(void);
+///
+
+void menu_number(int num)
+{
+int i;
+i=strlen(menu_server_ip);
+
+if(num==27)
+    {
+    if(i==0) return;
+    menu_server_ip[i-1]=0;
+    }
+else
+    if(i<15)
+    {
+    menu_server_ip[i]=num;
+    menu_server_ip[i+1]=0;
+    }
+sprintf(menus[13].text,"^f%s",menu_server_ip);
+}
+
+void menu_main(int dummy)
+{
+menu_networked_game=0;
+menu=1;
+
+MenuItem_init_all();
+
+// Training
+menus[0].state=1;
+strcpy(menus[0].text,"^fTraining");
+strcpy(menus[0].texture,"aqua.tga");
+menus[0].OnClick=menu_color;
+menus[0].px=50;
+menus[0].py=80;
+menus[0].sizex=30;
+menus[0].sizey=10;
+menus[0].text_size=20;
+MenuItem_colors(&menus[0],0.9,0.2,0.2, 0.2,0.2,0.9);
+
+// Play
+menus[1].state=1;
+strcpy(menus[1].text,"^fNetwork Play");
+strcpy(menus[1].texture,"aqua.tga");
+menus[1].OnClick=menu_ip;
+menus[1].px=50;
+menus[1].py=60;
+menus[1].sizex=30;
+menus[1].sizey=10;
+menus[1].text_size=20;
+MenuItem_colors(&menus[1],0.9,0.2,0.2,0.2,0.2,0.9);
+
+// Quit
+menus[2].state=1;
+strcpy(menus[2].text,"^fQuit");
+strcpy(menus[2].texture,"aqua.tga");
+menus[2].OnClick=exit;
+menus[2].param=0;
+menus[2].px=50;
+menus[2].py=20;
+menus[2].sizex=30;
+menus[2].sizey=10;
+menus[2].text_size=20;
+MenuItem_colors(&menus[2],0.9,0.9,0.9,0.1,0.1,0.1);
+
+}
+
+
+void menu_color(int dummy)
+{
+menu=1;
+
+MenuItem_init_all();
+
+menus[0].state=1;
+strcpy(menus[0].text,"^fRed Team");
+strcpy(menus[0].texture,"aqua.tga");
+menus[0].OnClick=menu_game;
+menus[0].param=0;
+menus[0].px=50;
+menus[0].py=90;
+menus[0].sizex=30;
+menus[0].sizey=10;
+menus[0].text_size=20;
+MenuItem_colors(&menus[0], TEAM_COL2(0), TEAM_COL(0));
+
+menus[1].state=1;
+strcpy(menus[1].text,"^fGreen Team");
+strcpy(menus[1].texture,"aqua.tga");
+menus[1].OnClick=menu_game;
+menus[1].param=1;
+menus[1].px=50;
+menus[1].py=70;
+menus[1].sizex=30;
+menus[1].sizey=10;
+menus[1].text_size=20;
+MenuItem_colors(&menus[1], TEAM_COL2(1), TEAM_COL(1));
+
+menus[2].state=1;
+strcpy(menus[2].text,"^fBlue Team");
+strcpy(menus[2].texture,"aqua.tga");
+menus[2].OnClick=menu_game;
+menus[2].param=2;
+menus[2].px=50;
+menus[2].py=50;
+menus[2].sizex=30;
+menus[2].sizey=10;
+menus[2].text_size=20;
+MenuItem_colors(&menus[2], TEAM_COL2(2), TEAM_COL(2));
+
+menus[3].state=1;
+strcpy(menus[3].text,"^fYellow Team");
+strcpy(menus[3].texture,"aqua.tga");
+menus[3].OnClick=menu_game;
+menus[3].param=3;
+menus[3].px=50;
+menus[3].py=30;
+menus[3].sizex=30;
+menus[3].sizey=10;
+menus[3].text_size=20;
+MenuItem_colors(&menus[3], TEAM_COL2(3), TEAM_COL(3));
+
+menus[4].state=1;
+strcpy(menus[4].text,"^fBACK");
+strcpy(menus[4].texture,"aqua.tga");
+menus[4].OnClick=menu_main;
+menus[4].px=50;
+menus[4].py=10;
+menus[4].sizex=30;
+menus[4].sizey=10;
+menus[4].text_size=25;
+MenuItem_colors(&menus[4],0.1,0.1,0.1, 0.9,0.9,0.9);
+}
+
+void menu_ip(int dummy)
+{
+FILE *fp;
+menu_networked_game=1;
+menu=1;
+
+
+menu_server_ip[0]=0;
+fp=fopen("server.last","rt");
+if(fp)
+    {
+    fgets(menu_server_ip,128,fp);
+    if(strlen(menu_server_ip) && menu_server_ip[strlen(menu_server_ip)-1]=='\n')
+	menu_server_ip[strlen(menu_server_ip)-1]=0;
+    fclose(fp);
+    }
+
+menu_team=dummy;
+
+MenuItem_init_all();
+
+menus[0].state=1;
+strcpy(menus[0].text,"^fServer IP");
+strcpy(menus[0].texture,"aqua.tga");
+menus[0].px=50;
+menus[0].py=90;
+menus[0].sizex=30;
+menus[0].sizey=10;
+menus[0].text_size=20;
+MenuItem_colors(&menus[0],0.6,0.2,0.2, 0.9,0.2,0.2);
+
+menus[1].state=1;
+strcpy(menus[1].text,"^fBACK");
+strcpy(menus[1].texture,"aqua.tga");
+menus[1].OnClick=menu_main;
+menus[1].px=50;
+menus[1].py=10;
+menus[1].sizex=30;
+menus[1].sizey=10;
+menus[1].text_size=25;
+MenuItem_colors(&menus[1],0.1,0.1,0.1, 0.2,0.9,0.2);
+
+menus[2].state=1;
+strcpy(menus[2].text,"^f7");
+strcpy(menus[2].texture,"aquab.tga");
+menus[2].OnClick=menu_number;
+menus[2].param='7';
+menus[2].px=40;
+menus[2].py=75;
+menus[2].sizex=10;
+menus[2].sizey=10;
+menus[2].text_size=20;
+MenuItem_colors(&menus[2],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[3].state=1;
+strcpy(menus[3].text,"^f8");
+strcpy(menus[3].texture,"aquab.tga");
+menus[3].OnClick=menu_number;
+menus[3].param='8';
+menus[3].px=50;
+menus[3].py=75;
+menus[3].sizex=10;
+menus[3].sizey=10;
+menus[3].text_size=20;
+MenuItem_colors(&menus[3],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[4].state=1;
+strcpy(menus[4].text,"^f9");
+strcpy(menus[4].texture,"aquab.tga");
+menus[4].OnClick=menu_number;
+menus[4].param='9';
+menus[4].px=60;
+menus[4].py=75;
+menus[4].sizex=10;
+menus[4].sizey=10;
+menus[4].text_size=20;
+MenuItem_colors(&menus[4],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[5].state=1;
+strcpy(menus[5].text,"^f4");
+strcpy(menus[5].texture,"aquab.tga");
+menus[5].OnClick=menu_number;
+menus[5].param='4';
+menus[5].px=40;
+menus[5].py=65;
+menus[5].sizex=10;
+menus[5].sizey=10;
+menus[5].text_size=20;
+MenuItem_colors(&menus[5],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[6].state=1;
+strcpy(menus[6].text,"^f5");
+strcpy(menus[6].texture,"aquab.tga");
+menus[6].OnClick=menu_number;
+menus[6].param='5';
+menus[6].px=50;
+menus[6].py=65;
+menus[6].sizex=10;
+menus[6].sizey=10;
+menus[6].text_size=20;
+MenuItem_colors(&menus[6],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[7].state=1;
+strcpy(menus[7].text,"^f6");
+strcpy(menus[7].texture,"aquab.tga");
+menus[7].OnClick=menu_number;
+menus[7].param='6';
+menus[7].px=60;
+menus[7].py=65;
+menus[7].sizex=10;
+menus[7].sizey=10;
+menus[7].text_size=20;
+MenuItem_colors(&menus[7],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[8].state=1;
+strcpy(menus[8].text,"^f1");
+strcpy(menus[8].texture,"aquab.tga");
+menus[8].OnClick=menu_number;
+menus[8].param='1';
+menus[8].px=40;
+menus[8].py=55;
+menus[8].sizex=10;
+menus[8].sizey=10;
+menus[8].text_size=20;
+MenuItem_colors(&menus[8],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[9].state=1;
+strcpy(menus[9].text,"^f2");
+strcpy(menus[9].texture,"aquab.tga");
+menus[9].OnClick=menu_number;
+menus[9].param='2';
+menus[9].px=50;
+menus[9].py=55;
+menus[9].sizex=10;
+menus[9].sizey=10;
+menus[9].text_size=20;
+MenuItem_colors(&menus[9],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[10].state=1;
+strcpy(menus[10].text,"^f3");
+strcpy(menus[10].texture,"aquab.tga");
+menus[10].OnClick=menu_number;
+menus[10].param='3';
+menus[10].px=60;
+menus[10].py=55;
+menus[10].sizex=10;
+menus[10].sizey=10;
+menus[10].text_size=20;
+MenuItem_colors(&menus[10],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[11].state=1;
+strcpy(menus[11].text,"^f0");
+strcpy(menus[11].texture,"aquab.tga");
+menus[11].OnClick=menu_number;
+menus[11].param='0';
+menus[11].px=40;
+menus[11].py=45;
+menus[11].sizex=10;
+menus[11].sizey=10;
+menus[11].text_size=20;
+MenuItem_colors(&menus[11],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+
+menus[12].state=1;
+strcpy(menus[12].text,"^f.");
+strcpy(menus[12].texture,"aquab.tga");
+menus[12].OnClick=menu_number;
+menus[12].param='.';
+menus[12].px=60;
+menus[12].py=45;
+menus[12].sizex=10;
+menus[12].sizey=10;
+menus[12].text_size=20;
+MenuItem_colors(&menus[12],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+// Displays IP address
+menus[13].state=1;
+sprintf(menus[13].text,"^f%s",menu_server_ip);
+strcpy(menus[13].texture,"aqua.tga");
+menus[13].px=30;
+menus[13].py=30;
+menus[13].sizex=40;
+menus[13].sizey=10;
+menus[13].text_size=20;
+MenuItem_colors(&menus[13],0.9,0.2,0.2, 0.9,0.2,0.2);
+
+menus[14].state=1;
+strcpy(menus[14].text,"^fdel");
+strcpy(menus[14].texture,"aquab.tga");
+menus[14].OnClick=menu_number;
+menus[14].param=27;
+menus[14].px=50;
+menus[14].py=45;
+menus[14].sizex=10;
+menus[14].sizey=10;
+menus[14].text_size=20;
+MenuItem_colors(&menus[14],0.9,0.2,0.2, 0.2,0.9,0.2);
+
+menus[15].state=1;
+strcpy(menus[15].text,"^fConnect");
+strcpy(menus[15].texture,"aqua.tga");
+menus[15].OnClick=menu_color;
+menus[15].param=dummy;
+menus[15].px=70;
+menus[15].py=30;
+menus[15].sizex=30;
+menus[15].sizey=10;
+menus[15].text_size=20;
+MenuItem_colors(&menus[15],0.9,0.2,0.2, 0.2,0.2,0.9);
+
+}
+
+void menu_game(int team)
+{
+menu_team=team;
+menu=0;
+start_game();
+}

Property changes on: kart_menu.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property