summaryrefslogtreecommitdiff
path: root/light-client/src/sprite_renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'light-client/src/sprite_renderer.rs')
-rw-r--r--light-client/src/sprite_renderer.rs48
1 files changed, 41 insertions, 7 deletions
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<WindowContext>) -> 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,
+ }
+ }
+}