/** * 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];