use crate::{
spawning::{GIZMO_SPAWN_BUFFER, LINE_SPAWN_BUFFER},
Gizmo, Line,
};
use bevy::prelude::*;
pub fn draw_gizmo<G: Into<Gizmo>>(gizmo: G) {
if let Ok(mut gizmos) = GIZMO_SPAWN_BUFFER.write() {
gizmos.push(gizmo.into());
}
}
pub fn draw_gizmos<G: Into<Gizmo>>(gizmos: Vec<G>) {
if let Ok(mut gizmos_buf) = GIZMO_SPAWN_BUFFER.write() {
for gizmo in gizmos {
gizmos_buf.push(gizmo.into());
}
}
}
pub fn draw_gizmos_with_line<G: Into<Gizmo>>(mut gizmos: Vec<G>) {
let gizmos: Vec<Gizmo> = gizmos.drain(..).map(|g| g.into()).collect();
draw_line(
gizmos.iter().map(|g| g.translation).collect(),
gizmos[0].color,
);
draw_gizmos(gizmos);
}
pub fn draw_line(points: Vec<Vec3>, color: Color) {
if let Ok(mut lines) = LINE_SPAWN_BUFFER.write() {
lines.push(Line::new(points, color));
}
}
pub fn draw_closed_line(mut points: Vec<Vec3>, color: Color) {
if points.is_empty() {
return;
}
points.push(points[0]);
if let Ok(mut lines) = LINE_SPAWN_BUFFER.write() {
lines.push(Line::new(points, color));
}
}