feat: debug visualizer for dirty rects
parent
21255120c5
commit
2bdc5182a5
|
|
@ -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::<TerrainChunk2D>()
|
||||
.insert_resource(Terrain2D::new())
|
||||
.add_event::<TerrainEvent2D>()
|
||||
.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<Terrain2D>, mut debug_draw: ResMut<DebugLines>) {
|
||||
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<Terrain2D>,
|
||||
mut terrain_events: EventWriter<TerrainEvent2D>,
|
||||
) {
|
||||
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 {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use bevy::prelude::Vec2;
|
||||
use bevy::prelude::*;
|
||||
|
||||
use super::Vector2;
|
||||
|
||||
|
|
@ -25,3 +25,13 @@ impl From<Vector2I> for Vec2 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Vector2I> for Vec3 {
|
||||
fn from(vec: Vector2I) -> Self {
|
||||
Vec3 {
|
||||
x: vec.x as f32,
|
||||
y: vec.y as f32,
|
||||
z: 0.0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue