diff options
author | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-02-12 21:59:35 -0600 |
---|---|---|
committer | Jacob Janzen <jacob.a.s.janzen@gmail.com> | 2024-02-12 21:59:35 -0600 |
commit | 632fc043ba549e2bf5282ce2fe6b94bdc747044a (patch) | |
tree | 34ca738e5b4d61b3e5bb25000d1ed56cd65fa283 | |
parent | 92cd6c46f410862466c143d96a3f577f2ede855f (diff) |
clean up
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | main.c | 97 |
2 files changed, 53 insertions, 45 deletions
@@ -6,3 +6,4 @@ tmp/ *.o /main .ccls-cache +main.dSYM/ @@ -43,7 +43,6 @@ WINDOW *create_newwin(int height, int width, int starty, int startx) void initialize(void) { - srand(time(NULL)); setlocale(LC_ALL, ""); // allow extended ASCII initscr(); // initialize curses @@ -212,8 +211,58 @@ void create_windows(struct windows *wins) ); } +bool process_input(int ch, ht_t *entities, struct map *map) +{ + struct entity *player = ht_find(entities, "player"); + struct entity *camera = ht_find(entities, "camera"); + + struct point newp = player->p; + struct point newp_cam = camera->p; + switch (ch) { + case 'k' : + --newp.y; + --newp_cam.y; + break; + case 'j' : + ++newp.y; + ++newp_cam.y; + break; + case 'h' : + --newp.x; + --newp_cam.x; + break; + case 'l' : + ++newp.x; + ++newp_cam.x; + break; + case '>' : + if (map->map[player->p.y * map->width + player->p.x] == DOWN_STAIR) { + free(map->map); + create_cave(map); + + newp = map->entry_point; + newp_cam.x = map->entry_point.x - MAIN_PANEL_WIDTH / 2 + 1; + newp_cam.y = map->entry_point.y - MAIN_PANEL_HEIGHT / 2 + 1; + } + break; + case '<' : + if (map->map[player->p.y * WIDTH + player->p.x] == UP_STAIR) { + return true; + } + break; + } + + if (entity_set_pos(player, newp, map)) + entity_set_pos(camera, newp_cam, map); + + return false; +} + int main(void) { + unsigned int seed = time(NULL); + srand(seed); + initialize(); // create windows @@ -258,55 +307,13 @@ int main(void) int ch; bool done = false; while (!done && (ch = getch()) != KEY_F(1)) { - struct point newp = player.p; - struct point newp_cam = camera.p; - switch (ch) { - case 'k' : - --newp.y; - --newp_cam.y; - break; - case 'j' : - ++newp.y; - ++newp_cam.y; + if (process_input(ch, entities, &map)) break; - case 'h' : - --newp.x; - --newp_cam.x; - break; - case 'l' : - ++newp.x; - ++newp_cam.x; - break; - case '>' : - if (map.map[player.p.y * map.width + player.p.x] == DOWN_STAIR) { - free(map.map); - create_cave(&map); - - newp = map.entry_point; - newp_cam.x = map.entry_point.x - MAIN_PANEL_WIDTH / 2 + 1; - newp_cam.y = map.entry_point.y - MAIN_PANEL_HEIGHT / 2 + 1; - - display_message(windows.msgs, "Entered new level"); - } - break; - case '<' : - if (map.map[player.p.y * WIDTH + player.p.x] == UP_STAIR) { - done = true; - } - break; - } - - if (entity_set_pos(&player, newp, &map)) - entity_set_pos(&camera, newp_cam, &map); - display_map(windows.main, &map, entities); - char msg[100]; - sprintf(msg, "x: %d, y: %d", player.p.x, player.p.y); - display_message(windows.msgs, msg); } free(map.map); - free(entities); + ht_destroy(entities); endwin(); |