home · contact · privacy
Added command to focus map on player.
authorChristian Heller <c.heller@plomlompom.de>
Wed, 10 Jul 2013 03:09:01 +0000 (05:09 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 10 Jul 2013 03:09:01 +0000 (05:09 +0200)
README
keybindings
src/roguelike.c
src/roguelike.h

diff --git a/README b/README
index 40c7a0a4a318416e4faf6d8e72d6ce30dfbd4a9e..9c14e9cd42186b20833ea409a8e3725f65d469cc 100644 (file)
--- a/README
+++ b/README
@@ -44,6 +44,7 @@ w       scroll map up
 x       scroll map down
 a       scroll map left
 d       scroll map right
+s       center map on player
 t       move player up
 b       move player down
 f       move player left
index 5a10cc30c81b571bf3b21e4ca31bc5dc0994ebf1..2a43fac7e42fdddabe6dcf812f11df09fcbd9d80 100644 (file)
@@ -21,6 +21,7 @@
 120 map down
 97 map left
 100 map right
+115 map center player
 116 player up
 98 player down
 102 player left
index 739d4e3d8f9126b58e77494e454cdd20d8d99bf2..a4db13ca22db478f5c9dccda4a28012492e8164f 100644 (file)
@@ -82,6 +82,15 @@ 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) {
+// 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; }
+
 void turn_over (struct World * world, char action) {
 // Record action in game record file, increment turn and move enemy.
   if (1 == world->interactive) {
@@ -178,6 +187,8 @@ unsigned char meta_keys(int key, struct World * world, struct WinMeta * win_meta
     map_scroll (world->map, EAST, win_map->frame.size);
   else if (key == get_action_key(world->keybindings, "map left"))
     map_scroll (world->map, WEST, win_map->frame.size);
+  else if (key == get_action_key(world->keybindings, "map center player"))
+    map_center_player (world->map, world->player, win_map->frame.size);
   return 0; }
 
 int main (int argc, char *argv[]) {
index bcffe73956e6502a3c23a3eacfad8147157c2f95..8bf538017bb39f27155c955a99baff8f438785a8 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);
+extern void map_center_player (struct Map *, struct Player *, struct yx_uint16);
 
 extern void turn_over (struct World *, char);
 extern void save_game(struct World *);