From a015f73a754ae6cbfb267a050770c94374fc908c Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 25 Aug 2018 00:39:43 -0400 Subject: Calculate min and max meta for map server-side --- server.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- torus.h | 2 ++ 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]; }; -- cgit 1.4.1