use crate::{frame::Frame, helpers::pixel::Pixel, helpers::vector::Vec2, view::View}; impl View<&mut Frame> { pub fn draw_box(&mut self, color: Pixel) { let w = self.size.x; let h = self.size.y; for x in 0..w { self[(x, 0)] = color; self[(x, h - 1)] = color; } for y in 0..h { self[(0, y)] = color; self[(w - 1, y)] = color; } } } impl Frame { pub fn draw_line(&mut self, start: Vec2, end: Vec2, color: Pixel) { let (sx, sy) = (start.x as f32, start.y as f32); let (ex, ey) = (end.x as f32, end.y as f32); let (dx, dy) = (ex - sx, ey - sy); let len = (dx * dx + dy * dy).sqrt(); let (nx, ny) = (dx / len, dy / len); let (mut cx, mut cy) = (sx, sy); let mut lc = 0.0; while lc < len { self.set( Vec2 { x: cx as isize, y: cy as isize, }, color, ); lc += 0.5; cx += nx * 0.5; cy += ny * 0.5; } } } impl Pixel { pub const RED: Pixel = Pixel { r: 255, g: 0, b: 0 }; pub const GREEN: Pixel = Pixel { r: 0, g: 255, b: 0 }; pub const BLUE: Pixel = Pixel { r: 0, g: 0, b: 255 }; pub const MAGENTA: Pixel = Pixel { r: 255, g: 0, b: 255, }; pub const CYAN: Pixel = Pixel { r: 0, g: 255, b: 255, }; }