Determine pivot based on manifest
This commit is contained in:
+8
-3
@@ -99,9 +99,10 @@ draw_sprite :: proc(app: ^App, sprite: ^Sprite) {
|
|||||||
fw := f32(rect[2])
|
fw := f32(rect[2])
|
||||||
fh := f32(rect[3])
|
fh := f32(rect[3])
|
||||||
|
|
||||||
// Feet-centered placement, same as renderer version
|
pivot := sprite.data.def.pivot
|
||||||
x0_px := sprite.position.x - fw * 0.5
|
origin := sprite_quad_origin(sprite.position, {fw, fh}, pivot)
|
||||||
y0_px := sprite.position.y - fh
|
x0_px := origin.x
|
||||||
|
y0_px := origin.y
|
||||||
x1_px := x0_px + fw
|
x1_px := x0_px + fw
|
||||||
y1_px := y0_px + fh
|
y1_px := y0_px + fh
|
||||||
|
|
||||||
@@ -191,3 +192,7 @@ set_sprite_clip :: proc(sprite: ^Sprite, clip: string) {
|
|||||||
sprite.frame = 0
|
sprite.frame = 0
|
||||||
sprite.time = 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]}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,3 +19,17 @@ to_clip_corners :: proc(t: ^testing.T) {
|
|||||||
testing.expect_value(t, p[0], f32(0))
|
testing.expect_value(t, p[0], f32(0))
|
||||||
testing.expect_value(t, p[1], 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))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user