diff --git a/CMakeLists.txt b/CMakeLists.txt index 3adb271..cfcc6f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,8 @@ include_directories(include) set(SOURCES src/main.c + src/entity/print.c + src/entity/init.c src/disp/display.c src/disp/print.c src/disp/init.c diff --git a/include/entity.h b/include/entity.h new file mode 100644 index 0000000..b7a9246 --- /dev/null +++ b/include/entity.h @@ -0,0 +1,11 @@ +#pragma once + +#include "species.h" + +struct Entity { + enum Species body[BODY_PARTS]; +}; + +struct Entity entity_p_init(void); +struct Entity entity_e_init(void); +void entity_print_desc(struct Entity entity); diff --git a/include/species.h b/include/species.h new file mode 100644 index 0000000..1c25f93 --- /dev/null +++ b/include/species.h @@ -0,0 +1,5 @@ +#pragma once + +enum Species { VOID, HUMAN, SPIDER, DUCK, BABOON }; +#define BODY_PARTS 4 +enum BodyPart { HEAD, BODY, ARMS, LEGS }; diff --git a/src/entity/init.c b/src/entity/init.c new file mode 100644 index 0000000..97807a7 --- /dev/null +++ b/src/entity/init.c @@ -0,0 +1,25 @@ +#include "entity.h" + +static struct Entity entity_init(enum Species head, enum Species body, + enum Species arms, enum Species legs); + +struct Entity +entity_p_init(void) +{ + return entity_init(HUMAN, HUMAN, HUMAN, HUMAN); +} + +struct Entity +entity_e_init(void) +{ + return entity_init(SPIDER, SPIDER, VOID, SPIDER); +} + +static struct Entity +entity_init(enum Species head, enum Species body, enum Species arms, + enum Species legs) +{ + return (struct Entity){ + .body = {head, body, arms, legs}, + }; +} diff --git a/src/entity/print.c b/src/entity/print.c new file mode 100644 index 0000000..5eb3494 --- /dev/null +++ b/src/entity/print.c @@ -0,0 +1,55 @@ +#include "disp.h" +#include "entity.h" + +static char *body_part_str(enum BodyPart body_part); +static char *species_str(enum Species species); + +void +entity_print_desc(struct Entity entity) +{ + int i; + + i = -1; + while (++i < BODY_PARTS) { + disp_print(species_str(entity.body[i])); + disp_print(" "); + disp_print(body_part_str(i)); + disp_print("\n"); + } +} + +static char * +body_part_str(enum BodyPart body_part) +{ + switch (body_part) { + case HEAD: + return "head"; + case BODY: + return "body"; + case ARMS: + return "arms"; + case LEGS: + return "legs"; + default: + return ""; + } +} + +static char * +species_str(enum Species species) +{ + switch (species) { + case VOID: + return "no"; + case HUMAN: + return "human"; + case SPIDER: + return "spider"; + case DUCK: + return "duck"; + case BABOON: + return "baboon"; + default: + return ""; + } +} diff --git a/src/main.c b/src/main.c index 22156b9..4f49298 100644 --- a/src/main.c +++ b/src/main.c @@ -1,15 +1,24 @@ #include "disp.h" +#include "entity.h" #include #include int main(void) { + struct Entity player; + struct Entity enemy; + /* init */ disp_init(); + player = entity_p_init(); + enemy = entity_e_init(); + disp_print("Hello, World!\n"); disp_print("Draw me an unicorn!\n"); disp_print(" UwU\n"); + entity_print_desc(player); + entity_print_desc(enemy); dclear(C_WHITE); disp_display();