about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-03-12 23:53:39 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-03-12 23:53:39 +0000
commit24969cd0efa675d399b4a5b97077b7c8d06b5fec (patch)
tree9ab9f3b69646fbb11a852710fcae7a57b2e45dda
parent0883fc3dfd51d8dda9a9dc055400871057cfe3a2 (diff)
downloadzcatch-24969cd0efa675d399b4a5b97077b7c8d06b5fec.tar.gz
zcatch-24969cd0efa675d399b4a5b97077b7c8d06b5fec.zip
tilemap skip optimizating
-rw-r--r--src/game/client/gc_hooks.cpp2
-rw-r--r--src/game/client/gc_render.cpp33
-rw-r--r--src/game/client/gc_render.h2
-rw-r--r--src/game/client/gc_render_map.cpp2
-rw-r--r--src/game/g_mapitems.h2
5 files changed, 40 insertions, 1 deletions
diff --git a/src/game/client/gc_hooks.cpp b/src/game/client/gc_hooks.cpp
index 73dde8f2..95c16e2c 100644
--- a/src/game/client/gc_hooks.cpp
+++ b/src/game/client/gc_hooks.cpp
@@ -636,6 +636,8 @@ extern "C" void modc_connected()
 	img_init();
 	flow_init();
 	
+	render_tilemap_generate_skip();
+	
 	//tilemap_init();
 	chat_reset();
 	particle_reset();
diff --git a/src/game/client/gc_render.cpp b/src/game/client/gc_render.cpp
index 45503c8c..93aa483d 100644
--- a/src/game/client/gc_render.cpp
+++ b/src/game/client/gc_render.cpp
@@ -343,6 +343,39 @@ void render_layers(float center_x, float center_y, int pass)
 	}
 }
 
+void render_tilemap_generate_skip()
+{
+	for(int g = 0; g < layers_num_groups(); g++)
+	{
+		MAPITEM_GROUP *group = layers_get_group(g);
+		
+		for(int l = 0; l < group->num_layers; l++)
+		{
+			MAPITEM_LAYER *layer = layers_get_layer(group->start_layer+l);
+
+			if(layer->type == LAYERTYPE_TILES)
+			{
+				MAPITEM_LAYER_TILEMAP *tmap = (MAPITEM_LAYER_TILEMAP *)layer;
+				TILE *tiles = (TILE *)map_get_data(tmap->data);
+				for(int y = 0; y < tmap->height; y++)
+				{
+					for(int x = 0; x < tmap->width; x++)
+					{
+						int sx;
+						for(sx = 1; x+sx < tmap->width && sx < 255; sx++)
+						{
+							if(tiles[y*tmap->width+x+sx].index)
+								break;
+						}
+						
+						tiles[y*tmap->width+x].skip = sx-1;
+					}
+				}
+			}
+		}
+	}
+}
+
 static void render_items()
 {
 	int num = snap_num_items(SNAP_CURRENT);
diff --git a/src/game/client/gc_render.h b/src/game/client/gc_render.h
index a6f57b7b..53b6510a 100644
--- a/src/game/client/gc_render.h
+++ b/src/game/client/gc_render.h
@@ -52,6 +52,8 @@ void render_loading(float percent);
 void render_damage_indicators();
 void render_particles();
 
+void render_tilemap_generate_skip();
+
 // object render methods (gc_render_obj.cpp)
 void render_tee(class animstate *anim, tee_render_info *info, int emote, vec2 dir, vec2 pos);
 void render_flag(const struct NETOBJ_FLAG *prev, const struct NETOBJ_FLAG *current);
diff --git a/src/game/client/gc_render_map.cpp b/src/game/client/gc_render_map.cpp
index d5e7f1a0..8693ed18 100644
--- a/src/game/client/gc_render_map.cpp
+++ b/src/game/client/gc_render_map.cpp
@@ -237,6 +237,8 @@ void render_tilemap(TILE *tiles, int w, int h, float scale, vec4 color, int flag
 
 				gfx_quads_drawTL(x*scale, y*scale, scale, scale);
 			}
+			
+			x += tiles[c].skip;
 		}
 	
 	gfx_quads_end();
diff --git a/src/game/g_mapitems.h b/src/game/g_mapitems.h
index a8278a44..d78cf66d 100644
--- a/src/game/g_mapitems.h
+++ b/src/game/g_mapitems.h
@@ -77,7 +77,7 @@ typedef struct
 {
 	unsigned char index;
 	unsigned char flags;
-	unsigned char reserved1;
+	unsigned char skip;
 	unsigned char reserved2;
 } TILE;