/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #pragma once #include "entitydir.h" #include "entityanim.h" #include "rpg/entity/player.h" #include "npc.h" #include "rpg/world/worldpos.h" #define ENTITY_COUNT 256 typedef struct map_s map_t; typedef enum { ENTITY_TYPE_NULL, ENTITY_TYPE_PLAYER, ENTITY_TYPE_NPC, ENTITY_TYPE_COUNT } entitytype_t; typedef struct entity_s { uint8_t id; entitytype_t type; // Movement entitydir_t direction; worldpos_t position; entityanim_t animation; uint8_t animFrame; union { player_t player; npc_t npc; }; } entity_t; extern entity_t ENTITIES[ENTITY_COUNT]; /** * Initializes an entity structure. * * @param entity Pointer to the entity structure to initialize. * @param type The type of the entity. */ void entityInit(entity_t *entity, const entitytype_t type); /** * Updates an entity. * * @param entity Pointer to the entity structure to update. */ void entityUpdate(entity_t *entity); /** * Turn an entity to face a new direction. * * @param entity Pointer to the entity to turn. * @param direction The direction to face. */ void entityTurn(entity_t *entity, const entitydir_t direction); /** * Make an entity walk in a direction. * * @param entity Pointer to the entity to make walk. * @param direction The direction to walk in. */ void entityWalk(entity_t *entity, const entitydir_t direction); /** * Gets the entity at a specific world position. * * @param map Pointer to the map to check. * @param pos The world position to check. * @return Pointer to the entity at the position, or NULL if none. */ entity_t *entityGetAt(const worldpos_t pos);