Restore battle system using hash data structs
This commit is contained in:
parent
7ca42f781a
commit
17cc6063a3
28
src/Entity.c
28
src/Entity.c
@ -19,6 +19,11 @@ void entity_setActiveAnim(Entity *entity, char *animName)
|
||||
if (common_strcmp(anim->key, animName) == 0)
|
||||
{
|
||||
entity->currAnimId = i;
|
||||
EntityAnim *currEntityAnim =
|
||||
&entity->animList[entity->currAnimId];
|
||||
currEntityAnim->currDuration =
|
||||
currEntityAnim->anim->frameDuration;
|
||||
currEntityAnim->currFrame = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -77,29 +82,6 @@ void entity_addAnim(AssetManager *assetManager, Entity *entity, char *animName)
|
||||
DEBUG_LOG("No more free entity animation slots");
|
||||
}
|
||||
|
||||
void entity_addGenericMob(MemoryArena *arena, AssetManager *assetManager,
|
||||
World *world, v2 pos)
|
||||
{
|
||||
#ifdef DENGINE_DEBUG
|
||||
DEBUG_LOG("Mob entity spawned");
|
||||
#endif
|
||||
|
||||
Entity *hero = &world->entities[entity_getIndex(world, world->heroId)];
|
||||
|
||||
v2 size = V2(58.0f, 98.0f);
|
||||
enum EntityType type = entitytype_mob;
|
||||
enum Direction dir = direction_west;
|
||||
Texture *tex = asset_getTexture(assetManager, texlist_hero);
|
||||
b32 collides = TRUE;
|
||||
Entity *mob = entity_add(arena, world, pos, size, type, dir, tex, collides);
|
||||
|
||||
mob->audioRenderer = PLATFORM_MEM_ALLOC(arena, 1, AudioRenderer);
|
||||
mob->audioRenderer->sourceIndex = AUDIO_SOURCE_UNASSIGNED;
|
||||
|
||||
/* Populate mob animation references */
|
||||
entity_addAnim(assetManager, mob, "Claude idle");
|
||||
}
|
||||
|
||||
Entity *entity_add(MemoryArena *arena, World *world, v2 pos, v2 size,
|
||||
enum EntityType type, enum Direction direction, Texture *tex,
|
||||
b32 collides)
|
||||
|
@ -269,7 +269,8 @@ void renderer_entity(Renderer *renderer, Rect camera, Entity *entity,
|
||||
updateBufferObject(renderer, &entityQuad, 1);
|
||||
|
||||
v2 posInCameraSpace = v2_sub(entity->pos, camera.pos);
|
||||
renderObject(renderer, posInCameraSpace, entity->renderSize,
|
||||
// TODO(doyle): Scale temporarily
|
||||
renderObject(renderer, posInCameraSpace, v2_scale(entity->renderSize, 2),
|
||||
pivotPoint, rotate, color, entity->tex);
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,33 @@ INTERNAL Entity *getHeroEntity(World *world)
|
||||
return result;
|
||||
}
|
||||
|
||||
INTERNAL void addGenericMob(MemoryArena *arena, AssetManager *assetManager,
|
||||
World *world, v2 pos)
|
||||
{
|
||||
#ifdef DENGINE_DEBUG
|
||||
DEBUG_LOG("Mob entity spawned");
|
||||
#endif
|
||||
|
||||
Entity *hero = &world->entities[entity_getIndex(world, world->heroId)];
|
||||
|
||||
v2 size = V2(58.0f, 98.0f);
|
||||
enum EntityType type = entitytype_mob;
|
||||
enum Direction dir = direction_west;
|
||||
Texture *tex = asset_getTexture(assetManager, texlist_claude);
|
||||
b32 collides = TRUE;
|
||||
Entity *mob = entity_add(arena, world, pos, size, type, dir, tex, collides);
|
||||
|
||||
mob->audioRenderer = PLATFORM_MEM_ALLOC(arena, 1, AudioRenderer);
|
||||
mob->audioRenderer->sourceIndex = AUDIO_SOURCE_UNASSIGNED;
|
||||
|
||||
/* Populate mob animation references */
|
||||
entity_addAnim(assetManager, mob, "claudeIdle");
|
||||
entity_addAnim(assetManager, mob, "claudeRun");
|
||||
entity_addAnim(assetManager, mob, "claudeBattleIdle");
|
||||
entity_addAnim(assetManager, mob, "claudeAttack");
|
||||
entity_setActiveAnim(mob, "claudeIdle");
|
||||
}
|
||||
|
||||
INTERNAL void rendererInit(GameState *state, v2 windowSize)
|
||||
{
|
||||
AssetManager *assetManager = &state->assetManager;
|
||||
@ -179,7 +206,7 @@ INTERNAL void assetInit(GameState *state)
|
||||
PlatformFileRead xmlFileRead = {0};
|
||||
|
||||
i32 result = platform_readFileToBuffer(
|
||||
arena, "data/textures/WorldTraveller/ClaudeSpriteSheet.xml",
|
||||
arena, "data/textures/WorldTraveller/ClaudeSprite.xml",
|
||||
&xmlFileRead);
|
||||
|
||||
XmlToken *xmlTokens = PLATFORM_MEM_ALLOC(arena, 8192, XmlToken);
|
||||
@ -605,68 +632,54 @@ INTERNAL void assetInit(GameState *state)
|
||||
DEBUG_LOG("Assets loaded");
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* Load animations */
|
||||
f32 duration = 1.0f;
|
||||
i32 numRects = 1;
|
||||
v4 *animRects = PLATFORM_MEM_ALLOC(arena, numRects, v4);
|
||||
i32 terrainAnimAtlasIndexes[1] = {terrainrects_ground};
|
||||
|
||||
// TODO(doyle): Optimise animation storage, we waste space having 1:1 with
|
||||
// animlist when some textures don't have certain animations
|
||||
asset_addAnimation(assetManager, arena, texlist_terrain, animlist_terrain,
|
||||
terrainAnimAtlasIndexes, numRects, duration);
|
||||
|
||||
// Idle animation
|
||||
duration = 1.0f;
|
||||
numRects = 1;
|
||||
i32 idleAnimAtlasIndexes[1] = {herorects_idle};
|
||||
asset_addAnimation(assetManager, arena, texlist_hero, animlist_hero_idle,
|
||||
idleAnimAtlasIndexes, numRects, duration);
|
||||
#else
|
||||
f32 duration = 1.0f;
|
||||
i32 numRects = 1;
|
||||
TexAtlas *claudeAtlas =
|
||||
asset_getTexAtlas(assetManager, "ClaudeSpriteSheet.png");
|
||||
asset_getTexAtlas(assetManager, "ClaudeSprite.png");
|
||||
|
||||
duration = 1.0f;
|
||||
numRects = 1;
|
||||
char *subTextureNames = {"ClaudeSprite_001"};
|
||||
asset_addAnimation(assetManager, arena, "Claude_idle", claudeAtlas,
|
||||
&subTextureNames, 1, 1.0f);
|
||||
#endif
|
||||
char *claudeIdle[1] = {"ClaudeSprite_Walk_Left_01"};
|
||||
f32 duration = 1.0f;
|
||||
i32 numRects = ARRAY_COUNT(claudeIdle);
|
||||
asset_addAnimation(assetManager, arena, "claudeIdle", claudeAtlas,
|
||||
claudeIdle, numRects, duration);
|
||||
|
||||
#if 0
|
||||
// Walk animation
|
||||
duration = 0.10f;
|
||||
numRects = 3;
|
||||
i32 walkAnimAtlasIndexes[3] = {herorects_walkA, herorects_idle,
|
||||
herorects_walkB};
|
||||
asset_addAnimation(assetManager, arena, texlist_hero, animlist_hero_walk,
|
||||
walkAnimAtlasIndexes, numRects, duration);
|
||||
// Run animation
|
||||
char *claudeRun[6] = {
|
||||
"ClaudeSprite_Run_Left_01", "ClaudeSprite_Run_Left_02",
|
||||
"ClaudeSprite_Run_Left_03", "ClaudeSprite_Run_Left_04",
|
||||
"ClaudeSprite_Run_Left_05", "ClaudeSprite_Run_Left_06"};
|
||||
duration = 0.1f;
|
||||
numRects = ARRAY_COUNT(claudeRun);
|
||||
asset_addAnimation(assetManager, arena, "claudeRun", claudeAtlas,
|
||||
claudeRun, numRects, duration);
|
||||
|
||||
// Wave animation
|
||||
duration = 0.30f;
|
||||
numRects = 2;
|
||||
i32 waveAnimAtlasIndexes[2] = {herorects_waveA, herorects_waveB};
|
||||
asset_addAnimation(assetManager, arena, texlist_hero, animlist_hero_wave,
|
||||
waveAnimAtlasIndexes, numRects, duration);
|
||||
// Battle Idle animation
|
||||
char *claudeBattleIdle[3] = {"ClaudeSprite_BattleIdle_Left_01",
|
||||
"ClaudeSprite_BattleIdle_Left_02",
|
||||
"ClaudeSprite_BattleIdle_Left_03"};
|
||||
numRects = ARRAY_COUNT(claudeBattleIdle);
|
||||
duration = 0.2f;
|
||||
asset_addAnimation(assetManager, arena, "claudeBattleIdle", claudeAtlas,
|
||||
claudeBattleIdle, numRects, duration);
|
||||
|
||||
// Battle Stance animation
|
||||
duration = 1.0f;
|
||||
numRects = 1;
|
||||
i32 battleStanceAnimAtlasIndexes[1] = {herorects_battlePose};
|
||||
asset_addAnimation(assetManager, arena, texlist_hero, animlist_hero_battlePose,
|
||||
battleStanceAnimAtlasIndexes, numRects, duration);
|
||||
// Attack Left animation
|
||||
char *claudeAttack[6] = {
|
||||
"ClaudeSprite_Attack_Left_01", "ClaudeSprite_Attack_Left_02",
|
||||
"ClaudeSprite_Attack_Left_03", "ClaudeSprite_Attack_Left_04",
|
||||
"ClaudeSprite_Attack_Left_05", "ClaudeSprite_Attack_Left_06"};
|
||||
numRects = ARRAY_COUNT(claudeAttack);
|
||||
duration = 0.1f;
|
||||
asset_addAnimation(assetManager, arena, "claudeAttack", claudeAtlas,
|
||||
claudeAttack, numRects, duration);
|
||||
|
||||
// Battle tackle animation
|
||||
duration = 0.15f;
|
||||
numRects = 3;
|
||||
i32 tackleAnimAtlasIndexes[3] = {herorects_castA, herorects_castB,
|
||||
herorects_castC};
|
||||
asset_addAnimation(assetManager, arena, texlist_hero, animlist_hero_tackle,
|
||||
tackleAnimAtlasIndexes, numRects, duration);
|
||||
#endif
|
||||
// Victory animation
|
||||
char *claudeVictory[8] = {
|
||||
"ClaudeSprite_Battle_Victory_01", "ClaudeSprite_Battle_Victory_02",
|
||||
"ClaudeSprite_Battle_Victory_03", "ClaudeSprite_Battle_Victory_04",
|
||||
"ClaudeSprite_Battle_Victory_05", "ClaudeSprite_Battle_Victory_06",
|
||||
"ClaudeSprite_Battle_Victory_07", "ClaudeSprite_Battle_Victory_08"};
|
||||
numRects = ARRAY_COUNT(claudeVictory);
|
||||
duration = 0.1f;
|
||||
asset_addAnimation(assetManager, arena, "claudeVictory", claudeAtlas,
|
||||
claudeVictory, numRects, duration);
|
||||
|
||||
#ifdef DENGINE_DEBUG
|
||||
DEBUG_LOG("Animations created");
|
||||
@ -674,9 +687,10 @@ INTERNAL void assetInit(GameState *state)
|
||||
|
||||
/* Load sound */
|
||||
|
||||
char *audioPath = "data/audio/Nobuo Uematsu - Battle 1.ogg";
|
||||
char *audioPath =
|
||||
"data/audio/Motoi Sakuraba - Stab the sword of justice.ogg";
|
||||
asset_loadVorbis(assetManager, arena, audioPath, audiolist_battle);
|
||||
audioPath = "data/audio/Yuki Kajiura - Swordland.ogg";
|
||||
audioPath = "data/audio/Motoi Sakuraba - Field of Exper.ogg";
|
||||
asset_loadVorbis(assetManager, arena, audioPath, audiolist_overworld);
|
||||
audioPath = "data/audio/nuindependent_hit22.ogg";
|
||||
asset_loadVorbis(assetManager, arena, audioPath, audiolist_tackle);
|
||||
@ -777,14 +791,16 @@ INTERNAL void entityInit(GameState *state, v2 windowSize)
|
||||
|
||||
hero->audioRenderer = PLATFORM_MEM_ALLOC(arena, 1, AudioRenderer);
|
||||
hero->audioRenderer->sourceIndex = AUDIO_SOURCE_UNASSIGNED;
|
||||
world->heroId = hero->id;
|
||||
world->cameraFollowingId = hero->id;
|
||||
world->heroId = hero->id;
|
||||
world->cameraFollowingId = hero->id;
|
||||
|
||||
/* Populate hero animation references */
|
||||
entity_addAnim(assetManager, hero, "Claude_idle");
|
||||
entity_setActiveAnim(hero, "Claude_idle");
|
||||
entity_addAnim(assetManager, hero, "claudeIdle");
|
||||
entity_addAnim(assetManager, hero, "claudeRun");
|
||||
entity_addAnim(assetManager, hero, "claudeBattleIdle");
|
||||
entity_addAnim(assetManager, hero, "claudeAttack");
|
||||
entity_setActiveAnim(hero, "claudeIdle");
|
||||
|
||||
#if 0
|
||||
/* Create a NPC */
|
||||
pos = V2(hero->pos.x * 3, CAST(f32) state->tileSize);
|
||||
size = hero->hitboxSize;
|
||||
@ -795,14 +811,13 @@ INTERNAL void entityInit(GameState *state, v2 windowSize)
|
||||
Entity *npc = entity_add(arena, world, pos, size, type, dir, tex, collides);
|
||||
|
||||
/* Populate npc animation references */
|
||||
entity_addAnim(assetManager, npc, animlist_hero_wave);
|
||||
npc->currAnimId = animlist_hero_wave;
|
||||
entity_addAnim(assetManager, npc, "claudeVictory");
|
||||
entity_setActiveAnim(npc, "claudeVictory");
|
||||
|
||||
/* Create a Mob */
|
||||
pos = V2(renderer->size.w - (renderer->size.w / 3.0f),
|
||||
CAST(f32) state->tileSize);
|
||||
entity_addGenericMob(arena, assetManager, world, pos);
|
||||
#endif
|
||||
addGenericMob(arena, assetManager, world, pos);
|
||||
|
||||
#ifdef DENGINE_DEBUG
|
||||
DEBUG_LOG("World populated");
|
||||
@ -1130,7 +1145,7 @@ INTERNAL inline void updateWorldBattleEntities(World *world, Entity *entity,
|
||||
INTERNAL inline void resetEntityState(World *world, Entity *entity)
|
||||
{
|
||||
updateWorldBattleEntities(world, entity, ENTITY_NOT_IN_BATTLE);
|
||||
entity_setActiveAnim(entity, "Claude_idle");
|
||||
entity_setActiveAnim(entity, "claudeIdle");
|
||||
entity->stats->busyDuration = 0;
|
||||
entity->stats->actionTimer = entity->stats->actionRate;
|
||||
entity->stats->queuedAttack = entityattack_invalid;
|
||||
@ -1174,7 +1189,7 @@ INTERNAL void entityStateSwitch(EventQueue *eventQueue, World *world,
|
||||
// or not (i.e. has moved out of frame last frame).
|
||||
case entitystate_dead:
|
||||
registerEvent(eventQueue, eventtype_entity_died, CAST(void *)entity);
|
||||
entity_setActiveAnim(entity, "Claude_idle");
|
||||
entity_setActiveAnim(entity, "claudeIdle");
|
||||
entity->stats->busyDuration = 0;
|
||||
entity->stats->actionTimer = entity->stats->actionRate;
|
||||
entity->stats->queuedAttack = entityattack_invalid;
|
||||
@ -1214,7 +1229,7 @@ INTERNAL void entityStateSwitch(EventQueue *eventQueue, World *world,
|
||||
switch (newState)
|
||||
{
|
||||
case entitystate_battle:
|
||||
entity_setActiveAnim(entity, "Claude_idle");
|
||||
entity_setActiveAnim(entity, "claudeBattleIdle");
|
||||
entity->stats->actionTimer = entity->stats->actionRate;
|
||||
entity->stats->busyDuration = 0;
|
||||
break;
|
||||
@ -1266,7 +1281,6 @@ typedef struct AttackSpec
|
||||
INTERNAL void beginAttack(EventQueue *eventQueue, World *world,
|
||||
Entity *attacker)
|
||||
{
|
||||
#if 0
|
||||
#ifdef DENGINE_DEBUG
|
||||
ASSERT(attacker->stats->entityIdToAttack != ENTITY_NULL_ID);
|
||||
ASSERT(attacker->state == entitystate_battle);
|
||||
@ -1276,11 +1290,11 @@ INTERNAL void beginAttack(EventQueue *eventQueue, World *world,
|
||||
switch (attacker->stats->queuedAttack)
|
||||
{
|
||||
case entityattack_tackle:
|
||||
EntityAnim_ attackAnim = attacker->anim[animlist_hero_tackle];
|
||||
f32 busyDuration = attackAnim.anim->frameDuration *
|
||||
EntityAnim attackAnim = attacker->animList[attacker->currAnimId];
|
||||
f32 busyDuration = attackAnim.anim->frameDuration *
|
||||
CAST(f32) attackAnim.anim->numFrames;
|
||||
attacker->stats->busyDuration = busyDuration;
|
||||
entity_setActiveAnim(attacker, animlist_hero_tackle);
|
||||
entity_setActiveAnim(attacker, "claudeAttack");
|
||||
if (attacker->direction == direction_east)
|
||||
attacker->dPos.x += (1.0f * METERS_TO_PIXEL);
|
||||
else
|
||||
@ -1292,7 +1306,6 @@ INTERNAL void beginAttack(EventQueue *eventQueue, World *world,
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// TODO(doyle): MemArena here is temporary until we incorporate AttackSpec to
|
||||
@ -1300,7 +1313,6 @@ INTERNAL void beginAttack(EventQueue *eventQueue, World *world,
|
||||
INTERNAL void endAttack(MemoryArena *arena, EventQueue *eventQueue,
|
||||
World *world, Entity *attacker)
|
||||
{
|
||||
#if 0
|
||||
#ifdef DENGINE_DEBUG
|
||||
ASSERT(attacker->stats->entityIdToAttack != ENTITY_NULL_ID);
|
||||
#endif
|
||||
@ -1379,7 +1391,6 @@ INTERNAL void endAttack(MemoryArena *arena, EventQueue *eventQueue,
|
||||
entityStateSwitch(eventQueue, world, attacker, entitystate_idle);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
INTERNAL void sortWorldEntityList(World *world)
|
||||
@ -1511,8 +1522,7 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
|
||||
v2 pos =
|
||||
V2(renderer->size.w - (renderer->size.w / xModifier), yPos);
|
||||
entity_addGenericMob(&state->arena, &state->assetManager, world,
|
||||
pos);
|
||||
addGenericMob(&state->arena, &state->assetManager, world, pos);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1694,10 +1704,8 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
if (ddPos.x != 0.0f && ddPos.y != 0.0f)
|
||||
{
|
||||
// NOTE(doyle): Cheese it and pre-compute the vector for
|
||||
// diagonal
|
||||
// using
|
||||
// pythagoras theorem on a unit triangle
|
||||
// 1^2 + 1^2 = c^2
|
||||
// diagonal using pythagoras theorem on a unit triangle 1^2
|
||||
// + 1^2 = c^2
|
||||
ddPos = v2_scale(ddPos, 0.70710678118f);
|
||||
}
|
||||
}
|
||||
@ -1708,21 +1716,22 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
**************************
|
||||
*/
|
||||
// NOTE(doyle): Clipping threshold for snapping velocity to 0
|
||||
f32 epsilon = 0.5f;
|
||||
f32 epsilon = 15.0f;
|
||||
v2 epsilonDpos = v2_sub(V2(epsilon, epsilon),
|
||||
V2(ABS(hero->dPos.x), ABS(hero->dPos.y)));
|
||||
|
||||
char *currAnimName = hero->animList[hero->currAnimId].anim->key;
|
||||
if (epsilonDpos.x >= 0.0f && epsilonDpos.y >= 0.0f)
|
||||
{
|
||||
hero->dPos = V2(0.0f, 0.0f);
|
||||
if (hero->currAnimId == animlist_hero_walk)
|
||||
if (common_strcmp(currAnimName, "claudeRun") == 0)
|
||||
{
|
||||
entity_setActiveAnim(hero, "Claude_idle");
|
||||
entity_setActiveAnim(hero, "claudeIdle");
|
||||
}
|
||||
}
|
||||
else if (hero->currAnimId == animlist_hero_idle)
|
||||
else if (common_strcmp(currAnimName, "claudeIdle") == 0)
|
||||
{
|
||||
entity_setActiveAnim(hero, "Claude_idle");
|
||||
entity_setActiveAnim(hero, "claudeRun");
|
||||
}
|
||||
|
||||
f32 heroSpeed = 6.2f * METERS_TO_PIXEL;
|
||||
@ -1960,7 +1969,7 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
{
|
||||
hero->state = entitystate_idle;
|
||||
world->entityIdInBattle[hero->id] = FALSE;
|
||||
entity_setActiveAnim(hero, "Claude_idle");
|
||||
entity_setActiveAnim(hero, "claudeIdle");
|
||||
}
|
||||
hero->stats->entityIdToAttack = -1;
|
||||
hero->stats->actionTimer = hero->stats->actionRate;
|
||||
@ -2040,15 +2049,19 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
state->uiState.keyChar = keycode_null;
|
||||
|
||||
/* Draw hero avatar */
|
||||
#if 0
|
||||
TexAtlas *heroAtlas = asset_getTextureAtlas(assetManager, texlist_hero);
|
||||
v4 heroAvatarTexRect = heroAtlas->texRect[herorects_head];
|
||||
v2 heroAvatarSize = math_getRectSize(heroAvatarTexRect);
|
||||
TexAtlas *heroAtlas =
|
||||
asset_getTexAtlas(assetManager, "ClaudeSprite.png");
|
||||
Rect heroAvatarRect =
|
||||
asset_getAtlasSubTexRect(heroAtlas, "ClaudeSprite_Avatar_01");
|
||||
v2 heroAvatarP =
|
||||
V2(10.0f, (renderer->size.h * 0.5f) - (0.5f * heroAvatarSize.h));
|
||||
V2(10.0f, (renderer->size.h * 0.5f) - (0.5f * heroAvatarRect.size.h));
|
||||
|
||||
v4 heroAvatarTexRect = {0};
|
||||
heroAvatarTexRect.vec2[0] = heroAvatarRect.pos;
|
||||
heroAvatarTexRect.vec2[1] = v2_add(heroAvatarRect.pos, heroAvatarRect.size);
|
||||
|
||||
RenderTex heroRenderTex = {hero->tex, heroAvatarTexRect};
|
||||
renderer_staticRect(renderer, heroAvatarP, heroAvatarSize, V2(0, 0), 0,
|
||||
renderer_staticRect(renderer, heroAvatarP, heroAvatarRect.size, V2(0, 0), 0,
|
||||
heroRenderTex, V4(1, 1, 1, 1));
|
||||
|
||||
char heroAvatarStr[20];
|
||||
@ -2056,13 +2069,13 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
hero->stats->health, hero->stats->maxHealth);
|
||||
f32 strLenInPixels =
|
||||
CAST(f32)(font->maxSize.w * common_strlen(heroAvatarStr));
|
||||
v2 strPos = V2(heroAvatarP.x, heroAvatarP.y - (0.5f * heroAvatarSize.h));
|
||||
v2 strPos =
|
||||
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));
|
||||
|
||||
renderer_staticString(&state->renderer, &state->arena, font, heroAvatarStr,
|
||||
strPos, V2(0, 0), 0, V4(0, 0, 1, 1));
|
||||
#endif
|
||||
|
||||
for (i32 i = 0; i < world->maxEntities; i++)
|
||||
{
|
||||
@ -2092,7 +2105,7 @@ void worldTraveller_gameUpdateAndRender(GameState *state, f32 dt)
|
||||
state->input.keys[i].newHalfTransitionCount;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
********************
|
||||
* DEBUG CODE
|
||||
********************
|
||||
|
@ -97,8 +97,6 @@ typedef struct Entity
|
||||
void entity_setActiveAnim(Entity *entity, char *animName);
|
||||
void entity_updateAnim(Entity *entity, f32 dt);
|
||||
void entity_addAnim(AssetManager *assetManager, Entity *entity, char *animName);
|
||||
void entity_addGenericMob(MemoryArena *arena, AssetManager *assetManager,
|
||||
World *world, v2 pos);
|
||||
Entity *entity_add(MemoryArena *arena, World *world, v2 pos, v2 size,
|
||||
enum EntityType type, enum Direction direction, Texture *tex,
|
||||
b32 collides);
|
||||
|
Loading…
Reference in New Issue
Block a user