use bracket_lib::prelude::*; use hecs::World; use crate::{components::*, constants::*, resources::*}; use super::{vga_color as vga, vga_color::get_by_index}; pub fn draw(world: &World, resources: &Resources, bterm: &mut BTerm) { let mut rng = RandomNumberGenerator::new(); for (_, (position, wants_to_whip)) in &mut world.query::<(&Position, &WantsToWhip)>() { let color = RGB::named(get_by_index(rng.range(1, 16))); let mut rendered_frame = wants_to_whip.frame; let frame_data = loop { let frame_data = match rendered_frame { 0 => Some((-1, -1, '\\')), 1 => Some((-1, 0, '─')), 2 => Some((-1, 1, '/')), 3 => Some((0, 1, '│')), 4 => Some((1, 1, '\\')), 5 => Some((1, 0, '─')), 6 => Some((1, -1, '/')), 7 => Some((0, -1, '│')), _ => None, }; if let Some(data) = frame_data { let dest = Point { x: position.x + data.0, y: position.y + data.1, }; if resources.map.in_bounds(dest) { break frame_data; } rendered_frame += 1; if rendered_frame > 7 { break None; } } }; if let Some(data) = frame_data { bterm.set( (position.x + MAP_X as i32) + data.0, (position.y + MAP_Y as i32) + data.1, color, RGB::named(vga::BLACK), to_cp437(data.2), ); }; } }