From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 10 Jul 2013 02:32:41 +0000 (+0200)
Subject: Map scrolling is only possible within map size now.
X-Git-Tag: tce~1164
X-Git-Url: https://plomlompom.com/repos/%7B%7Bdb.prefix%7D%7D/%7B%7B%20web_path%20%7D%7D/static/%7B%7Bprefix%7D%7D/%7B%7Btodo.comment%7D%7D?a=commitdiff_plain;h=c5609bb21dc4c861fee5284404df008969cb64e2;p=plomrogue

Map scrolling is only possible within map size now.
---

diff --git a/src/roguelike.c b/src/roguelike.c
index c3078b2..739d4e3 100644
--- a/src/roguelike.c
+++ b/src/roguelike.c
@@ -71,12 +71,16 @@ struct Map init_map () {
       map.cells[y * map.size.x + x] = '.'; } }
   return map; }
 
-void map_scroll (struct Map * map, char dir) {
+void map_scroll (struct Map * map, char dir, struct yx_uint16 win_size) {
 // Scroll map into direction dir if possible by changing the offset.
-  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 turn_over (struct World * world, char action) {
 // Record action in game record file, increment turn and move enemy.
@@ -167,13 +171,13 @@ unsigned char meta_keys(int key, struct World * world, struct WinMeta * win_meta
   else if (key == get_action_key(world->keybindings, "keys mod"))
     keyswin_mod_key (world, win_meta);
   else if (key == get_action_key(world->keybindings, "map up"))
-    map_scroll (world->map, NORTH);
+    map_scroll (world->map, NORTH, win_map->frame.size);
   else if (key == get_action_key(world->keybindings, "map down"))
-    map_scroll (world->map, SOUTH);
+    map_scroll (world->map, SOUTH, win_map->frame.size);
   else if (key == get_action_key(world->keybindings, "map right"))
-    map_scroll (world->map, EAST);
+    map_scroll (world->map, EAST, win_map->frame.size);
   else if (key == get_action_key(world->keybindings, "map left"))
-    map_scroll (world->map, WEST);
+    map_scroll (world->map, WEST, win_map->frame.size);
   return 0; }
 
 int main (int argc, char *argv[]) {
diff --git a/src/roguelike.h b/src/roguelike.h
index 14ca783..bcffe73 100644
--- a/src/roguelike.h
+++ b/src/roguelike.h
@@ -30,7 +30,7 @@ extern uint16_t rrand(char, uint32_t);
 extern void update_log (struct World *, char *);
 
 extern struct Map init_map ();
-extern void map_scroll (struct Map *, char);
+extern void map_scroll (struct Map *, char, struct yx_uint16);
 
 extern void turn_over (struct World *, char);
 extern void save_game(struct World *);