From: Christian Heller 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%7B%20web_path%20%7D%7D/decks/%7B%7Bdeck_id%7D%7D/template?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 *);