From ce4d64bd41937d7dff18ca607122188dc338d696 Mon Sep 17 00:00:00 2001 From: Xander Swan Date: Wed, 17 Dec 2025 18:38:21 -0500 Subject: switch to raylib, update some structure --- src/draw/sprite.odin | 46 ++++++++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 26 deletions(-) (limited to 'src/draw/sprite.odin') diff --git a/src/draw/sprite.odin b/src/draw/sprite.odin index 59d1c32..a6a109b 100644 --- a/src/draw/sprite.odin +++ b/src/draw/sprite.odin @@ -1,13 +1,14 @@ package draw import "core:log" -import "core:image" -import "core:image/qoi" +// import "core:image" +import "core:mem" +// import "core:image/qoi" -import sg "shared:sokol/gfx" +import rl "vendor:raylib" Sprite :: struct { - image: sg.Image, + image: rl.Texture2D, anim: Animation, active_anim: u32, frame_time: f32, @@ -18,6 +19,7 @@ Sprite :: struct { pos: Vec2, offset: Vec2, + rotation: f32, scale: Vec2, } @@ -26,26 +28,15 @@ init_sprite :: proc( path: string, anim: Animation = {}, ) -> bool { - img, img_err := qoi.load_from_file(path) - if img_err != nil { - log.error("could not load image") - return false - } - defer image.destroy(img) - - sprite.image = sg.make_image({ - width = i32(img.width), - height = i32(img.height), - data = { - mip_levels = { - 0 = {ptr=&img.pixels.buf[0], size=len(img.pixels.buf)}, - }, - }, - }) + byte_path := make([]u8, len(path) + 1, context.temp_allocator) + copy(byte_path, path) + byte_path[len(path)] = 0 + + sprite.image = rl.LoadTexture(transmute(cstring)&byte_path[0]) sprite.anim = anim - sprite.width = i32(img.width / len(sprite.anim.frames)) - sprite.height = i32(img.height) + sprite.width = i32(int(sprite.image.width) / len(sprite.anim.frames)) + sprite.height = i32(sprite.image.height) sprite.scale = Vec2{1, 1} @@ -53,12 +44,16 @@ init_sprite :: proc( "loaded sprite '%v' %vx%v (%vx%v)", path, sprite.width, sprite.height, - img.width, img.height, + sprite.image.width, sprite.image.height, ) return true } +destroy_sprite :: proc(sprite: Sprite) { + rl.UnloadTexture(sprite.image) +} + set_sprite_active_tag :: proc(sprite: ^Sprite, tag_name: string) { sprite.active_anim = sprite.anim.frame_tags_indices[tag_name] } @@ -84,13 +79,11 @@ update_sprite :: proc(sprite: ^Sprite, dt: f32) { } sprite :: proc( - r: ^Renderer, sprite: Sprite, ) { frame := sprite.anim.frames[sprite.current_frame] - texture( - r, + texture_quad( sprite.image, Rect { Vec2{f32(frame.rect.x), f32(frame.rect.y)}, @@ -98,6 +91,7 @@ sprite :: proc( }, sprite.pos, sprite.offset, + sprite.rotation, sprite.scale, ) } -- cgit v1.3-2-g0d8e