#include "utils.h" // Pretty much any object in the game. #ifndef ENTITY_H #define ENTITY_H #define ENTITY_COUNT 14 #define TREE_SCALE 40.0 #define BUSH_SCALE 3.0 #define FLOWER_SCALE 3.0 #define POND_SIZE 250.0 #define POND_HEIGHT 15.0 #define UTILITY_POLE_HEIGHT 100.0 #define UTILITY_POLE_RADIUS 3.0 #define SAMANTHA_WIDTH (2.65966 / 2.0) #define SAMANTHA_HEIGHT (3.21054 / 2.0) #define SAMANTHA_THICKNESS (1.46845 / 2.0) #define SAMANTHA_STATIC_SPEED 24 #define SAMANTHA_STATIC_FRAMES 4 #define SAMANTHAS_SPOT_SIZE 10 #define SAMANTHAS_SPOT_HEIGHT 5 #define TRASHCAN_SCALE 2.0 #define TRASHCAN_FRAMES 4 #define TRASHCAN_ANIMATION_SPEED 6 #define TRASHCAN_WIDTH 45.0 #define TRASHCAN_HEIGHT 60.0 #define TRASH_SCALE 2.0 #define MEDICAL_TRASH_SCALE 2.0 #define SHOPKEEPER_WIDTH (2.04211 / 2.0) #define SHOPKEEPER_HEIGHT (2.59521 / 2.0) #define SHOPKEEPER_THICKNESS (0.493349 / 2.0) #define INTERACTION_MENU_MAX 9 #define INTERACTION_LABEL_MAX 64 #define ENTITY_DEFAULT_STATE -1 typedef int8_t EntityId; typedef int8_t EntityState; enum { ENTITY_NONE = -1, OLD_MINT, STICKY_NICKEL, TREE, BUSH, FLOWER, POND, UTILITY_POLE, SAMANTHA, SAMANTHAS_SPOT, TRASHCAN, TRASH, MEDICAL_TRASH, JOHN, RON }; typedef enum { INTERACTION_TALK, INTERACTION_SHOW_MENU, INTERACTION_END } InteractionCommand; typedef enum { SELECTION_INTERACT, SELECTION_NEXT_MESSAGE, SELECTION_MENU_ITEM, // +x to select any given menu entry SELECTION_LEAVE } Selection; typedef struct { EntityId id; Vector3 position; // Shouldnt be changed directly. BoundingBox box; EntityState state; } Entity; typedef void (*InteractionCallback)(Entity* entity, Game* game); typedef struct { char label[INTERACTION_LABEL_MAX]; InteractionCallback callback; } InteractionMenuEntry; Entity createEntity(EntityId id, Vector3 position); void updateEntity(Entity* entity, Game* game); void setEntityPosition(Entity* entity, Vector3 position); void placeEntityOnGround(Entity* entity, const World* world); bool entityCanBeSelected(EntityId id); InteractionCommand interactWithEntity(Entity* entity, Game* game, Selection selection); #endif