generated from 2ndbeam/bevy-template
feat: Updated tilemap bundle
- Layout is now defined from bottom left corner - Added rotation to lockpick bundle - Added level TOML structures that match current level
This commit is contained in:
parent
0e18bb6df5
commit
24153e476f
7 changed files with 225 additions and 72 deletions
|
|
@ -23,11 +23,15 @@ pub struct Tilemap;
|
|||
|
||||
pub fn tilemap_bundle(
|
||||
asset_server: &Res<AssetServer>,
|
||||
size: UVec2,
|
||||
tiles: Vec<(u16, UVec2)>,
|
||||
tiles: Vec<(u16, URect)>,
|
||||
) -> impl Bundle {
|
||||
let mut size = uvec2(0, 0);
|
||||
for tile in tiles.iter() {
|
||||
size.x = size.x.max(tile.1.max.x + 1);
|
||||
size.y = size.y.max(tile.1.max.y + 1);
|
||||
}
|
||||
let tile_data: Vec<Option<TileData>> = (0..size.element_product()).map(|xy| {
|
||||
if let Some((id, _)) = tiles.iter().find(|(_, pos)| pos.x == xy % size.x && pos.y == xy / size.x) {
|
||||
if let Some((id, _)) = tiles.iter().find(|(_, rect)| rect.contains(uvec2(xy % size.x, xy / size.x))) {
|
||||
Some(TileData::from_tileset_index(*id))
|
||||
} else { None }
|
||||
}).collect();
|
||||
|
|
@ -44,27 +48,26 @@ pub fn tilemap_bundle(
|
|||
),
|
||||
..default()
|
||||
},
|
||||
Transform::from_xyz(0., meters(0.5) * size.y as f32 - meters(3.), 0.),
|
||||
Transform::from_xyz(
|
||||
meters(0.5) * size.x as f32,
|
||||
meters(0.5) * size.y as f32 - meters(1.),
|
||||
0.,
|
||||
),
|
||||
TilemapChunkTileData(tile_data),
|
||||
Children::spawn(SpawnIter(tiles.into_iter().map(move |(_, pos)| {(
|
||||
// TODO: optimize colliders
|
||||
Collider::cuboid(meters(0.5), meters(0.5)),
|
||||
Children::spawn(SpawnIter(tiles.into_iter().map(move |(_, rect)| {
|
||||
let mut rect = rect.as_rect();
|
||||
rect.max = vec2(rect.max.x + 1., rect.max.y + 1.);
|
||||
|
||||
let (width, height) = (rect.width(), rect.height());
|
||||
let offset = rect.center();
|
||||
(
|
||||
Collider::cuboid(meters(width * 0.5), meters(height * 0.5)),
|
||||
Transform::from_xyz(
|
||||
meters(0.5 + pos.x as f32 - (size.x as f32 * 0.5)),
|
||||
meters(0.5 + pos.y as f32 - (size.y as f32 * 0.5)),
|
||||
meters(offset.x - size.x as f32 * 0.5),
|
||||
meters(offset.y - size.y as f32 * 0.5),
|
||||
0.,
|
||||
),
|
||||
)})
|
||||
)),
|
||||
//Children::spawn(SpawnIter(colliders.into_iter()
|
||||
// .map(move |(collider, pos)| {(
|
||||
// collider.clone(),
|
||||
// Transform::from_xyz(
|
||||
// pos.x - meters(0.5) * size.x as f32,
|
||||
// pos.y - meters(0.5) * size.y as f32,
|
||||
// 0.
|
||||
// ),
|
||||
// )})
|
||||
//)),
|
||||
)}
|
||||
))),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue