83 lines
1.7 KiB
C
83 lines
1.7 KiB
C
/**
|
|
* 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); |