/** * 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" /** 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 /** 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; } 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 (*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; } entitystate_t; /** Global Entity State */ extern entitystate_t ENTITY_STATE; /** Global Entity Type Definitions */ extern entitytype_t ENTITY_TYPES[ENTITY_TYPE_COUNT];