//! 2D sprite rendering for UI elements and billboards.
//!
//! Render textured quads in screen space with support for:
//!
//! - [`Sprite`]: 2D sprite component with position, size, color, and texture
//!
//! Sprites are rendered in screen coordinates with depth sorting.
//!
//! # Basic Sprite
//!
//! ```ignore
//! use nightshade::ecs::sprite::Sprite;
//!
//! let sprite = Sprite::new(
//!     Vec2::new(100.0, 100.0),  // Screen position
//!     Vec2::new(64.0, 64.0),    // Size in pixels
//! )
//!     .with_texture(texture_index)
//!     .with_color([1.0, 1.0, 1.0, 1.0]);
//! ```
//!
//! # Sprite with Rotation and Scale
//!
//! ```ignore
//! let sprite = Sprite::new(Vec2::new(400.0, 300.0), Vec2::new(128.0, 128.0))
//!     .with_texture(icon_texture)
//!     .with_rotation(45.0_f32.to_radians())  // Rotate 45 degrees
//!     .with_scale(Vec2::new(2.0, 2.0));      // Double size
//! ```
//!
//! # Depth Sorting
//!
//! Control draw order with depth (higher = further back):
//!
//! ```ignore
//! let background = Sprite::new(pos, size)
//!     .with_texture(bg_texture)
//!     .with_depth(10.0);  // Drawn first (behind)
//!
//! let foreground = Sprite::new(pos, size)
//!     .with_texture(fg_texture)
//!     .with_depth(0.0);   // Drawn last (in front)
//! ```
//!
//! # Texture Atlas / UV Coordinates
//!
//! Use a portion of a texture (sprite sheets):
//!
//! ```ignore
//! let mut sprite = Sprite::new(pos, Vec2::new(32.0, 32.0));
//! sprite.texture_index = atlas_texture;
//! sprite.uv_min = Vec2::new(0.0, 0.0);    // Top-left of region
//! sprite.uv_max = Vec2::new(0.25, 0.25);  // Use first quarter
//! ```
//!
//! # Multi-Texture Blending
//!
//! Blend between two textures for transitions:
//!
//! ```ignore
//! let sprite = Sprite::new(pos, size)
//!     .with_multitexture(
//!         day_texture,
//!         night_texture,
//!         0.5,  // 50% blend between textures
//!     );
//! ```
//!
//! # Color Tinting
//!
//! Apply color modulation:
//!
//! ```ignore
//! // Red tint with 50% opacity
//! let sprite = Sprite::new(pos, size)
//!     .with_texture(texture)
//!     .with_color([1.0, 0.5, 0.5, 0.5]);
//! ```
//!
//! # Sprite Properties
//!
//! | Property | Description |
//! |----------|-------------|
//! | `position` | Screen position (pixels) |
//! | `size` | Width and height (pixels) |
//! | `color` | RGBA color modulation |
//! | `texture_index` | Primary texture |
//! | `texture_index2` | Secondary texture for blending |
//! | `blend_factor` | Blend between textures (0-1) |
//! | `uv_min` / `uv_max` | Texture coordinate region |
//! | `rotation` | Rotation in radians |
//! | `depth` | Z-order for sorting |
//! | `scale` | Additional scale multiplier |
//!
//! [`Sprite`]: components::Sprite

pub mod components;

pub use components::*;
