From f6943e5efb84e943699bd233dfc788dcc287b7cf Mon Sep 17 00:00:00 2001 From: Doyle Thai Date: Wed, 31 Aug 2016 16:40:41 +1000 Subject: [PATCH] Const asset and entity functions, minor clean up --- src/AssetManager.c | 25 +++++++++++++++---------- src/Entity.c | 25 +++++++++++++++---------- src/Renderer.c | 12 ++++++------ src/WorldTraveller.c | 12 ++++++------ src/include/Dengine/AssetManager.h | 2 +- src/include/Dengine/Entity.h | 20 ++++++++++++-------- src/include/Dengine/Texture.h | 8 -------- 7 files changed, 55 insertions(+), 49 deletions(-) diff --git a/src/AssetManager.c b/src/AssetManager.c index 1f7d454..16d824b 100644 --- a/src/AssetManager.c +++ b/src/AssetManager.c @@ -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; } diff --git a/src/Entity.c b/src/Entity.c index 0e576d9..cfc992b 100644 --- a/src/Entity.c +++ b/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; diff --git a/src/Renderer.c b/src/Renderer.c index 3baf07c..ea0fde4 100644 --- a/src/Renderer.c +++ b/src/Renderer.c @@ -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) { diff --git a/src/WorldTraveller.c b/src/WorldTraveller.c index a37d080..a1058e8 100644 --- a/src/WorldTraveller.c +++ b/src/WorldTraveller.c @@ -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)); diff --git a/src/include/Dengine/AssetManager.h b/src/include/Dengine/AssetManager.h index b0eb1fa..8c1cd56 100644 --- a/src/include/Dengine/AssetManager.h +++ b/src/include/Dengine/AssetManager.h @@ -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, diff --git a/src/include/Dengine/Entity.h b/src/include/Dengine/Entity.h index 4f799fc..544da3d 100644 --- a/src/include/Dengine/Entity.h +++ b/src/include/Dengine/Entity.h @@ -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 diff --git a/src/include/Dengine/Texture.h b/src/include/Dengine/Texture.h index 5571ca8..0b09fbf 100644 --- a/src/include/Dengine/Texture.h +++ b/src/include/Dengine/Texture.h @@ -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