about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakob Fries <jakob.fries@gmail.com>2007-07-21 12:57:36 +0000
committerJakob Fries <jakob.fries@gmail.com>2007-07-21 12:57:36 +0000
commitbb4ea1b87d5d621c1e5cd15af9afb7b2bac982f7 (patch)
tree1fc02d519e45dc8da93712e4a72af2ed0418d15d
parent2800f850cca5c0405a76948167378a93b716d565 (diff)
downloadzcatch-bb4ea1b87d5d621c1e5cd15af9afb7b2bac982f7.tar.gz
zcatch-bb4ea1b87d5d621c1e5cd15af9afb7b2bac982f7.zip
gui
-rw-r--r--src/engine/client/gfx.cpp5
-rw-r--r--src/engine/client/ui.cpp4
-rw-r--r--src/engine/client/ui.h1
-rw-r--r--src/engine/interface.h8
-rw-r--r--src/game/client/menu.cpp87
-rw-r--r--src/game/server/game_server.cpp3
6 files changed, 83 insertions, 25 deletions
diff --git a/src/engine/client/gfx.cpp b/src/engine/client/gfx.cpp
index 5280ef5d..cf9e49fd 100644
--- a/src/engine/client/gfx.cpp
+++ b/src/engine/client/gfx.cpp
@@ -160,6 +160,11 @@ bool gfx_init(bool fullscreen)
 	return true;
 }
 
+int gfx_get_video_modes(video_mode *list, int maxcount)
+{
+	return context.getvideomodes((opengl::videomode *)list, maxcount);
+}
+
 int gfx_unload_texture(int index)
 {
 	textures[index].tex.clear();
diff --git a/src/engine/client/ui.cpp b/src/engine/client/ui.cpp
index 8c8dba2c..4c13ca00 100644
--- a/src/engine/client/ui.cpp
+++ b/src/engine/client/ui.cpp
@@ -19,6 +19,7 @@ void gfx_pretty_text(float x, float y, float size, const char *text);
 
 static void *hot_item = 0;
 static void *active_item = 0;
+static void *last_active_item = 0;
 static void *becomming_hot_item = 0;
 static float mouse_x, mouse_y; // in gui space
 static float mouse_wx, mouse_wy; // in world space
@@ -31,9 +32,10 @@ float ui_mouse_world_y() { return mouse_wy; }
 int ui_mouse_button(int index) { return (mouse_buttons>>index)&1; }
 
 void ui_set_hot_item(void *id) { becomming_hot_item = id; }
-void ui_set_active_item(void *id) { active_item = id; }
+void ui_set_active_item(void *id) { active_item = id; last_active_item = id; }
 void *ui_hot_item() { return hot_item; }
 void *ui_active_item() { return active_item; }
+void *ui_last_active_item() { return last_active_item; }
 
 int ui_update(float mx, float my, float mwx, float mwy, int buttons)
 {
diff --git a/src/engine/client/ui.h b/src/engine/client/ui.h
index 268785be..9678453e 100644
--- a/src/engine/client/ui.h
+++ b/src/engine/client/ui.h
@@ -20,6 +20,7 @@ void ui_set_hot_item(void *id);
 void ui_set_active_item(void *id);
 void *ui_hot_item();
 void *ui_active_item();
+void *ui_last_active_item();
 
 int ui_mouse_inside(float x, float y, float w, float h);
 
diff --git a/src/engine/interface.h b/src/engine/interface.h
index 492a4b81..3509f0ca 100644
--- a/src/engine/interface.h
+++ b/src/engine/interface.h
@@ -42,6 +42,12 @@ struct image_info
 	void *data;
 };
 
+struct video_mode
+{
+	int width, height;
+	int red, green, blue;
+};
+
 int gfx_load_tga(image_info *img, const char *filename);
 int gfx_load_png(image_info *img, const char *filename);
 
@@ -55,6 +61,8 @@ bool gfx_init(bool fullscreen); // NOT EXPOSED
 void gfx_shutdown(); // NOT EXPOSED
 void gfx_swap(); // NOT EXPOSED
 
+int gfx_get_video_modes(video_mode *list, int maxcount);
+
 // textures
 /*
 	Function: gfx_load_texture
diff --git a/src/game/client/menu.cpp b/src/game/client/menu.cpp
index 9e1b34e6..2d2a3398 100644
--- a/src/game/client/menu.cpp
+++ b/src/game/client/menu.cpp
@@ -142,8 +142,17 @@ struct pretty_font
 extern pretty_font *current_font;
 float gfx_pretty_text_width(float size, const char *text);
 
-void draw_scrolling_background(int id, float w, float h, float t)
+void render_sun(float x, float y);
+
+void draw_background(float t)
 {
+	// background color
+	gfx_clear(0.65f,0.78f,0.9f);
+
+	gfx_blend_normal();
+	render_sun(170, 170);
+
+/*
 	float tx = w/512.0f;
 	float ty = h/512.0f;
 
@@ -161,6 +170,7 @@ void draw_scrolling_background(int id, float w, float h, float t)
 		start_y+ty); // endy								
     gfx_quads_drawTL(0.0f,0.0f,w,h);
     gfx_quads_end();
+*/
 }
 
 static int background_texture;
