home · contact · privacy
Fixed map centering bug, refactored center offseting.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 10 Jul 2013 11:32:06 +0000 (13:32 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 10 Jul 2013 11:32:06 +0000 (13:32 +0200)
src/roguelike.c
src/roguelike.h

index a4db13ca22db478f5c9dccda4a28012492e8164f..5456e2481ce030a30d12f791b0ada1358d0b21a7 100644 (file)
@@ -82,14 +82,21 @@ void map_scroll (struct Map * map, char dir, struct yx_uint16 win_size) {
   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) {
+uint16_t center_offset (uint16_t pos, uint16_t mapsize, uint16_t framesize) {
+// Return the offset for display of a map inside a frame centered on pos.
+  uint16_t offset = 0;
+  if (mapsize > framesize) {
+    if (pos > framesize / 2) {
+      if (pos < mapsize - (framesize / 2))
+        offset = pos - (framesize / 2);
+      else
+        offset = mapsize - framesize; } }
+  return offset; }
+
+void map_center_player (struct Map * map, struct Player * player, struct yx_uint16 frame_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; }
+  map->offset.y = center_offset (player->pos.y, map->size.y, frame_size.y);
+  map->offset.x = center_offset (player->pos.x, map->size.x, frame_size.x); }
 
 void turn_over (struct World * world, char action) {
 // Record action in game record file, increment turn and move enemy.
index 8bf538017bb39f27155c955a99baff8f438785a8..4298551d2a409668ea2cd28a35832a5bf859f81e 100644 (file)
@@ -31,6 +31,7 @@ extern void update_log (struct World *, char *);
 
 extern struct Map init_map ();
 extern void map_scroll (struct Map *, char, struct yx_uint16);
+uint16_t center_offset (uint16_t, uint16_t, uint16_t);
 extern void map_center_player (struct Map *, struct Player *, struct yx_uint16);
 
 extern void turn_over (struct World *, char);