From 632fc043ba549e2bf5282ce2fe6b94bdc747044a Mon Sep 17 00:00:00 2001
From: Jacob Janzen <jacob.a.s.janzen@gmail.com>
Date: Mon, 12 Feb 2024 21:59:35 -0600
Subject: clean up

---
 .gitignore |  1 +
 main.c     | 97 +++++++++++++++++++++++++++++++++-----------------------------
 2 files changed, 53 insertions(+), 45 deletions(-)

diff --git a/.gitignore b/.gitignore
index a2f399c..20ae36e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ tmp/
 *.o
 /main
 .ccls-cache
+main.dSYM/
diff --git a/main.c b/main.c
index fd12ba6..a693ae0 100644
--- a/main.c
+++ b/main.c
@@ -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();
 
-- 
cgit v1.2.3