From 305f8740abac2405e31748a1b85392beaf8a1eeb Mon Sep 17 00:00:00 2001 From: ModZero Date: Fri, 13 May 2022 00:36:25 +0200 Subject: [PATCH] Basic tilemap rendering --- .idea/git_toolbox_prj.xml | 15 +++++++++++ assets/tileset.png | Bin 0 -> 130 bytes src/helpers/mod.rs | 1 + src/helpers/texture.rs | 20 +++++++++++++++ src/main.rs | 51 ++++++++++++++++++++++++++++++++++++-- 5 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 .idea/git_toolbox_prj.xml create mode 100644 assets/tileset.png create mode 100644 src/helpers/mod.rs create mode 100644 src/helpers/texture.rs diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/assets/tileset.png b/assets/tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..aeeda09c44562af1d0b73cbcc46879fbe8655fc0 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Y&=~YLp(Z@ zQxXz>oOf_OaOl8+0~69VPgZL?Z}sTh0T>, + mut textures: ResMut>, +) { + // quick and dirty, run this for all textures anytime a texture is created. + for event in texture_events.iter() { + match event { + AssetEvent::Created { handle } => { + if let Some(mut texture) = textures.get_mut(handle) { + texture.texture_descriptor.usage = TextureUsages::TEXTURE_BINDING + | TextureUsages::COPY_SRC + | TextureUsages::COPY_DST; + } + } + _ => (), + } + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index e7a11a9..17943ed 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,50 @@ -fn main() { - println!("Hello, world!"); +use bevy::prelude::*; +use bevy_ecs_tilemap::prelude::*; + +mod helpers; + +fn startup(mut commands: Commands, asset_server: Res, mut map_query: MapQuery) { + commands.spawn_bundle(OrthographicCameraBundle::new_2d()); + + let texture_handle = asset_server.load("tileset.png"); + + let map_entity = commands.spawn().id(); + let mut map = Map::new(0u16, map_entity); + + let (mut layer_builder, layer_entity) = LayerBuilder::::new( + &mut commands, + LayerSettings::new( + MapSize(3, 3), + ChunkSize(8, 8), + TileSize(8.0, 8.0), + TextureSize(24.0, 24.0) + ), + 0u16, + 0u16 + ); + layer_builder.set_all(TileBundle::default()); + + map_query.build_layer(&mut commands, layer_builder, texture_handle); + map.add_layer(&mut commands, 0u16, layer_entity); + + commands + .entity(map_entity) + .insert(map) + .insert(Transform::from_xyz(-128.0, -128.0, 0.0)) + .insert(GlobalTransform::default()); +} + +fn main() { + App::new() + .insert_resource(WindowDescriptor { + width: 1270.0, + height: 720.0, + title: String::from("Monstrous"), + ..Default::default() + }) + .add_plugins(DefaultPlugins) + .add_plugin(TilemapPlugin) + .add_startup_system(startup) + .add_system(helpers::texture::set_texture_filters_to_nearest) + .run(); }