@@ -207,7 +217,10 @@ void draw_teewars_button(void *id, const char *text, int checked, float x, float
 	gui_tileset_enum tileset;
 
 	if (ui_active_item() == id)
-		tileset = tileset_active;
+	{
+		int inside = ui_mouse_inside(x, y, w, h);
+		tileset = inside ? tileset_active : tileset_hot;
+	}
 	else if (ui_hot_item() == id)
 		tileset = tileset_hot;
 	else
@@ -681,28 +694,53 @@ static int settings_screen_render()
 	ui_do_label(column2_x, keys_y + 160, "Hook:", 36);
 	config_set_key_hook(&config_copy, ui_do_key_reader(&config_copy.key_hook, column3_x, keys_y + 160, 150, 40, config_copy.key_hook));
 
-	// RESOLUTION
-	static char resolutions[][128] =
-	{
-		"800x600",
-		"1024x764",
-		"1280x960",
-		"1600x1200",
-	};
-	static int res[][2] =
+	static int resolution_count[2] = {0};
+	static int resolutions[2][10][2] = {0};
+	static char resolution_names[2][10][128] = {0};
+
+	static bool inited = false;
+	if (!inited)
 	{
-		{ 800, 600 },
-		{ 1024, 768 },
-		{ 1280, 960 },
-		{ 1600, 1200 },
-	};
+		const int num_modes = 1024;
+
+		video_mode modes[num_modes];
+
+		int retn = gfx_get_video_modes(modes, num_modes);
 
+		for (int i = 0; i < retn; i++)
+		{
+			video_mode mode = modes[i];
+			int depth = mode.red + mode.green + mode.blue;
+			
+			int depth_index;
+
+			if (depth == 15 || depth == 16)
+				depth_index = 0;
+			else if (depth == 24)
+				depth_index = 1;
+			else
+			{
+				dbg_msg("menu", "a resolution with a weird depth was reported: %ix%i (%i/%i/%i)", mode.width, mode.height, mode.red, mode.green, mode.blue);
+				continue;
+			}
+
+			int resolution_index = resolution_count[depth_index];
+			resolution_count[depth_index]++;
+			resolutions[depth_index][resolution_index][0] = mode.width;
+			resolutions[depth_index][resolution_index][1] = mode.height;
+			sprintf(resolution_names[depth_index][resolution_index], "%ix%i", mode.width, mode.height);
+		}
+
+		inited = true;
+	}
+
+	int depth_index = 0;
 	static int selected_index = -1;
 	if (selected_index == -1)
 	{
-		for (int i = 0; i < 4; i++)
+		for (int i = 0; i < resolution_count[depth_index]; i++)
 		{
-			if (config.screen_width == res[i][0])
+			if (config.screen_width == resolutions[depth_index][i][0])
 			{
 				selected_index = i;
 				break;
@@ -714,10 +752,10 @@ static int settings_screen_render()
 	}
 
 	ui_do_label(column1_x, resolution_y, "Resolution:", 36);
-	selected_index = ui_do_combo_box(&selected_index, column2_x, resolution_y, 180, (char *)resolutions, 4, selected_index);
+	selected_index = ui_do_combo_box(&selected_index, column2_x, resolution_y, 180, (char *)resolution_names[depth_index], resolution_count[depth_index], selected_index);
 
-	config_set_screen_width(&config_copy, res[selected_index][0]);
-	config_set_screen_height(&config_copy, res[selected_index][1]);
+	config_set_screen_width(&config_copy, resolutions[depth_index][selected_index][0]);
+	config_set_screen_height(&config_copy, resolutions[depth_index][selected_index][1]);
 
 	// SAVE BUTTON
 	static int save_button;
@@ -908,7 +946,8 @@ static int editor_screen_render()
 static int menu_render(netaddr4 *server_address)
 {
 	// background color
-	gfx_clear(89/255.f,122/255.f,0.0);
+	gfx_clear(0.65f,0.78f,0.9f);
+	//gfx_clear(89/255.f,122/255.f,0.0);
 
 	// GUI coordsys
 	gfx_mapscreen(0,0,800.0f,600.0f);
@@ -916,7 +955,9 @@ static int menu_render(netaddr4 *server_address)
 	static int64 start = time_get();
 
 	float t = double(time_get() - start) / double(time_freq());
-	draw_scrolling_background(background_texture, 800, 600, t * 0.01);
+	gfx_mapscreen(0,0,1600.0f,1200.0f);
+	draw_background(t * 0.01);
+	gfx_mapscreen(0,0,800.0f,600.0f);
 
 	if (screen != 2)
 	{
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 0fb1aeab..3d7280e0 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -1049,7 +1049,8 @@ player *get_player(int index)
 
 void create_damageind(vec2 p, vec2 dir, int amount)
 {
-	float a = get_angle(dir);
+	float a = 3 * 3.14159f / 2;
+	//float a = get_angle(dir);
 	float s = a-pi/3;
 	float e = a+pi/3;
 	for(int i = 0; i < amount; i++)