feat!: "Syntax sugar" for pixels per meter measure

- Added meters function for better readability
- Adjusted tilemap_bundle transform
- Added 2nd floor in setup_world system

BREAKING CHANGE: Removed HALVED_PIXELS_PER_METER const
This commit is contained in:
Alexey 2026-03-24 12:13:08 +03:00
commit 0c0dcec4b8
6 changed files with 51 additions and 27 deletions

View file

@ -5,7 +5,9 @@ use bevy::{
use bevy_rapier2d::prelude::*;
use crate::{
HALVED_PIXELS_PER_METER, PIXELS_PER_METER, inventory::item::Item, player::Player
meters,
inventory::item::Item,
player::Player,
};
use super::*;
@ -73,20 +75,27 @@ pub fn setup_world(
Item::new_positioned(uvec2(4, 4), uvec2(0, 4)),
];
// floor
// floor 1F
let mut tiles = (0..16).map(|x| {
(0, uvec2(x, 1))
}).collect::<Vec<(u16, UVec2)>>();
// ceiling
// floor/ceil 1-2F
tiles.extend((0..16).map(|x| {
(0, uvec2(x, 5))
}));
// ceil 2F
tiles.extend((0..16).map(|x| {
(0, uvec2(x, 9))
}));
// walls
tiles.extend([
(0, 4), (0, 3), (0, 2),
(0, 8), (0, 7), (0, 6),
(15, 4), (15, 3), (15, 2),
(15, 8), (15, 7), (15, 6),
].iter().map(|(x, y)| {
(1, uvec2(*x, *y))
}));
@ -99,15 +108,21 @@ pub fn setup_world(
}));
let colliders: Vec<(Collider, Vec2)> = vec![
(Collider::cuboid(HALVED_PIXELS_PER_METER, PIXELS_PER_METER * 1.5),
vec2(HALVED_PIXELS_PER_METER, HALVED_PIXELS_PER_METER)),
(Collider::cuboid(HALVED_PIXELS_PER_METER, PIXELS_PER_METER * 1.5),
vec2(PIXELS_PER_METER * 15.5, HALVED_PIXELS_PER_METER)),
// 1F
(Collider::cuboid(meters(0.5), meters(1.5)),
vec2(meters(0.5), meters(-4.5))),
(Collider::cuboid(meters(0.5), meters(1.5)),
vec2(meters(15.5), meters(-4.5))),
// 2F
(Collider::cuboid(meters(0.5), meters(1.5)),
vec2(meters(0.5), meters(0.5))),
(Collider::cuboid(meters(0.5), meters(1.5)),
vec2(meters(15.5), meters(-0.5))),
];
commands.spawn(door::door_bundle(&asset_server, vec2(PIXELS_PER_METER * 1.5, 0.), true));
commands.spawn(door::door_bundle(&asset_server, vec2(PIXELS_PER_METER * 3.5, 0.), false));
commands.spawn(door::door_bundle(&asset_server, vec2(PIXELS_PER_METER * 5.5, 0.), false)).insert(Locked);
commands.spawn(container::container_bundle(&asset_server, vec2(-32., 0.), uvec2(8, 8), items));
commands.spawn(tilemap::tilemap_bundle(&asset_server, uvec2(16, 6), tiles, colliders));
commands.spawn(door::door_bundle(&asset_server, vec2(meters(1.5), 0.), true));
commands.spawn(door::door_bundle(&asset_server, vec2(meters(3.5), 0.), false));
commands.spawn(door::door_bundle(&asset_server, vec2(meters(5.5), 0.), false)).insert(Locked);
commands.spawn(container::container_bundle(&asset_server, vec2(meters(-2.), 0.), uvec2(8, 8), items));
commands.spawn(tilemap::tilemap_bundle(&asset_server, uvec2(16, 16), tiles, colliders));
}