Make colliders children of the map.

This commit is contained in:
Nolan Darilek 2021-08-12 13:20:00 -05:00
parent 22abe7462e
commit 00458f1835

View File

@ -216,18 +216,15 @@ fn spawn_colliders(
let id = commands let id = commands
.spawn_bundle(ColliderBundle { .spawn_bundle(ColliderBundle {
shape: ColliderShape::cuboid(0.5, 0.5), shape: ColliderShape::cuboid(0.5, 0.5),
position: Vec2::new(x as f32 + 0.5, y as f32 + 0.5).into(),
..Default::default() ..Default::default()
}) })
.insert(ColliderParent {
handle: map_entity.handle(),
pos_wrt_parent: Vec2::new(x as f32 + 0.5, y as f32 + 0.5)
.into(),
})
.insert(MapObstruction) .insert(MapObstruction)
.id(); .id();
if tile.blocks_visibility() { if tile.blocks_visibility() {
commands.entity(id).insert(BlocksVisibility::default()); commands.entity(id).insert(BlocksVisibility::default());
} }
commands.entity(map_entity).push_children(&[id]);
} }
} }
} }
@ -314,17 +311,15 @@ fn spawn_colliders(
let id = commands let id = commands
.spawn_bundle(ColliderBundle { .spawn_bundle(ColliderBundle {
shape: ColliderShape::cuboid(half_width, half_height), shape: ColliderShape::cuboid(half_width, half_height),
position: Vec2::new(x, y).into(),
..Default::default() ..Default::default()
}) })
.insert(ColliderParent {
handle: map_entity.handle(),
pos_wrt_parent: Vec2::new(x, y).into(),
})
.insert(MapObstruction) .insert(MapObstruction)
.id(); .id();
if map.at(x as usize, y as usize).blocks_visibility() { if map.at(x as usize, y as usize).blocks_visibility() {
commands.entity(id).insert(BlocksVisibility::default()); commands.entity(id).insert(BlocksVisibility::default());
} }
commands.entity(map_entity).push_children(&[id]);
bottom_left = None; bottom_left = None;
bottom_right = None; bottom_right = None;
} }
@ -337,19 +332,18 @@ fn spawn_colliders(
(room.height() / 2) as f32 + 0.5, (room.height() / 2) as f32 + 0.5,
); );
let position = Vec2::new(room.center().x() + 0.5, room.center().y() + 0.5).into(); let position = Vec2::new(room.center().x() + 0.5, room.center().y() + 0.5).into();
commands let id = commands
.spawn_bundle(ColliderBundle { .spawn_bundle(ColliderBundle {
collider_type: ColliderType::Sensor, collider_type: ColliderType::Sensor,
shape: shape.clone(), shape: shape.clone(),
flags: ActiveEvents::INTERSECTION_EVENTS.into(), flags: ActiveEvents::INTERSECTION_EVENTS.into(),
position,
..Default::default() ..Default::default()
}) })
.insert(ColliderParent {
handle: map_entity.handle(),
pos_wrt_parent: position,
})
.insert(shape.compute_aabb(&position)) .insert(shape.compute_aabb(&position))
.insert(Area); .insert(Area)
.id();
commands.entity(map_entity).push_children(&[id]);
} }
} }
} }
@ -418,20 +412,18 @@ fn spawn_portal_colliders(
for (map_entity, spawn_colliders) in map.iter() { for (map_entity, spawn_colliders) in map.iter() {
if **spawn_colliders { if **spawn_colliders {
for (portal_entity, coordinates) in portals.iter() { for (portal_entity, coordinates) in portals.iter() {
let position = Vec2::new(coordinates.x() + 0.5, coordinates.y() + 0.5).into();
commands commands
.entity(portal_entity) .entity(portal_entity)
.insert_bundle(ColliderBundle { .insert_bundle(ColliderBundle {
collider_type: ColliderType::Sensor, collider_type: ColliderType::Sensor,
shape: ColliderShape::cuboid(0.5, 0.5), shape: ColliderShape::cuboid(0.5, 0.5),
position,
flags: ActiveEvents::INTERSECTION_EVENTS.into(), flags: ActiveEvents::INTERSECTION_EVENTS.into(),
..Default::default() ..Default::default()
}) })
.insert(ColliderPositionSync::Discrete) .insert(ColliderPositionSync::Discrete);
.insert(ColliderParent { commands.entity(map_entity).push_children(&[portal_entity]);
handle: map_entity.handle(),
pos_wrt_parent: Vec2::new(coordinates.x() + 0.5, coordinates.y() + 0.5)
.into(),
});
} }
} }
} }