From: Christian Heller Date: Wed, 10 Jul 2013 03:09:01 +0000 (+0200) Subject: Added command to focus map on player. X-Git-Tag: tce~1163 X-Git-Url: https://plomlompom.com/repos/task?a=commitdiff_plain;h=714bf970109b33005e0ab3e588d818460ccdc304;p=plomrogue Added command to focus map on player. --- diff --git a/README b/README index 40c7a0a..9c14e9c 100644 --- 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 diff --git a/keybindings b/keybindings index 5a10cc3..2a43fac 100644 --- a/keybindings +++ b/keybindings @@ -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 diff --git a/src/roguelike.c b/src/roguelike.c index 739d4e3..a4db13c 100644 --- a/src/roguelike.c +++ b/src/roguelike.c @@ -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[]) { diff --git a/src/roguelike.h b/src/roguelike.h index bcffe73..8bf5380 100644 --- a/src/roguelike.h +++ b/src/roguelike.h @@ -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 *);