Pārlūkot izejas kodu

Optimize map drawing

Dan ELKOUBY 11 gadi atpakaļ
vecāks
revīzija
8b836ead21
1 mainītis faili ar 17 papildinājumiem un 10 dzēšanām
  1. 17 10
      map.c

+ 17 - 10
map.c

@@ -14,10 +14,8 @@ typedef struct
 
 void map_draw(unsigned x, unsigned y, const Map map)
 {
-	unsigned tile_x = x / 24;
-	unsigned tile_y = y / 24;
-	unsigned offset_x = x % 24;
-	unsigned offset_y = y % 24;
+	unsigned offset_x = x % 24 * -1;
+	unsigned offset_y = y % 24 * -1;
 
 	unsigned i, j, tile_offset;
 	Rect sprite;
@@ -25,16 +23,25 @@ void map_draw(unsigned x, unsigned y, const Map map)
 	sprite.w = 24;
 	sprite.h = 24;
 
-	for (i = 0; i < 15; i++)
+	tile_offset = x / 24 + y / 24 * map.w;
+
 	for (j = 0; j < 11; j++)
 	{
-		tile_offset = (tile_x + i) + (tile_y + j) * map.w;
+		for (i = 0; i < 15; i++)
+		{
+			sprite.x = map.layer0[tile_offset] * 24;
+			drawSpritePart(tiles, offset_x, offset_y, &sprite);
+
+			sprite.x = map.layer1[tile_offset] * 24;
+			drawSpritePart(tiles, offset_x, offset_y, &sprite);
 
-		sprite.x = map.layer0[tile_offset] * 24;
-		if (sprite.x) drawSpritePart(tiles, (i * 24) - offset_x, (j * 24) - offset_y, &sprite);
+			tile_offset++;
+			offset_x += 24;
+		}
 
-		sprite.x = map.layer1[tile_offset] * 24;
-		if (sprite.x) drawSpritePart(tiles, (i * 24) - offset_x, (j * 24) - offset_y, &sprite);
+		tile_offset += map.w - 15;
+		offset_x -= 24 * 15;
+		offset_y += 24;
 	}
 }