Galactica/crates/render/src/ui/util/spriteimage.rs

61 lines
1.3 KiB
Rust
Raw Normal View History

2024-01-17 13:36:14 -08:00
use galactica_content::SpriteHandle;
use galactica_util::to_radians;
use nalgebra::{Point2, Vector2};
use super::SpriteRect;
use crate::{vertexbuffer::types::UiInstance, PositionAnchor, RenderState};
pub struct SpriteImage {
parent: SpriteHandle,
parent_position: Point2<f32>,
parent_size: f32,
inner: SpriteHandle,
mask: SpriteHandle,
rect: SpriteRect,
}
impl SpriteImage {
pub fn new(
parent: SpriteHandle,
parent_position: Point2<f32>,
parent_size: f32,
inner: SpriteHandle,
mask: SpriteHandle,
rect: SpriteRect,
) -> Self {
return Self {
parent,
parent_position,
parent_size,
inner,
mask,
rect,
};
}
/// Add this image to the gpu sprite buffer
pub fn push_to_buffer(&self, state: &mut RenderState) {
let h = self.parent_size;
let w = self.parent.aspect * h;
let zero = Point2::new(
self.parent_position.x - (w / 2.0),
self.parent_position.y + (h / 2.0),
);
let pos = zero + Vector2::new(self.rect.pos.x * w, -self.rect.pos.y * h);
let dim = Vector2::new(self.rect.dim.x * w, self.rect.dim.y * h);
state.push_ui_buffer(UiInstance {
anchor: PositionAnchor::CNw.to_int(),
position: pos.into(),
angle: to_radians(90.0),
size: dim.y,
color: [1.0, 1.0, 1.0, 1.0],
sprite_index: self.inner.get_index(),
mask_index: [1, self.mask.get_index()],
});
}
}