diff --git a/src/game.rs b/src/game.rs index 3c7fb37..8d88a5b 100644 --- a/src/game.rs +++ b/src/game.rs @@ -47,8 +47,11 @@ fn debug_controls( fn setup_debug_terrain(mut commands: Commands, mut terrain: ResMut) { let terrain_gen = TerrainGen2D::new(432678); - for y in 0..(WORLD_WIDTH / Chunk2D::SIZE_Y as i32) { - for x in 0..(WORLD_WIDTH / Chunk2D::SIZE_X as i32) { + // for y in 0..(WORLD_WIDTH / Chunk2D::SIZE_Y as i32) { + // for x in 0..(WORLD_WIDTH / Chunk2D::SIZE_X as i32) { + // DEBUG: + for y in 1..2 { + for x in 8..9 { let position = Vector2I { x, y }; terrain.add_chunk(position, terrain_gen.gen_chunk(&position)); } diff --git a/src/game/kinematic.rs b/src/game/kinematic.rs index bad778b..06183a9 100644 --- a/src/game/kinematic.rs +++ b/src/game/kinematic.rs @@ -217,8 +217,12 @@ fn kinematic_movement( // name = name_query.get(coll_entity).unwrap(), // ); kinematic_state.on_ground = true; + // DEBUG: + println!("grounded"); } else { kinematic_state.on_ground = false; + // DEBUG: + println!("no ground"); } } } diff --git a/src/game/player.rs b/src/game/player.rs index 17ad6f6..17a85ce 100644 --- a/src/game/player.rs +++ b/src/game/player.rs @@ -61,7 +61,9 @@ pub fn player_spawn(mut commands: Commands) { let kinematic = KinematicBundle { collider: Collider::round_cuboid(4.0, 8.0, 1.0), transform: TransformBundle::from_transform(Transform::from_translation(Vec3::new( - 256.0, 128.0, 0.0, + // 256.0, 128.0, 0.0, + // DEBUG: + 256.0, 72.996, 0.0, ))), ..default() }; @@ -84,6 +86,7 @@ pub fn player_spawn(mut commands: Commands) { .insert(KinematicInput::default()) .insert(CameraFollow { priority: 1, - movement: FollowMovement::Smooth(7.0), + // movement: FollowMovement::Smooth(7.0), + movement: FollowMovement::Instant, }); } diff --git a/src/terrain2d.rs b/src/terrain2d.rs index 6df1352..b5d4759 100644 --- a/src/terrain2d.rs +++ b/src/terrain2d.rs @@ -5,7 +5,7 @@ use std::collections::{ use bevy::{ prelude::*, - render::{camera::RenderTarget, view::window}, + render::{camera::RenderTarget}, }; use bevy_prototype_debug_lines::DebugLines; @@ -13,6 +13,7 @@ mod chunk2d; mod terrain_gen2d; mod texel2d; +use bevy_rapier2d::prelude::*; pub use chunk2d::*; pub use terrain_gen2d::*; pub use texel2d::*; @@ -29,15 +30,48 @@ impl Plugin for Terrain2DPlugin { app.register_type::() .insert_resource(Terrain2D::new()) .add_event::() + .add_system(debug_painter) .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) - .add_system(chunk_collision_sync); + + // DEBUG: + .add_system_to_stage(CoreStage::First, first_log) + .add_system_to_stage(CoreStage::Last, last_log) + + .add_system_to_stage(CoreStage::PostUpdate, chunk_spawner.before(emit_terrain_events)) + .add_system_to_stage(CoreStage::PostUpdate, chunk_sprite_sync.after(chunk_spawner)) + .add_system_to_stage(CoreStage::PostUpdate, chunk_collision_sync.after(chunk_spawner)) + + .add_system_to_stage(CoreStage::PostUpdate, emit_terrain_events); + } +} + +// DEBUG: +fn first_log() { + println!("start <"); +} + +// DEBUG: +fn last_log( + chunk_query: Query<(Entity, &TerrainChunk2D)>, + child_query: Query<&Children>, + collider_query: Query<&Collider>, + mut commands: Commands, +) { + println!("> end"); + for (entity, chunk) in chunk_query.iter() { + // if chunk.index == Vector2I::new(8, 1) { + // } + println!("chunk! {entity:?} {:?}", chunk.index); + for children in child_query.get(entity).iter() { + for child in children.iter() { + print!("\t"); + commands.entity(*child).log_components() + } + } } } diff --git a/src/terrain2d/chunk2d.rs b/src/terrain2d/chunk2d.rs index 8194e85..a0826f1 100644 --- a/src/terrain2d/chunk2d.rs +++ b/src/terrain2d/chunk2d.rs @@ -477,9 +477,7 @@ pub fn chunk_spawner( */ pub fn chunk_sprite_sync( mut terrain_events: EventReader, - mut commands: Commands, mut images: ResMut>, - mut sprite_query: Query<&mut Sprite>, terrain: Res, added_chunk_query: Query< (Entity, &TerrainChunk2D), @@ -519,21 +517,12 @@ pub fn chunk_sprite_sync( // Update sprite for (entity, chunk, rect) in updated_chunks { let chunk = terrain.index_to_chunk(&chunk.index).unwrap(); - let rect = rect.unwrap_or(ChunkRect { + // TODO: Update only the rect + let _rect = rect.unwrap_or(ChunkRect { min: Vector2I::ZERO, max: Chunk2D::SIZE - Vector2I::ONE, }); - let mut sprite = match sprite_query.get_mut(entity) { - Ok(sprite) => sprite, - Err(err) => { - println!("[chunk_sprite_sync] Sprite component not found for entity:"); - commands.entity(entity).log_components(); - println!("{err:?}"); - continue; - } - }; - let handle = texture_query.get(entity).unwrap(); let mut image = images.get_mut(handle).unwrap(); let image_data = chunk.create_texture_data(); @@ -556,7 +545,7 @@ pub fn chunk_collision_sync( child_query: Query<&Children>, collider_query: Query<&Collider>, ) { - let mut updated_chunks = vec![]; + let mut updated_chunks: Vec<(Entity, &TerrainChunk2D)> = vec![]; // Check for added components for (added_entity, added_chunk) in added_chunk_query.iter() { @@ -585,6 +574,8 @@ pub fn chunk_collision_sync( } for (entity, chunk) in updated_chunks.iter() { + // DEBUG: + println!("update chunk {:?}", chunk.index); // Remove old colliders for children in child_query.get(*entity) { for child in children {