summaryrefslogtreecommitdiff
path: root/pixel-client/src/render/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-21 18:45:11 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-21 22:17:54 +0200
commit64e00aad013da92d29851d3e8109a006b4dff8c5 (patch)
tree081e9a2829f3c247d48bf6468030f35c85b2db4f /pixel-client/src/render/mod.rs
parentb1eba76afaf7a506ff912634da6220db15d0023e (diff)
downloadhurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar
hurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar.bz2
hurrycurry-64e00aad013da92d29851d3e8109a006b4dff8c5.tar.zst
pc: draw text
Diffstat (limited to 'pixel-client/src/render/mod.rs')
-rw-r--r--pixel-client/src/render/mod.rs55
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,
),
})
}