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()], }); } }