Const asset and entity functions, minor clean up
This commit is contained in:
parent
e9db7b0570
commit
f6943e5efb
@ -27,9 +27,9 @@
|
||||
* Hash Table Operations
|
||||
*********************************
|
||||
*/
|
||||
INTERNAL HashTableEntry *getFreeHashSlot(HashTable *const table,
|
||||
MemoryArena *arena,
|
||||
const char *const key)
|
||||
INTERNAL HashTableEntry *const getFreeHashSlot(HashTable *const table,
|
||||
MemoryArena *const arena,
|
||||
const char *const key)
|
||||
{
|
||||
u32 hashIndex = common_getHashIndex(key, table->size);
|
||||
HashTableEntry *result = &table->entries[hashIndex];
|
||||
@ -63,7 +63,7 @@ INTERNAL HashTableEntry *getFreeHashSlot(HashTable *const table,
|
||||
return result;
|
||||
}
|
||||
|
||||
INTERNAL HashTableEntry *getEntryFromHash(HashTable *const table,
|
||||
INTERNAL HashTableEntry *const getEntryFromHash(HashTable *const table,
|
||||
const char *const key)
|
||||
{
|
||||
u32 hashIndex = common_getHashIndex(key, table->size);
|
||||
@ -83,15 +83,15 @@ INTERNAL HashTableEntry *getEntryFromHash(HashTable *const table,
|
||||
*********************************
|
||||
*/
|
||||
INTERNAL Rect *getFreeAtlasSubTexSlot(TexAtlas *const atlas,
|
||||
MemoryArena *const arena,
|
||||
const char *const key)
|
||||
MemoryArena *const arena,
|
||||
const char *const key)
|
||||
{
|
||||
HashTableEntry *entry = getFreeHashSlot(&atlas->subTex, arena, key);
|
||||
|
||||
if (entry)
|
||||
{
|
||||
entry->data = PLATFORM_MEM_ALLOC(arena, 1, Rect);
|
||||
Rect *result = CAST(Rect *) entry->data;
|
||||
Rect *result = CAST(Rect *)entry->data;
|
||||
return result;
|
||||
}
|
||||
else
|
||||
@ -100,14 +100,19 @@ INTERNAL Rect *getFreeAtlasSubTexSlot(TexAtlas *const atlas,
|
||||
}
|
||||
}
|
||||
|
||||
Rect *asset_getAtlasSubTex(TexAtlas *const atlas, const char *const key)
|
||||
const Rect asset_getAtlasSubTex(TexAtlas *const atlas, const char *const key)
|
||||
{
|
||||
|
||||
HashTableEntry *entry = getEntryFromHash(&atlas->subTex, key);
|
||||
|
||||
Rect *result = NULL;
|
||||
if (entry) result = CAST(Rect *) entry->data;
|
||||
Rect result = {0};
|
||||
if (entry)
|
||||
{
|
||||
result = *(CAST(Rect *) entry->data);
|
||||
return result;
|
||||
}
|
||||
|
||||
DEBUG_LOG("asset_getAtlasSubTex() failed: Sub texture does not exist");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
25
src/Entity.c
25
src/Entity.c
@ -3,7 +3,7 @@
|
||||
#include "Dengine/Platform.h"
|
||||
#include "Dengine/WorldTraveller.h"
|
||||
|
||||
void entity_setActiveAnim(Entity *entity, char *animName)
|
||||
void entity_setActiveAnim(Entity *const entity, const char *const animName)
|
||||
{
|
||||
/* Reset current anim data */
|
||||
EntityAnim *currEntityAnim = &entity->animList[entity->currAnimId];
|
||||
@ -16,6 +16,7 @@ void entity_setActiveAnim(Entity *entity, char *animName)
|
||||
Animation *anim = entity->animList[i].anim;
|
||||
if (anim)
|
||||
{
|
||||
// TODO(doyle): Linear search, but not a problem if list is small
|
||||
if (common_strcmp(anim->key, animName) == 0)
|
||||
{
|
||||
entity->currAnimId = i;
|
||||
@ -31,7 +32,7 @@ void entity_setActiveAnim(Entity *entity, char *animName)
|
||||
DEBUG_LOG("Entity does not have access to desired anim");
|
||||
}
|
||||
|
||||
void entity_updateAnim(Entity *entity, f32 dt)
|
||||
void entity_updateAnim(Entity *const entity, const f32 dt)
|
||||
{
|
||||
if (!entity->tex)
|
||||
return;
|
||||
@ -55,15 +56,16 @@ void entity_updateAnim(Entity *entity, f32 dt)
|
||||
case entitytype_mob:
|
||||
case entitytype_npc:
|
||||
char *frameName = anim->frameList[currEntityAnim->currFrame];
|
||||
Rect *texRect =
|
||||
Rect texRect =
|
||||
asset_getAtlasSubTex(anim->atlas, frameName);
|
||||
entity->renderSize = texRect->size;
|
||||
entity->renderSize = texRect.size;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void entity_addAnim(AssetManager *assetManager, Entity *entity, char *animName)
|
||||
void entity_addAnim(AssetManager *const assetManager, Entity *const entity,
|
||||
const char *const animName)
|
||||
{
|
||||
i32 freeAnimIndex = 0;
|
||||
for (i32 i = 0; i < ARRAY_COUNT(entity->animList); i++)
|
||||
@ -81,9 +83,11 @@ void entity_addAnim(AssetManager *assetManager, Entity *entity, char *animName)
|
||||
DEBUG_LOG("No more free entity animation slots");
|
||||
}
|
||||
|
||||
Entity *entity_add(MemoryArena *arena, World *world, v2 pos, v2 size,
|
||||
enum EntityType type, enum Direction direction, Texture *tex,
|
||||
b32 collides)
|
||||
Entity *const entity_add(MemoryArena *const arena, World *const world,
|
||||
const v2 pos, const v2 size,
|
||||
const enum EntityType type,
|
||||
const enum Direction direction,
|
||||
Texture *const tex, const b32 collides)
|
||||
{
|
||||
|
||||
#ifdef DENGINE_DEBUG
|
||||
@ -139,7 +143,8 @@ Entity *entity_add(MemoryArena *arena, World *world, v2 pos, v2 size,
|
||||
return result;
|
||||
}
|
||||
|
||||
void entity_clearData(MemoryArena *arena, World *world, Entity *entity)
|
||||
void entity_clearData(MemoryArena *const arena, World *const world,
|
||||
Entity *const entity)
|
||||
{
|
||||
if (entity->stats)
|
||||
PLATFORM_MEM_FREE(arena, entity->stats, sizeof(EntityStats));
|
||||
@ -150,7 +155,7 @@ void entity_clearData(MemoryArena *arena, World *world, Entity *entity)
|
||||
entity->type = entitytype_null;
|
||||
}
|
||||
|
||||
i32 entity_getIndex(World *world, i32 entityId)
|
||||
i32 entity_getIndex(World *const world, const i32 entityId)
|
||||
{
|
||||
i32 first = 0;
|
||||
i32 last = world->freeEntityIndex - 1;
|
||||
|
@ -210,13 +210,13 @@ void renderer_string(Renderer *const renderer, MemoryArena *arena, Rect camera,
|
||||
pos.x += charMetric.advance;
|
||||
|
||||
/* Get texture out */
|
||||
Rect *charTexRect =
|
||||
Rect charTexRect =
|
||||
asset_getAtlasSubTex(font->atlas, &CAST(char)codepoint);
|
||||
|
||||
v4 deprecatedTexRect = {0};
|
||||
deprecatedTexRect.vec2[0] = charTexRect->pos;
|
||||
deprecatedTexRect.vec2[0] = charTexRect.pos;
|
||||
deprecatedTexRect.vec2[1] =
|
||||
v2_add(charTexRect->pos, charTexRect->size);
|
||||
v2_add(charTexRect.pos, charTexRect.size);
|
||||
|
||||
flipTexCoord(&deprecatedTexRect, FALSE, TRUE);
|
||||
|
||||
@ -252,12 +252,12 @@ void renderer_entity(Renderer *renderer, Rect camera, Entity *entity,
|
||||
EntityAnim *entityAnim = &entity->animList[entity->currAnimId];
|
||||
Animation *anim = entityAnim->anim;
|
||||
char *frameName = anim->frameList[entityAnim->currFrame];
|
||||
Rect *animRect = asset_getAtlasSubTex(anim->atlas, frameName);
|
||||
Rect animRect = asset_getAtlasSubTex(anim->atlas, frameName);
|
||||
|
||||
// TODO(doyle): Switch to rect
|
||||
v4 animTexRect = {0};
|
||||
animTexRect.vec2[0] = animRect->pos;
|
||||
animTexRect.vec2[1] = v2_add(animRect->pos, animRect->size);
|
||||
animTexRect.vec2[0] = animRect.pos;
|
||||
animTexRect.vec2[1] = v2_add(animRect.pos, animRect.size);
|
||||
|
||||
if (entity->direction == direction_east)
|
||||
{
|
||||
|
@ -1641,18 +1641,18 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
/* Draw hero avatar */
|
||||
TexAtlas *heroAtlas =
|
||||
asset_getTexAtlas(assetManager, "ClaudeSprite.png");
|
||||
Rect *heroAvatarRect =
|
||||
Rect heroAvatarRect =
|
||||
asset_getAtlasSubTex(heroAtlas, "ClaudeSprite_Avatar_01");
|
||||
v2 heroAvatarP =
|
||||
V2(10.0f, (renderer->size.h * 0.5f) - (0.5f * heroAvatarRect->size.h));
|
||||
V2(10.0f, (renderer->size.h * 0.5f) - (0.5f * heroAvatarRect.size.h));
|
||||
|
||||
// TODO(doyle): Use rect in rendering not V4
|
||||
v4 heroAvatarTexRect = {0};
|
||||
heroAvatarTexRect.vec2[0] = heroAvatarRect->pos;
|
||||
heroAvatarTexRect.vec2[1] = v2_add(heroAvatarRect->pos, heroAvatarRect->size);
|
||||
heroAvatarTexRect.vec2[0] = heroAvatarRect.pos;
|
||||
heroAvatarTexRect.vec2[1] = v2_add(heroAvatarRect.pos, heroAvatarRect.size);
|
||||
|
||||
RenderTex heroRenderTex = {hero->tex, heroAvatarTexRect};
|
||||
renderer_staticRect(renderer, heroAvatarP, heroAvatarRect->size, V2(0, 0), 0,
|
||||
renderer_staticRect(renderer, heroAvatarP, heroAvatarRect.size, V2(0, 0), 0,
|
||||
heroRenderTex, V4(1, 1, 1, 1));
|
||||
|
||||
char heroAvatarStr[20];
|
||||
@ -1661,7 +1661,7 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
f32 strLenInPixels =
|
||||
CAST(f32)(font->maxSize.w * common_strlen(heroAvatarStr));
|
||||
v2 strPos =
|
||||
V2(heroAvatarP.x, heroAvatarP.y - (0.5f * heroAvatarRect->size.h));
|
||||
V2(heroAvatarP.x, heroAvatarP.y - (0.5f * heroAvatarRect.size.h));
|
||||
renderer_staticString(&state->renderer, &state->arena, font, heroAvatarStr,
|
||||
strPos, V2(0, 0), 0, V4(0, 0, 1, 1));
|
||||
|
||||
|
@ -28,7 +28,7 @@ typedef struct AssetManager
|
||||
* Texture Operations
|
||||
*********************************
|
||||
*/
|
||||
Rect *asset_getAtlasSubTex(TexAtlas *const atlas, const char *const key);
|
||||
const Rect asset_getAtlasSubTex(TexAtlas *const atlas, const char *const key);
|
||||
Texture *asset_getTex(AssetManager *const assetManager, const char *const key);
|
||||
TexAtlas *asset_getFreeTexAtlasSlot(AssetManager *const assetManager,
|
||||
MemoryArena *arena, const char *const key,
|
||||
|
@ -94,12 +94,16 @@ typedef struct Entity
|
||||
i32 numAudioRenderers;
|
||||
} Entity;
|
||||
|
||||
void entity_setActiveAnim(Entity *entity, char *animName);
|
||||
void entity_updateAnim(Entity *entity, f32 dt);
|
||||
void entity_addAnim(AssetManager *assetManager, Entity *entity, char *animName);
|
||||
Entity *entity_add(MemoryArena *arena, World *world, v2 pos, v2 size,
|
||||
enum EntityType type, enum Direction direction, Texture *tex,
|
||||
b32 collides);
|
||||
void entity_clearData(MemoryArena *arena, World *world, Entity *entity);
|
||||
i32 entity_getIndex(World *world, i32 entityId);
|
||||
void entity_setActiveAnim(Entity *const entity, const char *const animName);
|
||||
void entity_updateAnim(Entity *const entity, const f32 dt);
|
||||
void entity_addAnim(AssetManager *const assetManager, Entity *const entity,
|
||||
const char *const animName);
|
||||
Entity *const entity_add(MemoryArena *const arena, World *const world,
|
||||
const v2 pos, const v2 size,
|
||||
const enum EntityType type,
|
||||
const enum Direction direction, Texture *const tex,
|
||||
const b32 collides);
|
||||
void entity_clearData(MemoryArena *const arena, World *const world,
|
||||
Entity *const entity);
|
||||
i32 entity_getIndex(World *const world, const i32 entityId);
|
||||
#endif
|
||||
|
@ -10,12 +10,6 @@
|
||||
// TODO(doyle): Look into merging into assets.h file ..
|
||||
typedef struct Texture
|
||||
{
|
||||
union
|
||||
{
|
||||
char *key;
|
||||
char *name;
|
||||
};
|
||||
|
||||
// Holds the ID of the texture object, used for all texture operations to
|
||||
// reference to this particlar texture
|
||||
GLuint id;
|
||||
@ -36,8 +30,6 @@ typedef struct Texture
|
||||
GLuint filterMinification;
|
||||
// Filtering mode if texture pixels > screen pixels
|
||||
GLuint filterMagnification;
|
||||
|
||||
struct Texture *next;
|
||||
} Texture;
|
||||
|
||||
// Generates texture from image data
|
||||
|
Loading…
Reference in New Issue
Block a user