From 0ce6279d355d3d0311b7a3f5fbcb22a305bb0278 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 16 Jul 2024 19:59:50 +0200 Subject: tinted sprites --- light-client/src/render/mod.rs | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'light-client/src/render/mod.rs') diff --git a/light-client/src/render/mod.rs b/light-client/src/render/mod.rs index d5fba315..a410da6f 100644 --- a/light-client/src/render/mod.rs +++ b/light-client/src/render/mod.rs @@ -15,6 +15,7 @@ along with this program. If not, see . */ +pub mod misc; pub mod sprite; use hurrycurry_protocol::glam::Vec2; @@ -24,11 +25,11 @@ use sdl2::{ render::{BlendMode, Canvas, Texture, TextureAccess, TextureCreator}, video::{Window, WindowContext}, }; -use sprite::{Sprite, SpriteDraw}; +use sprite::SpriteDraw; use std::collections::HashMap; pub struct SpriteRenderer<'a> { - metadata: HashMap, + metadata: AtlasLayout, texture: Texture<'a>, @@ -38,6 +39,8 @@ pub struct SpriteRenderer<'a> { sprites: Vec, } +pub type AtlasLayout = HashMap; + impl<'a> SpriteRenderer<'a> { pub fn init(texture_creator: &'a TextureCreator) -> Self { let palette = include_str!("../../assets/palette.csv") @@ -108,7 +111,7 @@ impl<'a> SpriteRenderer<'a> { } #[inline] - pub fn metadata(&self) -> &HashMap { + pub fn atlas_layout(&self) -> &HashMap { &self.metadata } @@ -122,6 +125,7 @@ impl<'a> SpriteRenderer<'a> { pub fn draw_world(&mut self, sprite: SpriteDraw) { self.sprites.push(SpriteDraw { + tint: sprite.tint, z_order: sprite.z_order, src: sprite.src, dst: FRect::new( @@ -135,24 +139,10 @@ impl<'a> SpriteRenderer<'a> { pub fn submit(&mut self, canvas: &mut Canvas) { self.sprites.sort(); - for SpriteDraw { src, dst, .. } in self.sprites.drain(..) { + for SpriteDraw { src, dst, tint, .. } in self.sprites.drain(..) { + self.texture.set_color_mod(tint[0], tint[1], tint[2]); + self.texture.set_alpha_mod(tint[3]); canvas.copy_f(&self.texture, src, dst).unwrap(); } } } - -pub struct MiscTextures { - pub player: Sprite, -} - -impl MiscTextures { - pub fn init(renderer: &SpriteRenderer) -> Self { - MiscTextures { - player: Sprite::new( - *renderer.metadata().get("player+a").unwrap(), - Vec2::Y * 0.3, - 0.5 + 0.3, - ), - } - } -} -- cgit v1.2.3-70-g09d2