about summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-08-25 00:39:43 -0400
committerJune McEnroe <june@causal.agency>2018-08-25 00:39:43 -0400
commita015f73a754ae6cbfb267a050770c94374fc908c (patch)
tree271ea45775cf37a2d552361e016523429dc0f877
parentFill in the help page (diff)
downloadtorus-a015f73a754ae6cbfb267a050770c94374fc908c.tar.gz
torus-a015f73a754ae6cbfb267a050770c94374fc908c.zip
Calculate min and max meta for map server-side
-rw-r--r--server.c53
-rw-r--r--torus.h2
2 files changed, 53 insertions, 2 deletions
diff --git a/server.c b/server.c
index 73cd9f1..d01332f 100644
--- a/server.c
+++ b/server.c
@@ -288,12 +288,61 @@ static bool clientMap(const struct Client *client) {
 	int32_t mapY = (int32_t)client->tileY - MAP_ROWS / 2;
 	int32_t mapX = (int32_t)client->tileX - MAP_COLS / 2;
 
-	struct Map map;
+	time_t now = time(NULL);
+	struct Map map = {
+		.min = {
+			.createTime = now,
+			.modifyTime = now,
+			.accessTime = now,
+			.modifyCount = UINT32_MAX,
+			.accessCount = UINT32_MAX,
+		},
+	};
+
 	for (int32_t y = 0; y < MAP_ROWS; ++y) {
 		for (int32_t x = 0; x < MAP_COLS; ++x) {
 			uint32_t tileY = ((mapY + y) % TILE_ROWS + TILE_ROWS) % TILE_ROWS;
 			uint32_t tileX = ((mapX + x) % TILE_COLS + TILE_COLS) % TILE_COLS;
-			map.meta[y][x] = tiles[tileY * TILE_ROWS + tileX].meta;
+			struct Meta meta = tiles[tileY * TILE_ROWS + tileX].meta;
+
+			if (meta.createTime) {
+				if (meta.createTime < map.min.createTime) {
+					map.min.createTime = meta.createTime;
+				}
+				if (meta.createTime > map.max.createTime) {
+					map.max.createTime = meta.createTime;
+				}
+			}
+			if (meta.modifyTime) {
+				if (meta.modifyTime < map.min.modifyTime) {
+					map.min.modifyTime = meta.modifyTime;
+				}
+				if (meta.modifyTime > map.max.modifyTime) {
+					map.max.modifyTime = meta.modifyTime;
+				}
+			}
+			if (meta.accessTime) {
+				if (meta.accessTime < map.min.accessTime) {
+					map.min.accessTime = meta.accessTime;
+				}
+				if (meta.accessTime > map.max.accessTime) {
+					map.max.accessTime = meta.accessTime;
+				}
+			}
+			if (meta.modifyCount < map.min.modifyCount) {
+				map.min.modifyCount = meta.modifyCount;
+			}
+			if (meta.modifyCount > map.max.modifyCount) {
+				map.max.modifyCount = meta.modifyCount;
+			}
+			if (meta.accessCount < map.min.accessCount) {
+				map.min.accessCount = meta.accessCount;
+			}
+			if (meta.accessCount > map.max.accessCount) {
+				map.max.accessCount = meta.accessCount;
+			}
+
+			map.meta[y][x] = meta;
 		}
 	}
 
diff --git a/torus.h b/torus.h
index 818f009..a83cac0 100644
--- a/torus.h
+++ b/torus.h
@@ -104,6 +104,8 @@ enum {
 };
 
 struct Map {
+	struct Meta min;
+	struct Meta max;
 	struct Meta meta[MAP_ROWS][MAP_COLS];
 };