50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
use std::f32::consts::TAU;
|
|
|
|
use bevy::{ecs::schedule::ShouldRun, prelude::*};
|
|
use bevy_prototype_debug_lines::*;
|
|
|
|
use crate::illumination::Illumination;
|
|
|
|
#[derive(Default)]
|
|
pub struct Debug {
|
|
on: bool,
|
|
}
|
|
|
|
pub fn debug_run_criteria(debug: Res<Debug>) -> ShouldRun {
|
|
if debug.on {
|
|
ShouldRun::Yes
|
|
} else {
|
|
ShouldRun::No
|
|
}
|
|
}
|
|
|
|
pub fn debug_draw_illumination(
|
|
query: Query<(&GlobalTransform, &Illumination)>,
|
|
mut lines: ResMut<DebugLines>,
|
|
) {
|
|
for (trans, illumination) in query.iter() {
|
|
draw_sphere(&mut lines, trans.translation, illumination.radius);
|
|
}
|
|
}
|
|
|
|
fn draw_sphere(lines: &mut DebugLines, c: Vec3, r: f32) {
|
|
const THICKNESS: f32 = 0.1;
|
|
const MAX_LINES: usize = 10;
|
|
|
|
for i in 0..MAX_LINES {
|
|
let angle1 = (i as f32 / MAX_LINES as f32) * TAU;
|
|
let angle2 = ((i + 1) as f32 / MAX_LINES as f32) * TAU;
|
|
|
|
let start = Vec3::new(r * f32::cos(angle1), 1.0, r * f32::sin(angle1)) + c;
|
|
let end = Vec3::new(r * f32::cos(angle2), 1.0, r * f32::sin(angle2)) + c;
|
|
|
|
lines.line(start, end, THICKNESS);
|
|
}
|
|
}
|
|
|
|
pub fn toggle_debug(mut debug: ResMut<Debug>, input: Res<Input<KeyCode>>) {
|
|
if input.pressed(KeyCode::J) && input.pressed(KeyCode::K) && input.just_pressed(KeyCode::L) {
|
|
debug.on = !debug.on;
|
|
}
|
|
}
|