Refactor movement code into function
This commit is contained in:
parent
17dc6cc6fc
commit
68c0560b28
@ -294,6 +294,46 @@ v2 *createAsteroidVertexList(MemoryArena_ *arena, i32 iterations,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void moveEntity(GameState *state, Entity *entity, v2 ddP, f32 dt, f32 ddPSpeed)
|
||||||
|
{
|
||||||
|
ASSERT(ABS(ddP.x) <= 1.0f && ABS(ddP.y) <= 1.0f);
|
||||||
|
/*
|
||||||
|
Assuming acceleration A over t time, then integrate twice to get
|
||||||
|
|
||||||
|
newVelocity = a*t + oldVelocity
|
||||||
|
newPos = (a*t^2)/2 + oldVelocity*t + oldPos
|
||||||
|
*/
|
||||||
|
|
||||||
|
ddP = v2_scale(ddP, state->pixelsPerMeter * ddPSpeed);
|
||||||
|
v2 oldDp = entity->dP;
|
||||||
|
v2 resistance = v2_scale(oldDp, 2.0f);
|
||||||
|
ddP = v2_sub(ddP, resistance);
|
||||||
|
|
||||||
|
v2 newDp = v2_add(v2_scale(ddP, dt), oldDp);
|
||||||
|
|
||||||
|
v2 ddPHalf = v2_scale(ddP, 0.5f);
|
||||||
|
v2 ddPHalfDtSquared = v2_scale(ddPHalf, (SQUARED(dt)));
|
||||||
|
v2 oldDpDt = v2_scale(oldDp, dt);
|
||||||
|
v2 oldPos = entity->pos;
|
||||||
|
|
||||||
|
v2 newPos = v2_add(v2_add(ddPHalfDtSquared, oldDpDt), oldPos);
|
||||||
|
|
||||||
|
for (i32 i = 0; i < state->entityIndex; i++)
|
||||||
|
{
|
||||||
|
Entity *checkEntity = &state->entityList[i];
|
||||||
|
if (checkEntity->id == entity->id) continue;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
b32 moveValid = TRUE;
|
||||||
|
if (moveValid)
|
||||||
|
{
|
||||||
|
entity->dP = newDp;
|
||||||
|
entity->pos = newPos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void asteroid_gameUpdateAndRender(GameState *state, Memory *memory,
|
void asteroid_gameUpdateAndRender(GameState *state, Memory *memory,
|
||||||
v2 windowSize, f32 dt)
|
v2 windowSize, f32 dt)
|
||||||
{
|
{
|
||||||
@ -408,9 +448,10 @@ void asteroid_gameUpdateAndRender(GameState *state, Memory *memory,
|
|||||||
else if (entity->pos.x < 0)
|
else if (entity->pos.x < 0)
|
||||||
entity->pos.x = state->worldSize.w;
|
entity->pos.x = state->worldSize.w;
|
||||||
|
|
||||||
|
f32 ddPSpeedInMs = 0;
|
||||||
|
v2 ddP = {0};
|
||||||
if (entity->type == entitytype_ship)
|
if (entity->type == entitytype_ship)
|
||||||
{
|
{
|
||||||
v2 ddP = {0};
|
|
||||||
if (getKeyStatus(&state->input.keys[keycode_up], readkeytype_repeat,
|
if (getKeyStatus(&state->input.keys[keycode_up], readkeytype_repeat,
|
||||||
0.0f, dt))
|
0.0f, dt))
|
||||||
{
|
{
|
||||||
@ -445,28 +486,7 @@ void asteroid_gameUpdateAndRender(GameState *state, Memory *memory,
|
|||||||
ddP = v2_scale(ddP, 0.70710678118f);
|
ddP = v2_scale(ddP, 0.70710678118f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
ddPSpeedInMs = 25;
|
||||||
Assuming acceleration A over t time, then integrate twice to get
|
|
||||||
|
|
||||||
newVelocity = a*t + oldVelocity
|
|
||||||
newPos = (a*t^2)/2 + oldVelocity*t + oldPos
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
ddP = v2_scale(ddP, state->pixelsPerMeter * 25);
|
|
||||||
|
|
||||||
v2 oldDp = entity->dP;
|
|
||||||
v2 resistance = v2_scale(oldDp, 2.0f);
|
|
||||||
ddP = v2_sub(ddP, resistance);
|
|
||||||
|
|
||||||
entity->dP = v2_add(v2_scale(ddP, dt), oldDp);
|
|
||||||
|
|
||||||
v2 ddPHalf = v2_scale(ddP, 0.5f);
|
|
||||||
v2 ddPHalfDtSquared = v2_scale(ddPHalf, (SQUARED(dt)));
|
|
||||||
v2 oldDpDt = v2_scale(oldDp, dt);
|
|
||||||
v2 oldPos = entity->pos;
|
|
||||||
entity->pos = v2_add(v2_add(ddPHalfDtSquared, oldDpDt), oldPos);
|
|
||||||
|
|
||||||
pivotPoint = v2_scale(entity->size, 0.5f);
|
pivotPoint = v2_scale(entity->size, 0.5f);
|
||||||
|
|
||||||
DEBUG_PUSH_VAR("Pos: %5.2f, %5.2f", entity->pos, "v2");
|
DEBUG_PUSH_VAR("Pos: %5.2f, %5.2f", entity->pos, "v2");
|
||||||
@ -544,19 +564,16 @@ void asteroid_gameUpdateAndRender(GameState *state, Memory *memory,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
f32 dirOffset = (randValue % 10) / 100.0f;
|
f32 dirOffset = ((randValue % 10) + 1) / 100.0f;
|
||||||
v2_scale(ddP, dirOffset);
|
v2_scale(ddP, dirOffset);
|
||||||
ASSERT(ddP.x <= 1.0f && ddP.y <= 1.0f);
|
|
||||||
|
|
||||||
entity->dP = v2_scale(ddP, state->pixelsPerMeter * 2);
|
// NOTE(doyle): Make asteroids start and move at constant speed
|
||||||
v2 ddPHalf = v2_scale(ddP, 0.5f);
|
ddPSpeedInMs = 2;
|
||||||
v2 ddPHalfDtSquared = v2_scale(ddPHalf, (SQUARED(dt)));
|
entity->dP = v2_scale(ddP, state->pixelsPerMeter * ddPSpeedInMs);
|
||||||
|
|
||||||
v2 dPDt = v2_scale(entity->dP, dt);
|
|
||||||
|
|
||||||
entity->pos = v2_add(v2_add(ddPHalfDtSquared, dPDt), entity->pos);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
moveEntity(state, entity, ddP, dt, ddPSpeedInMs);
|
||||||
|
|
||||||
RenderFlags flags = renderflag_wireframe | renderflag_no_texture;
|
RenderFlags flags = renderflag_wireframe | renderflag_no_texture;
|
||||||
renderer_entity(&state->renderer, &state->transientArena, state->camera,
|
renderer_entity(&state->renderer, &state->transientArena, state->camera,
|
||||||
entity, pivotPoint, 0, V4(0.4f, 0.8f, 1.0f, 1.0f),
|
entity, pivotPoint, 0, V4(0.4f, 0.8f, 1.0f, 1.0f),
|
||||||
|
Loading…
Reference in New Issue
Block a user