entity, species, body parts and related

This commit is contained in:
KikooDX 2021-05-27 00:07:12 +02:00
parent 1cce3bbeaf
commit cd3027cedf
6 changed files with 107 additions and 0 deletions

View File

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

11
include/entity.h Normal file
View File

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

5
include/species.h Normal file
View File

@ -0,0 +1,5 @@
#pragma once
enum Species { VOID, HUMAN, SPIDER, DUCK, BABOON };
#define BODY_PARTS 4
enum BodyPart { HEAD, BODY, ARMS, LEGS };

25
src/entity/init.c Normal file
View File

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

55
src/entity/print.c Normal file
View File

@ -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 "<unknown body part>";
}
}
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 "<unknow species>";
}
}

View File

@ -1,15 +1,24 @@
#include "disp.h"
#include "entity.h"
#include <gint/display.h>
#include <gint/keyboard.h>
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("<Hackcell> UwU\n");
entity_print_desc(player);
entity_print_desc(enemy);
dclear(C_WHITE);
disp_display();