diff options
author | BigBrotherNii <nicochr1004@gmail.com> | 2024-07-16 23:47:51 +0200 |
---|---|---|
committer | BigBrotherNii <nicochr1004@gmail.com> | 2024-07-16 23:47:51 +0200 |
commit | cd679169f8e049b3f3ce890c97d62fa72a4e4eb5 (patch) | |
tree | 4efaf40f3c818d79be881f81b7d8fa254861731d /pixel-client/src/render/sprite.rs | |
parent | 2f9e2758199ff5148d7f90478be45aa122d6c860 (diff) | |
parent | df418c0d3fec83fc1cbe0dabc6d4b9dfbdbcbabb (diff) | |
download | hurrycurry-cd679169f8e049b3f3ce890c97d62fa72a4e4eb5.tar hurrycurry-cd679169f8e049b3f3ce890c97d62fa72a4e4eb5.tar.bz2 hurrycurry-cd679169f8e049b3f3ce890c97d62fa72a4e4eb5.tar.zst |
trying to merch qwq
Diffstat (limited to 'pixel-client/src/render/sprite.rs')
-rw-r--r-- | pixel-client/src/render/sprite.rs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/pixel-client/src/render/sprite.rs b/pixel-client/src/render/sprite.rs new file mode 100644 index 00000000..711f45bf --- /dev/null +++ b/pixel-client/src/render/sprite.rs @@ -0,0 +1,76 @@ +use hurrycurry_protocol::glam::Vec2; +use sdl2::rect::{FRect, Rect}; + +pub struct Sprite { + z_offset: f32, + src: Rect, + relative_dst: FRect, +} + +impl Sprite { + pub fn new(src: Rect, anchor: Vec2, elevation: f32) -> Self { + let relative_dst = FRect::new( + anchor.x - (src.w as f32) / 32. / 2., + anchor.y - (src.h as f32) / 24., + (src.w as f32) / 32., + (src.h as f32) / 24., + ); + Self { + z_offset: elevation, + src, + relative_dst, + } + } + pub fn new_tile(src: Rect) -> Self { + Self::new(src, Vec2::new(0.5, 1.0), 0.5) + } + pub fn at(&self, pos: Vec2) -> SpriteDraw { + SpriteDraw { + z_order: ((self.z_offset + pos.y) * 24.) as i32, + src: self.src, + dst: FRect::new( + self.relative_dst.x + pos.x, + self.relative_dst.y + pos.y, + self.relative_dst.w, + self.relative_dst.h, + ), + tint: [0xff; 4], + } + } +} + +#[derive(Debug, Clone, Copy)] +pub struct SpriteDraw { + pub tint: [u8; 4], + pub z_order: i32, + pub src: Rect, + pub dst: FRect, +} + +impl SpriteDraw { + pub fn overlay(src: Rect, pos: Vec2, size: Vec2, tint: Option<[u8; 4]>) -> Self { + Self { + dst: FRect::new(pos.x, pos.y, size.x, size.y), + src, + tint: tint.unwrap_or([0xff; 4]), + z_order: i32::MAX, + } + } +} + +impl Ord for SpriteDraw { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.z_order.cmp(&other.z_order) + } +} +impl PartialOrd for SpriteDraw { + fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { + Some(self.cmp(&other)) + } +} +impl Eq for SpriteDraw {} +impl PartialEq for SpriteDraw { + fn eq(&self, other: &Self) -> bool { + self.z_order == other.z_order && self.src == other.src && self.dst == other.dst + } +} |