From 90da5934d732a18a78705e966d315f86b38da698 Mon Sep 17 00:00:00 2001 From: codegirl-007 Date: Sat, 1 Aug 2026 10:37:36 -0700 Subject: [PATCH] determine pivot based on manifest --- engine/sprite.odin | 11 ++++++++--- engine/sprite_test.odin | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/engine/sprite.odin b/engine/sprite.odin index fb46604..991fc55 100644 --- a/engine/sprite.odin +++ b/engine/sprite.odin @@ -99,9 +99,10 @@ draw_sprite :: proc(app: ^App, sprite: ^Sprite) { fw := f32(rect[2]) fh := f32(rect[3]) - // Feet-centered placement, same as renderer version - x0_px := sprite.position.x - fw * 0.5 - y0_px := sprite.position.y - fh + pivot := sprite.data.def.pivot + origin := sprite_quad_origin(sprite.position, {fw, fh}, pivot) + x0_px := origin.x + y0_px := origin.y x1_px := x0_px + fw y1_px := y0_px + fh @@ -191,3 +192,7 @@ set_sprite_clip :: proc(sprite: ^Sprite, clip: string) { sprite.frame = 0 sprite.time = 0 } + +sprite_quad_origin :: proc(position: Vec2, size: Vec2, pivot: [2]f32) -> Vec2 { + return {position.x - size.x * pivot[0], position.y - size.y * pivot[1]} +} diff --git a/engine/sprite_test.odin b/engine/sprite_test.odin index a6c6fa9..4135a6a 100644 --- a/engine/sprite_test.odin +++ b/engine/sprite_test.odin @@ -19,3 +19,17 @@ to_clip_corners :: proc(t: ^testing.T) { testing.expect_value(t, p[0], f32(0)) testing.expect_value(t, p[1], f32(0)) } + +@(test) +sprite_quad_origin_feet :: proc(t: ^testing.T) { + o := sprite_quad_origin({400, 500}, {100, 200}, {0.5, 1.0}) + testing.expect_value(t, o.x, f32(350)) + testing.expect_value(t, o.y, f32(300)) +} + +@(test) +sprite_quad_origin_center :: proc(t: ^testing.T) { + o := sprite_quad_origin({400, 500}, {100, 200}, {0.5, 0.5}) + testing.expect_value(t, o.x, f32(350)) + testing.expect_value(t, o.y, f32(400)) +}