diff options
Diffstat (limited to 'azalea-physics/src')
| -rw-r--r-- | azalea-physics/src/collision/mod.rs | 9 | ||||
| -rw-r--r-- | azalea-physics/src/lib.rs | 8 |
2 files changed, 11 insertions, 6 deletions
diff --git a/azalea-physics/src/collision/mod.rs b/azalea-physics/src/collision/mod.rs index de9439ca..1013b4fc 100644 --- a/azalea-physics/src/collision/mod.rs +++ b/azalea-physics/src/collision/mod.rs @@ -8,6 +8,7 @@ use std::ops::Add; use azalea_core::{Axis, Vec3, AABB, EPSILON}; use azalea_world::{Instance, MoveEntityError}; +use bevy_ecs::world::Mut; pub use blocks::BlockWithShape; pub use discrete_voxel_shape::*; pub use shape::*; @@ -138,7 +139,7 @@ pub fn move_colliding( _mover_type: &MoverType, movement: &Vec3, world: &Instance, - position: &mut azalea_entity::Position, + mut position: Mut<azalea_entity::Position>, physics: &mut azalea_entity::Physics, ) -> Result<(), MoveEntityError> { // TODO: do all these @@ -177,7 +178,9 @@ pub fn move_colliding( } }; - **position = new_pos; + if new_pos != **position { + **position = new_pos; + } } let x_collision = movement.x != collide_result.x; @@ -189,7 +192,7 @@ pub fn move_colliding( // TODO: minecraft checks for a "minor" horizontal collision here - let _block_pos_below = azalea_entity::on_pos_legacy(&world.chunks, position); + let _block_pos_below = azalea_entity::on_pos_legacy(&world.chunks, &position); // let _block_state_below = self // .world // .get_block_state(&block_pos_below) diff --git a/azalea-physics/src/lib.rs b/azalea-physics/src/lib.rs index 52bb4b9c..5fe7d218 100644 --- a/azalea-physics/src/lib.rs +++ b/azalea-physics/src/lib.rs @@ -16,6 +16,7 @@ use bevy_ecs::{ query::With, schedule::{IntoSystemConfigs, SystemSet}, system::{Query, Res}, + world::Mut, }; use collision::{move_colliding, MoverType}; @@ -53,7 +54,7 @@ fn travel( >, instance_container: Res<InstanceContainer>, ) { - for (mut physics, direction, mut position, sprinting, attributes, world_name) in &mut query { + for (mut physics, direction, position, sprinting, attributes, world_name) in &mut query { let world_lock = instance_container .get(world_name) .expect("All entities should be in a valid world"); @@ -93,7 +94,7 @@ fn travel( &world, &mut physics, &direction, - &mut position, + position, attributes, sprinting.map(|s| **s).unwrap_or(false), ); @@ -222,7 +223,8 @@ fn handle_relative_friction_and_calculate_movement( world: &Instance, physics: &mut Physics, direction: &LookDirection, - position: &mut Position, + // this is kept as a Mut for bevy change tracking + position: Mut<Position>, attributes: &Attributes, is_sprinting: bool, ) -> Vec3 { |
