From 91e9e622dee079c8a27d59a2ff7276c923c92e51 Mon Sep 17 00:00:00 2001 From: JP Stringham Date: Tue, 3 Feb 2026 20:27:05 -0500 Subject: [PATCH] AutoLayer rendering working sorta --- src/ldtk/mod.rs | 4 +++- src/main.rs | 54 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/ldtk/mod.rs b/src/ldtk/mod.rs index 2638b98..ecb8800 100644 --- a/src/ldtk/mod.rs +++ b/src/ldtk/mod.rs @@ -36,6 +36,8 @@ pub struct LayerInstance { pub grid_tiles: Vec, #[serde(alias = "intGridCsv")] pub int_grid_tiles: Vec, + #[serde(alias = "autoLayerTiles")] + pub al_tiles: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -53,7 +55,7 @@ pub struct Tile { pub px_coords: UVec2, } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub enum LayerType { IntGrid, Entities, diff --git a/src/main.rs b/src/main.rs index b137908..b7e4a8d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,18 +16,22 @@ struct TilemapStuff { img_id: Option>, } +#[derive(Resource)] +struct LevelData { + ldtk_proj: ldtk::Project, +} + fn main() { - let mut ldtk_proj: ldtk::Project = + let ldtk_proj: ldtk::Project = serde_json::from_str(include_str!("../assets/test.ldtk")).unwrap(); println!("LDTK {ldtk_proj:?}"); - return; - let mut app = App::new(); app.add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) .init_state::() + .insert_resource(LevelData { ldtk_proj }) .insert_resource(TilemapStuff::default()) .add_systems(Startup, init) .add_systems(Update, loadloop.run_if(in_state(AppState::Preload))) @@ -42,9 +46,16 @@ fn init( mut state: ResMut>, mut tmap_stuff: ResMut, mut t_layouts: ResMut>, + lvl: Res, ) { println!("Hello Bevy!"); + let mut orth_proj = OrthographicProjection::default_2d(); + orth_proj.scale = 0.5; + orth_proj.viewport_origin = Vec2::ZERO; + commands.spawn((Camera2d, Projection::Orthographic(orth_proj))); + + // load tilemap let sprite = assets.load("tilemap.png"); tmap_stuff.img_id = Some(sprite.id()); tmap_stuff.img_handle = Some(sprite.clone()); @@ -52,23 +63,28 @@ fn init( let t_layout = TextureAtlasLayout::from_grid(uvec2(16, 16), 12, 8, Some(uvec2(1, 1)), None); let t_handle = t_layouts.add(t_layout); - for i in 0..18 { - let x = i as f32 * 20.; - commands.spawn(( - Sprite::from_atlas_image( - sprite.clone(), - TextureAtlas { - layout: t_handle.clone(), - index: i, - }, - ), - Transform::from_xyz(x, 0., 0.), - )); - } + // create map from lvl data - let mut orth_proj = OrthographicProjection::default_2d(); - orth_proj.scale = 0.25; - commands.spawn((Camera2d, Projection::Orthographic(orth_proj))); + let lvl = &lvl.ldtk_proj.levels[0]; + + lvl.layer_instances.iter().for_each(|li| { + if li.ty != ldtk::LayerType::AutoLayer { + return; + } + + li.al_tiles.iter().for_each(|t| { + commands.spawn(( + Sprite::from_atlas_image( + sprite.clone(), + TextureAtlas { + layout: t_handle.clone(), + index: t.ty as usize, + }, + ), + Transform::from_xyz(t.px_coords.x as f32, 256. - t.px_coords.y as f32, 0.), + )); + }); + }); state.set(AppState::Preload); }