moria/src/debug.rs

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;
}
}