- if (NORTH == dir && map->offset.y > 0) map->offset.y--;
- else if (SOUTH == dir) map->offset.y++;
- else if (WEST == dir && map->offset.x > 0) map->offset.x--;
- else if (EAST == dir) map->offset.x++; }
+ if (NORTH == dir && map->offset.y > 0)
+ map->offset.y--;
+ else if (WEST == dir && map->offset.x > 0)
+ map->offset.x--;
+ else if (SOUTH == dir && map->offset.y + win_size.y < map->size.y)
+ map->offset.y++;
+ else if (EAST == dir && map->offset.x + win_size.x < map->size.x)
+ map->offset.x++; }
+
+void map_center_player (struct Map * map, struct Player * player, struct yx_uint16 win_size) {
+// Center map on player.
+ if (player->pos.y < win_size.y / 2) map->offset.y = 0;
+ else if (player->pos.y < map->size.y - (win_size.y / 2)) map->offset.y = player->pos.y - (win_size.y / 2);
+ else map->offset.y = map->size.y - win_size.y;
+ if (player->pos.x < win_size.x / 2) map->offset.x = 0;
+ else if (player->pos.x < map->size.x - (win_size.x / 2)) map->offset.x = player->pos.x - (win_size.x / 2);
+ else map->offset.x = map->size.x - win_size.x; }