add inventory paging, more elements

This commit is contained in:
biglyderv 2025-03-25 20:19:51 -04:00
parent 3baa7157dc
commit e6a00cf17b
Signed by: biglyderv
GPG key ID: 0E2EB0B4CD7397B5
2 changed files with 59 additions and 3 deletions

View file

@ -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

View file

@ -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;
}