Add entity action timer to schedule commands
This commit is contained in:
parent
a426461dad
commit
ca6790cb1c
@ -36,6 +36,9 @@ INTERNAL Entity *addEntity(World *world, v2 pos, v2 size, enum EntityType type,
|
|||||||
entity.stats = PLATFORM_MEM_ALLOC(1, EntityStats);
|
entity.stats = PLATFORM_MEM_ALLOC(1, EntityStats);
|
||||||
entity.stats->maxHealth = 100;
|
entity.stats->maxHealth = 100;
|
||||||
entity.stats->health = entity.stats->maxHealth;
|
entity.stats->health = entity.stats->maxHealth;
|
||||||
|
entity.stats->actionRate = 100;
|
||||||
|
entity.stats->actionTimer = entity.stats->actionRate;
|
||||||
|
entity.stats->actionSpdMul = 100;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,6 +481,8 @@ void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
|
|||||||
V4(1, 1, 1, 1));
|
V4(1, 1, 1, 1));
|
||||||
|
|
||||||
/* Game logic */
|
/* Game logic */
|
||||||
|
|
||||||
|
// TODO(doyle): Undefined behaviour when multiple entities on screen
|
||||||
if (entity->type == entitytype_mob)
|
if (entity->type == entitytype_mob)
|
||||||
{
|
{
|
||||||
// TODO(doyle): Currently calculated in pixels, how about meaningful
|
// TODO(doyle): Currently calculated in pixels, how about meaningful
|
||||||
@ -487,7 +492,8 @@ void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
|
|||||||
DEBUG_PUSH_STRING("Hero to Entity Magnitude: %06.2f", distance,
|
DEBUG_PUSH_STRING("Hero to Entity Magnitude: %06.2f", distance,
|
||||||
"f32");
|
"f32");
|
||||||
#endif
|
#endif
|
||||||
if (distance <= 500.0f)
|
f32 battleThreshold = 500.0f;
|
||||||
|
if (distance <= battleThreshold)
|
||||||
{
|
{
|
||||||
#ifdef DENGINE_DEBUG
|
#ifdef DENGINE_DEBUG
|
||||||
v4 color = V4(1.0f, 0, 0, 1);
|
v4 color = V4(1.0f, 0, 0, 1);
|
||||||
@ -500,6 +506,7 @@ void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
|
|||||||
renderer_staticString(&state->renderer, font, battleStr, strPos,
|
renderer_staticString(&state->renderer, font, battleStr, strPos,
|
||||||
0, color);
|
0, color);
|
||||||
#endif
|
#endif
|
||||||
|
/* Render targetting reticule */
|
||||||
Texture *emptyTex =
|
Texture *emptyTex =
|
||||||
asset_getTexture(assetManager, texlist_empty);
|
asset_getTexture(assetManager, texlist_empty);
|
||||||
v2 heroCenter = v2_add(hero->pos, v2_scale(hero->size, 0.5f));
|
v2 heroCenter = v2_add(hero->pos, v2_scale(hero->size, 0.5f));
|
||||||
@ -508,6 +515,27 @@ void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
|
|||||||
renderer_rect(renderer, cameraBounds, heroCenter,
|
renderer_rect(renderer, cameraBounds, heroCenter,
|
||||||
V2(distance, 10.0f), 0, renderTex,
|
V2(distance, 10.0f), 0, renderTex,
|
||||||
V4(1, 0, 0, 0.5f));
|
V4(1, 0, 0, 0.5f));
|
||||||
|
|
||||||
|
/* Update action timer */
|
||||||
|
#ifdef DENGINE_DEBUG
|
||||||
|
ASSERT(entity->stats)
|
||||||
|
#endif
|
||||||
|
hero->stats->actionTimer -= dt * hero->stats->actionSpdMul;
|
||||||
|
entity->stats->actionTimer -= dt * entity->stats->actionSpdMul;
|
||||||
|
if (hero->stats->actionTimer <= 0)
|
||||||
|
{
|
||||||
|
hero->stats->actionTimer = hero->stats->actionRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entity->stats->actionTimer <= 0)
|
||||||
|
{
|
||||||
|
entity->stats->actionTimer = entity->stats->actionRate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
entity->stats->actionTimer = entity->stats->actionRate;
|
||||||
|
hero->stats->actionTimer = hero->stats->actionRate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -569,6 +597,13 @@ void worldTraveller_gameUpdateAndRender(GameState *state, const f32 dt)
|
|||||||
entity->stats->health, entity->stats->maxHealth);
|
entity->stats->health, entity->stats->maxHealth);
|
||||||
renderer_string(&state->renderer, cameraBounds, font,
|
renderer_string(&state->renderer, cameraBounds, font,
|
||||||
entityHealth, strPos, 0, color);
|
entityHealth, strPos, 0, color);
|
||||||
|
|
||||||
|
strPos.y -= GLOBAL_debugState.stringLineGap;
|
||||||
|
char entityTimer[32];
|
||||||
|
snprintf(entityTimer, ARRAY_COUNT(entityTimer), "ATB: %3.0f/%3.0f",
|
||||||
|
entity->stats->actionTimer, entity->stats->actionRate);
|
||||||
|
renderer_string(&state->renderer, cameraBounds, font,
|
||||||
|
entityTimer, strPos, 0, color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -39,6 +39,10 @@ typedef struct EntityStats
|
|||||||
{
|
{
|
||||||
f32 maxHealth;
|
f32 maxHealth;
|
||||||
f32 health;
|
f32 health;
|
||||||
|
|
||||||
|
f32 actionRate;
|
||||||
|
f32 actionTimer;
|
||||||
|
f32 actionSpdMul;
|
||||||
} EntityStats;
|
} EntityStats;
|
||||||
|
|
||||||
typedef struct Entity
|
typedef struct Entity
|
||||||
|
Loading…
Reference in New Issue
Block a user