From f01b0856f4a03aad823ba4f0c64ca9c50079f168 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Fri, 4 Jun 2021 07:39:38 -0500 Subject: [PATCH] Move collider add code into `MapPlugin`. --- src/map.rs | 33 +++++++++++++++++++++++++++++++++ src/navigation.rs | 32 -------------------------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/map.rs b/src/map.rs index f421d28..68f9037 100644 --- a/src/map.rs +++ b/src/map.rs @@ -1,6 +1,7 @@ use std::collections::{HashMap, HashSet}; use bevy::prelude::*; +use bevy_rapier2d::prelude::*; use derive_more::{Deref, DerefMut}; use mapgen::{geometry::Rect as MRect, Map as MapgenMap, MapFilter, TileType}; use maze_generator::{prelude::*, recursive_backtracking::RbGenerator}; @@ -203,6 +204,37 @@ impl MapFilter for GridBuilder { } } +fn add_map_colliders(mut commands: Commands, maps: Query<(Entity, &Map), Added>) { + for (map_entity, map) in maps.iter() { + let rigid_body_entity = commands + .entity(map_entity) + .insert_bundle(RigidBodyBundle { + body_type: RigidBodyType::Static, + ..Default::default() + }) + .id(); + for x in 0..map.width() { + for y in 0..map.height() { + let tile = map.base.at(x, y); + if tile.blocks_motion() { + let collider = ColliderBundle { + shape: ColliderShape::cuboid(0.5, 0.5), + ..Default::default() + }; + let collider_parent = ColliderParent { + handle: rigid_body_entity.handle(), + pos_wrt_parent: Vec2::new(x as f32 + 0.5, y as f32 + 0.5).into(), + }; + commands + .spawn() + .insert_bundle(collider) + .insert(collider_parent); + } + } + } + } +} + fn portal_spawner( mut commands: Commands, map: Query<(Entity, &Map), Added>, @@ -372,6 +404,7 @@ impl Plugin for MapPlugin { const SPAWN_PORTALS: &str = "SPAWN_PORTALS"; app.register_type::() .insert_resource(PreviousIndex::default()) + .add_system(add_map_colliders.system()) .add_system(entity_indexing.system().label(UPDATE_ENTITY_INDEX_LABEL)) .add_system( portal_spawner diff --git a/src/navigation.rs b/src/navigation.rs index 8c5a482..5d1ff80 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -42,37 +42,6 @@ pub struct Speed(pub f32); #[reflect(Component)] pub struct Sprinting; -fn add_map_colliders(mut commands: Commands, maps: Query<(Entity, &Map), Added>) { - for (map_entity, map) in maps.iter() { - let rigid_body_entity = commands - .entity(map_entity) - .insert_bundle(RigidBodyBundle { - body_type: RigidBodyType::Static, - ..Default::default() - }) - .id(); - for x in 0..map.width() { - for y in 0..map.height() { - let tile = map.base.at(x, y); - if tile.blocks_motion() { - let collider = ColliderBundle { - shape: ColliderShape::cuboid(0.5, 0.5), - ..Default::default() - }; - let collider_parent = ColliderParent { - handle: rigid_body_entity.handle(), - pos_wrt_parent: Vec2::new(x as f32 + 0.5, y as f32 + 0.5).into(), - }; - commands - .spawn() - .insert_bundle(collider) - .insert(collider_parent); - } - } - } - } -} - fn movement_controls( mut commands: Commands, config: Res>, @@ -288,7 +257,6 @@ where app.register_type::() .register_type::() .register_type::() - .add_system(add_map_colliders.system()) .add_system(speak_direction.system().chain(error_handler.system())); if config.movement_states.is_empty() { } else {