79 lines
2.0 KiB
C
79 lines
2.0 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "../../libs.h"
|
|
#include "../../display/spritebatch.h"
|
|
#include "../../display/texture.h"
|
|
#include "../../display/tileset.h"
|
|
|
|
/** Entity Texture Information */
|
|
#define ENTITY_ASSET_TEXTURE "world/entity.png"
|
|
#define ENTITY_WIDTH 32
|
|
#define ENTITY_HEIGHT ENTITY_WIDTH
|
|
|
|
/** Entity ID Definitions */
|
|
#define ENTITY_TYPE_NULL 0x00
|
|
#define ENTITY_TYPE_PLAYER 0x01
|
|
|
|
/** Max count of entities in the world */
|
|
#define ENTITY_COUNT 64
|
|
|
|
/** Count of different types of entities */
|
|
#define ENTITY_TYPE_COUNT ENTITY_TYPE_PLAYER + 1
|
|
|
|
#define ENTITY_DIRECTION_SOUTH 0x00
|
|
#define ENTITY_DIRECTION_NORTH 0x01
|
|
#define ENTITY_DIRECTION_WEST 0x02
|
|
#define ENTITY_DIRECTION_EAST 0x03
|
|
|
|
#define ENTITY_STATE_WALKING 0x01
|
|
|
|
/** Unique Entity ID */
|
|
typedef uint8_t entityid_t;
|
|
|
|
/** Unique Entity ID for the Entity Type */
|
|
typedef uint8_t entitytypeid_t;
|
|
|
|
/** Entity Definition */
|
|
typedef struct {
|
|
entitytypeid_t type;
|
|
int32_t gridX, gridY, gridZ;
|
|
int32_t oldGridX, oldGridY, oldGridZ;
|
|
float positionX, positionY, positionZ;
|
|
uint8_t direction;
|
|
uint32_t state;
|
|
} entity_t;
|
|
|
|
/** Definition for an entity type */
|
|
typedef struct {
|
|
void (*entityInit)(entityid_t entityId, entity_t *entity);
|
|
void (*entityUpdate)(entityid_t entityId, entity_t *entity);
|
|
void (*entityRender)(entityid_t entityId, entity_t *entity);
|
|
void (*entityDispose)(entityid_t entityId, entity_t *entity);
|
|
} entitytype_t;
|
|
|
|
/** Entity State Management */
|
|
typedef struct {
|
|
/** Entities within the state */
|
|
entity_t entities[ENTITY_COUNT];
|
|
|
|
/** Sprite Batch in the state */
|
|
spritebatch_t *spriteBatch;
|
|
|
|
/** Texture for entities */
|
|
texture_t *texture;
|
|
|
|
/** Divided Tileset for entities */
|
|
tileset_t *tileset;
|
|
} entitystate_t;
|
|
|
|
/** Global Entity State */
|
|
extern entitystate_t ENTITY_STATE;
|
|
|
|
/** Global Entity Type Definitions */
|
|
extern entitytype_t ENTITY_TYPES[ENTITY_TYPE_COUNT]; |