This commit is contained in:
jacob 2024-03-05 14:34:35 -06:00
parent 48fef5ce2e
commit f260bf6579
3 changed files with 19 additions and 42 deletions

View File

@ -178,6 +178,7 @@ INTERNAL void game_update(void)
struct entity *e = entity_alloc();
e->active = true;
//e->rel_trs = TRS(.t = pos, .r = 0, .s = V2(3, 1));
e->rel_trs = TRS(.t = pos, .r = 0, .s = V2(1, 1));
e->sprite_name = sprite_name;

View File

@ -47,7 +47,7 @@ INLINE i64 math_ceil_f64(f64 f)
INLINE f32 math_mod_f32(f32 x, f32 m)
{
return x - m * math_floor_f32(x / m);
return x - m * (i32)(x / m);
}
INLINE f32 math_abs_f32(f32 f)

View File

@ -426,14 +426,15 @@ INTERNAL void user_update(void)
struct tick *tick = arena_push_zero(scratch.arena, struct tick);
{
__profscope(produce_interpolated_tick);
sys_timestamp_t tick_dt_time = t1->published_ts - t0->published_ts;
f32 blend = (f32)((sys_timestamp() - t1->published_ts) / (f64)tick_dt_time);
sys_timestamp_t tick_publish_delta = t1->published_ts - t0->published_ts;
f32 tick_blend = (f32)((sys_timestamp() - t1->published_ts) / (f64)tick_publish_delta);
tick_cpy(tick, t1);
#if 1
/* Blend time */
tick->time = math_lerp_f64(t0->time, t1->time, (f64)blend);
tick->time = math_lerp_f64(t0->time, t1->time, (f64)tick_blend);
/* Blend entities */
u64 num_entities = min_u64(t0->entities_count, t1->entities_count);
@ -442,24 +443,15 @@ INTERNAL void user_update(void)
struct entity *e0 = &t0->entities[i];
struct entity *e1 = &t1->entities[i];
if (e0->handle.gen == e1->handle.gen && e0->continuity_gen == e1->continuity_gen) {
e->rel_trs = trs_lerp(e0->rel_trs, e1->rel_trs, blend);
e->sprite_trs = trs_lerp(e0->sprite_trs, e1->sprite_trs, blend);
e->sprite_pivot_norm = v2_lerp(e0->sprite_pivot_norm, e1->sprite_pivot_norm, blend);
e->rel_trs = trs_lerp(e0->rel_trs, e1->rel_trs, tick_blend);
e->sprite_trs = trs_lerp(e0->sprite_trs, e1->sprite_trs, tick_blend);
e->sprite_pivot_norm = v2_lerp(e0->sprite_pivot_norm, e1->sprite_pivot_norm, tick_blend);
e->world_xform = mat3x3_lerp(e0->world_xform, e1->world_xform, tick_blend);
if (e->handle.idx == 0) {
struct mat3x3 world_xform_test = mat3x3_lerp(e0->world_xform, e1->world_xform, blend);
(UNUSED)world_xform_test;
//if (world_xform_test.e[1][0] != e0->world_xform.e[1][0] || world_xform_test.e[1][1] != e0->world_xform.e[1][1]) {
// DEBUGBREAK;
//}
//DEBUGBREAK;
}
e->world_xform = mat3x3_lerp(e0->world_xform, e1->world_xform, blend);
}
}
#else
(UNUSED)blend;
(UNUSED)tick_blend;
#endif
}
@ -520,21 +512,6 @@ INTERNAL void user_update(void)
/* Draw texture */
struct quad quad = QUAD_UNIT_SQUARE_CENTERED;
/* TODO: Do this calculation in game loop */
#if 0
struct mat3x3 mtx;
{
/* Entity trs */
mtx = mat3x3_from_trs(ent->world_trs);
/* Sprite trs & pivot */
struct v2 scale_div_2 = v2_mul(ent->sprite_trs.s, 0.5f);
struct v2 pivot = v2_mul_v2(ent->sprite_pivot_norm, scale_div_2);
mtx = mat3x3_trs_pivot_r(mtx, ent->sprite_trs, pivot);
quad = quad_mul_mat3x3(quad, mtx);
}
#else
struct mat3x3 mtx;
{
struct v2 scale_div_2 = v2_mul(ent->sprite_trs.s, 0.5f);
@ -543,7 +520,6 @@ INTERNAL void user_update(void)
quad = quad_mul_mat3x3(quad, mtx);
}
#endif
struct texture *texture = texture_load_async(tex_name);
if (texture) {
@ -591,13 +567,13 @@ INTERNAL void user_update(void)
struct font *disp_font = font_load_async(STR("res/fonts/fixedsys.ttf"), 12.0f);
f32 offset = 0.75;
struct v2 dir = v2_mul(mat3x3_get_up(mtx), 0.5f);
dir = v2_add(dir, v2_mul(v2_norm(dir), offset));
struct v2 pos = v2_add(mat3x3_get_pos(mtx), dir);
//f32 offset = 0.75;
//struct v2 dir = v2_mul(mat3x3_get_up(mtx), 0.5f);
//dir = v2_add(dir, v2_mul(v2_norm(dir), offset));
//struct v2 pos = v2_add(mat3x3_get_pos(mtx), dir);
f32 offset = 1.5;
struct v2 pos = v2_add(mat3x3_get_pos(mtx), v2_mul(V2(0, -1), offset));
if (disp_font) {
struct string disp_name = ent->sprite_name;