aboutsummaryrefslogtreecommitdiff
path: root/azalea-physics
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-physics')
-rw-r--r--azalea-physics/src/collision/mod.rs9
-rw-r--r--azalea-physics/src/lib.rs8
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 {