diff --git a/src/terrain2d.rs b/src/terrain2d.rs index 563f860..5c078d3 100644 --- a/src/terrain2d.rs +++ b/src/terrain2d.rs @@ -4,6 +4,7 @@ use std::collections::{ }; use bevy::prelude::*; +use bevy_prototype_debug_lines::DebugLines; mod chunk2d; mod terrain_gen2d; @@ -22,6 +23,10 @@ impl Plugin for Terrain2DPlugin { app.register_type::() .insert_resource(Terrain2D::new()) .add_event::() + .add_system_to_stage( + CoreStage::PostUpdate, + dirty_rect_visualizer.before(emit_terrain_events), + ) .add_system_to_stage(CoreStage::PostUpdate, emit_terrain_events) .add_system(chunk_spawner) .add_system(chunk_sprite_sync) @@ -29,12 +34,43 @@ impl Plugin for Terrain2DPlugin { } } +/** + Visualize dirty rects +*/ +fn dirty_rect_visualizer(terrain: Res, mut debug_draw: ResMut) { + for (chunk_index, chunk) in terrain.chunk_iter() { + let rect = if let Some(rect) = chunk.dirty_rect { + rect + } else { + continue; + }; + + let color = Color::RED; + + let points = vec![ + Vec3::new(rect.min.x as f32, rect.min.y as f32, 0.0), + Vec3::new((rect.max.x + 1) as f32, rect.min.y as f32, 0.0), + Vec3::new((rect.max.x + 1) as f32, (rect.max.y + 1) as f32, 0.0), + Vec3::new(rect.min.x as f32, (rect.max.y + 1) as f32, 0.0), + ]; + for i in 0..points.len() { + let offset = Vec3::from(chunk_index_to_global(chunk_index)); + debug_draw.line_colored( + offset + points[i], + offset + points[(i + 1) % points.len()], + 0.0, + color, + ); + } + } +} + fn emit_terrain_events( mut terrain: ResMut, mut terrain_events: EventWriter, ) { for event in terrain.events.drain(..) { - terrain_events.send(event) + terrain_events.send(event); } for (chunk_index, chunk) in terrain.chunk_iter_mut() { if let Some(rect) = &chunk.dirty_rect { diff --git a/src/util/vector2_i32.rs b/src/util/vector2_i32.rs index 66d22f0..147ac8f 100644 --- a/src/util/vector2_i32.rs +++ b/src/util/vector2_i32.rs @@ -1,4 +1,4 @@ -use bevy::prelude::Vec2; +use bevy::prelude::*; use super::Vector2; @@ -25,3 +25,13 @@ impl From for Vec2 { } } } + +impl From for Vec3 { + fn from(vec: Vector2I) -> Self { + Vec3 { + x: vec.x as f32, + y: vec.y as f32, + z: 0.0, + } + } +}