home · contact · privacy
Moved map scrolling into its own function with its own sanity checks.
authorChristian Heller <c.heller@plomlompom.de>
Fri, 17 May 2013 00:24:36 +0000 (02:24 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Fri, 17 May 2013 00:24:36 +0000 (02:24 +0200)
roguelike.c

index f4dd6212751fff71ba93493588c2aa4a5dda99c1..362826c9b863a3c78808a33a0eb2241000b8138e 100644 (file)
@@ -46,6 +46,7 @@ void draw_keys_window (struct Win *);
 void toggle_window (struct WinMeta *, struct Win *);
 void init_keybindings(struct World *);
 struct Map init_map ();
 void toggle_window (struct WinMeta *, struct Win *);
 void init_keybindings(struct World *);
 struct Map init_map ();
+void map_scroll (struct Map *, char);
 void next_turn (struct World *);
 void update_log (struct World *, char *);
 void save_keybindings(struct World *);
 void next_turn (struct World *);
 void update_log (struct World *, char *);
 void save_keybindings(struct World *);
@@ -249,6 +250,17 @@ struct Map init_map () {
       map.cells[(y * map.width) + x] = terrain; }
   return map; }
 
       map.cells[(y * map.width) + x] = terrain; }
   return map; }
 
+void map_scroll (struct Map * map, char dir) {
+// Scroll map into direction dir if possible by changing the offset.
+  if      ('n' == dir && map->offset_y > 0)
+    map->offset_y--;
+  else if ('s' == dir)
+    map->offset_y++;
+  else if ('w' == dir && map->offset_x > 0)
+    map->offset_x--;
+  else if ('e' == dir)
+    map->offset_x++; }
+
 void next_turn (struct World * world) {
 // Increment turn and move enemy.
   world->turn++;
 void next_turn (struct World * world) {
 // Increment turn and move enemy.
   world->turn++;
@@ -498,14 +510,14 @@ int main () {
       keyswin_move_selection (&world, 'd');
     else if (key == get_action_key(world.keybindings, "keys mod"))
       keyswin_mod_key (&world, &win_meta);
       keyswin_move_selection (&world, 'd');
     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.offset_y > 0)
-      map.offset_y--;
+    else if (key == get_action_key(world.keybindings, "map up"))
+      map_scroll (&map, 'n');
     else if (key == get_action_key(world.keybindings, "map down"))
     else if (key == get_action_key(world.keybindings, "map down"))
-      map.offset_y++;
+      map_scroll (&map, 's');
     else if (key == get_action_key(world.keybindings, "map right"))
     else if (key == get_action_key(world.keybindings, "map right"))
-      map.offset_x++;
-    else if (key == get_action_key(world.keybindings, "map left") && map.offset_x > 0)
-      map.offset_x--;
+      map_scroll (&map, 'e');
+    else if (key == get_action_key(world.keybindings, "map left"))
+      map_scroll (&map, 'w');
     else if (key == get_action_key(world.keybindings, "player down"))
       move_player(&world, 's');
     else if (key == get_action_key(world.keybindings, "player up"))
     else if (key == get_action_key(world.keybindings, "player down"))
       move_player(&world, 's');
     else if (key == get_action_key(world.keybindings, "player up"))