From 7c83fe7eeaac3736d5a59b270bbbbde59780e536 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 16 Jul 2024 16:21:37 +0200 Subject: item rendering and movement --- light-client/src/sprite_renderer.rs | 48 +++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) (limited to 'light-client/src/sprite_renderer.rs') diff --git a/light-client/src/sprite_renderer.rs b/light-client/src/sprite_renderer.rs index 187ccc7b..aadbfbe3 100644 --- a/light-client/src/sprite_renderer.rs +++ b/light-client/src/sprite_renderer.rs @@ -46,6 +46,12 @@ pub struct SpriteDraw { dst: FRect, } +pub struct SpriteRect { + z_offset: f32, + src: Rect, + relative_dst: FRect, +} + impl<'a> SpriteRenderer<'a> { pub fn init(texture_creator: &'a TextureCreator) -> Self { let palette = include_str!("../assets/palette.csv") @@ -114,7 +120,7 @@ impl<'a> SpriteRenderer<'a> { metadata, sprites: vec![], view_offset: Vec2::ZERO, - view_scale: Vec2::new(32., 24.) * 3., + view_scale: Vec2::splat(3.), } } @@ -127,15 +133,15 @@ impl<'a> SpriteRenderer<'a> { &self.misc_textures } - pub fn draw(&mut self, z_order: i32, src: Rect, dst: FRect) { + pub fn draw(&mut self, z_order: f32, src: Rect, dst: FRect) { self.sprites.push(SpriteDraw { - z_order, + z_order: (z_order * 24.) as i32, src, dst: FRect::new( - (dst.x + self.view_offset.x) * self.view_scale.x, - (dst.y + self.view_offset.y) * self.view_scale.y, - dst.w * self.view_scale.x, - dst.h * self.view_scale.y, + ((dst.x + self.view_offset.x) * 32.).round() * self.view_scale.x, + ((dst.y + self.view_offset.y) * 24.).round() * self.view_scale.y, + (dst.w * 32.).round() * self.view_scale.x, + (dst.h * 24.).round() * self.view_scale.y, ), }) } @@ -164,3 +170,31 @@ impl PartialEq for SpriteDraw { self.z_order == other.z_order && self.src == other.src && self.dst == other.dst } } + +impl SpriteRect { + pub fn draw_at(&self, ctx: &mut SpriteRenderer, pos: Vec2) { + ctx.draw( + self.z_offset + pos.y + 5., + self.src, + FRect::new( + self.relative_dst.x + pos.x, + self.relative_dst.y + pos.y, + self.relative_dst.w, + self.relative_dst.h, + ), + ) + } + pub fn new(src: Rect) -> Self { + let relative_dst = FRect::new( + 0.0 - src.width() as f32 / 32. / 2., + 0.3 - src.height() as f32 / 24., + src.width() as f32 / 32., + src.height() as f32 / 24., + ); + Self { + z_offset: -relative_dst.h, + relative_dst, + src, + } + } +} -- cgit v1.2.3-70-g09d2