X-Git-Url: https://plomlompom.com/repos/day?a=blobdiff_plain;f=src%2Froguelike.c;h=a4db13ca22db478f5c9dccda4a28012492e8164f;hb=714bf970109b33005e0ab3e588d818460ccdc304;hp=c3078b285bc7892667b96e346089028f4c34968e;hpb=1191fe6ec56b6fd2155c0c71de15740187739fd9;p=plomrogue diff --git a/src/roguelike.c b/src/roguelike.c index c3078b2..a4db13c 100644 --- a/src/roguelike.c +++ b/src/roguelike.c @@ -71,12 +71,25 @@ 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 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. @@ -167,13 +180,15 @@ 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); + 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[]) {