From e6a00cf17b31a8a2bffe7a3fe9801e18d9483f4a Mon Sep 17 00:00:00 2001 From: biglyderv Date: Tue, 25 Mar 2025 20:19:51 -0400 Subject: [PATCH] add inventory paging, more elements --- bin/combos.txt | 28 ++++++++++++++++++++++++++++ src/command.c | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/bin/combos.txt b/bin/combos.txt index a71a4bd..93c91df 100644 --- a/bin/combos.txt +++ b/bin/combos.txt @@ -9,3 +9,31 @@ wildfire;fire;fire smoke;fire;water puddle;water;water elements;air;earth;fire;water +dirt;dust;earth +clay;dirt;wind +cobble;air;lava +stone;cobble;earth +gravel;cobble;wind +blue;fire;heat +steam;heat;water +energy;steam;steam +sky;air;wind +sky;air;cloud +space;sky;air +space;sky;sky +void;space;space +zero;energy;void +numbers;elements;zero +one;numbers;numbers +color;blue;numbers +spectrum;color;numbers +pond;puddle;earth +pond;puddle;puddle +lake;pond;water +lake;pond;pond +sea;lake;lake +sea;lake;water +ocean;sea;sea +ocean;sea;land +planet;ocean;earth +planet;ocean;land diff --git a/src/command.c b/src/command.c index 4320d63..36d64dd 100644 --- a/src/command.c +++ b/src/command.c @@ -7,6 +7,20 @@ #define MAX_BUF_LENGTH 1024 #define MAX_COMBO_LENGTH 1024 +struct pager { + int page; + int i; +}; + +long stoi(const char *s) { + long i; + i = 0; + while (*s >= '0' && *s <= '9') { + i = i * 10 + (*s - '0'); + s++; + } + return i; +} int fix_delim(char *command, char *needle) { char *delim = strstr(command, needle); @@ -33,6 +47,11 @@ int inv_handler(const void *key, unsigned long long size, unsigned long long val, void *usr) #endif { + struct pager *i = usr; + i->i++; + if (i->i < i->page * 10 || i->i >= (i->page + 1) * 10) { + return 0; + } if (val == 0) return 0; char *key2 = (char *)key; @@ -53,9 +72,18 @@ int slash_command(char *command, hashmap *inv) { return 0; } - if (strcmp(command, "inv\n") == 0) { - printf("Your inventory:\n"); - hashmap_iterate(inv, inv_handler, "inv"); + char *invs = "inv "; + + if (strncmp(command, invs, strlen(invs)) == 0) { + int page = stoi(&command[strlen(invs)]); + printf("Your inventory (page %i):\n", page); + struct pager i = {.page = page - 1, .i = -1}; + hashmap_iterate(inv, inv_handler, &i); + } else if (strncmp(command, invs, strlen(invs) - 1) == 0) { + int page = 1; + printf("Your inventory (page %i):\n", page); + struct pager i = {.page = page - 1, .i = -1}; + hashmap_iterate(inv, inv_handler, &i); } return 1; }