aboutsummaryrefslogtreecommitdiff
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.rs62
1 files changed, 55 insertions, 7 deletions
diff --git a/light-client/src/sprite_renderer.rs b/light-client/src/sprite_renderer.rs
index 64eef8f6..aadbfbe3 100644
--- a/light-client/src/sprite_renderer.rs
+++ b/light-client/src/sprite_renderer.rs
@@ -26,6 +26,8 @@ use std::collections::HashMap;
pub struct SpriteRenderer<'a> {
metadata: HashMap<String, Rect>,
+ misc_textures: MiscTextures,
+
texture: Texture<'a>,
view_scale: Vec2,
@@ -34,12 +36,22 @@ pub struct SpriteRenderer<'a> {
sprites: Vec<SpriteDraw>,
}
+pub struct MiscTextures {
+ pub player: Rect,
+}
+
pub struct SpriteDraw {
z_order: i32,
src: Rect,
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")
@@ -101,27 +113,35 @@ impl<'a> SpriteRenderer<'a> {
.collect::<HashMap<_, _>>();
Self {
+ misc_textures: MiscTextures {
+ player: *metadata.get("player+a").unwrap(),
+ },
texture,
metadata,
sprites: vec![],
view_offset: Vec2::ZERO,
- view_scale: Vec2::splat(64.),
+ view_scale: Vec2::splat(3.),
}
}
+ #[inline]
pub fn metadata(&self) -> &HashMap<String, Rect> {
&self.metadata
}
+ #[inline]
+ pub fn misc_textures(&self) -> &MiscTextures {
+ &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,
),
})
}
@@ -150,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,
+ }
+ }
+}