Path: blob/main/examples/2d/tilemap_chunk_orientation.rs
30632 views
//! Shows a tilemap chunk rendered with a single draw call, including different orientations of tiles (rotated, mirrored) and using different tileset indices, colors, alpha and visibility to show all tile features.12use bevy::{3image::{ImageArrayLayout, ImageLoaderSettings},4prelude::*,5sprite_render::{AlphaMode2d, TileData, TileOrientation, TilemapChunk, TilemapChunkTileData},6};78fn main() {9App::new()10.add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))11.insert_resource(ClearColor(Color::srgb(0.5, 0.5, 0.9)))12.add_systems(Startup, setup)13.run();14}1516fn setup(mut commands: Commands, assets: Res<AssetServer>) {17let chunk_size = UVec2::splat(8);18let tile_display_size = UVec2::splat(64);1920// We'll use each possible orientation, one per column21let orientation = [22TileOrientation::Default,23TileOrientation::Rotate90,24TileOrientation::Rotate180,25TileOrientation::Rotate270,26TileOrientation::MirrorH,27TileOrientation::MirrorHRotate90,28TileOrientation::MirrorHRotate180,29TileOrientation::MirrorHRotate270,30];3132// Show different color/alpha on each row33let colors = [34Color::WHITE,35Color::linear_rgb(1.0, 0.0, 0.0),36Color::linear_rgb(0.0, 1.0, 0.0),37Color::linear_rgb(0.0, 0.0, 1.0),38Color::linear_rgba(1.0, 0.0, 0.0, 0.25),39Color::linear_rgba(0.0, 1.0, 0.0, 0.25),40Color::linear_rgba(0.0, 0.0, 1.0, 0.25),41Color::linear_rgba(1.0, 1.0, 1.0, 0.5),42];4344let tile_data = (0..chunk_size.element_product())45.map(|i| {46let row = i / 8;47let col = i % 8;48Some(TileData {49// Alternate tiles per row50tileset_index: (row % 2) as u16,51color: colors[row as usize],52// Last (top) row is invisible53visible: row != 7,54orientation: orientation[col as usize],55})56})57.collect();5859commands.spawn((60TilemapChunk {61chunk_size,62tile_display_size,63tileset: assets64.load_builder()65.with_settings(|settings: &mut ImageLoaderSettings| {66// The tileset texture is expected to be an array of tile textures, so we tell the67// `ImageLoader` that our texture is composed of 2 stacked tile images.68settings.array_layout = Some(ImageArrayLayout::RowCount { rows: 2 });69})70.load("textures/arrow.png"),71alpha_mode: AlphaMode2d::Blend,72},73TilemapChunkTileData(tile_data),74));7576commands.spawn(Camera2d);77}787980