diff options
Diffstat (limited to 'pixel-client/src/render/mod.rs')
-rw-r--r-- | pixel-client/src/render/mod.rs | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/pixel-client/src/render/mod.rs b/pixel-client/src/render/mod.rs index 43e08d61..9b3132f9 100644 --- a/pixel-client/src/render/mod.rs +++ b/pixel-client/src/render/mod.rs @@ -15,9 +15,11 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ +pub mod font; pub mod misc; pub mod sprite; +use font::FontTextures; use hurrycurry_protocol::glam::Vec2; use sdl2::{ pixels::PixelFormatEnum, @@ -28,21 +30,24 @@ use sdl2::{ use sprite::SpriteDraw; use std::collections::HashMap; -pub struct SpriteRenderer<'a> { +pub struct Renderer<'a> { metadata: AtlasLayout, + font_textures: FontTextures, + pub size: Vec2, texture: Texture<'a>, - view_scale: Vec2, - view_offset: Vec2, + world_scale: Vec2, + world_offset: Vec2, + pub ui_scale: Vec2, sprites: Vec<SpriteDraw>, } pub type AtlasLayout = HashMap<String, Rect>; -impl<'a> SpriteRenderer<'a> { +impl<'a> Renderer<'a> { pub fn init(texture_creator: &'a TextureCreator<WindowContext>) -> Self { let palette = include_str!("../../assets/palette.csv") .split('\n') @@ -88,7 +93,7 @@ impl<'a> SpriteRenderer<'a> { texture.update(None, &texels, 1024 * 4).unwrap(); texture.set_blend_mode(BlendMode::Blend); - let metadata = include_str!("../../assets/atlas.meta.csv") + let atlas_layout = include_str!("../../assets/atlas.meta.csv") .lines() .filter(|l| !l.is_empty()) .map(|l| { @@ -103,21 +108,23 @@ impl<'a> SpriteRenderer<'a> { .collect::<HashMap<_, _>>(); Self { + ui_scale: Vec2::ZERO, texture, + font_textures: FontTextures::init(&atlas_layout), size: Vec2::ONE, - metadata, + metadata: atlas_layout, sprites: vec![], - view_offset: Vec2::ZERO, - view_scale: Vec2::ZERO, + world_offset: Vec2::ZERO, + world_scale: Vec2::ZERO, } } - pub fn set_view(&mut self, offset: Vec2, scale: f32) { - self.view_offset = offset; - self.view_scale = Vec2::new(32., 24.) * scale; + pub fn set_world_view(&mut self, offset: Vec2, scale: f32) { + self.world_offset = offset; + self.world_scale = Vec2::new(32., 24.) * scale; } - pub fn get_scale(&self) -> Vec2 { - self.view_scale + pub fn get_world_scale(&self) -> Vec2 { + self.world_scale } #[inline] @@ -139,10 +146,24 @@ impl<'a> SpriteRenderer<'a> { z_order: sprite.z_order, src: sprite.src, dst: FRect::new( - (sprite.dst.x + self.view_offset.x) * self.view_scale.x, - (sprite.dst.y + self.view_offset.y) * self.view_scale.y, - sprite.dst.w * self.view_scale.x, - sprite.dst.h * self.view_scale.y, + (sprite.dst.x + self.world_offset.x) * self.world_scale.x, + (sprite.dst.y + self.world_offset.y) * self.world_scale.y, + sprite.dst.w * self.world_scale.x, + sprite.dst.h * self.world_scale.y, + ), + }) + } + + pub fn draw_ui(&mut self, sprite: SpriteDraw) { + self.sprites.push(SpriteDraw { + tint: sprite.tint, + z_order: sprite.z_order, + src: sprite.src, + dst: FRect::new( + sprite.dst.x * self.ui_scale.x, + sprite.dst.y * self.ui_scale.y, + sprite.dst.w * self.ui_scale.x, + sprite.dst.h * self.ui_scale.y, ), }) } |