From 6eee543a3367d38a6f0e9bffb457a2bd76a8f9cc Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Sat, 12 Nov 2022 23:54:05 -0600 Subject: Pathfinder (#25) Pathfinding is very much not done, but it works enough and I want to get this merged. TODO: fast replanning, goals that aren't a single node, falling moves (it should be able to play the dropper), parkour moves --- azalea-physics/src/collision/blocks.rs | 0 azalea-physics/src/collision/dimension_collisions.rs | 7 ++++--- azalea-physics/src/collision/discrete_voxel_shape.rs | 0 azalea-physics/src/collision/mergers.rs | 0 azalea-physics/src/collision/mod.rs | 10 +++++++--- azalea-physics/src/collision/shape.rs | 0 6 files changed, 11 insertions(+), 6 deletions(-) mode change 100644 => 100755 azalea-physics/src/collision/blocks.rs mode change 100644 => 100755 azalea-physics/src/collision/dimension_collisions.rs mode change 100644 => 100755 azalea-physics/src/collision/discrete_voxel_shape.rs mode change 100644 => 100755 azalea-physics/src/collision/mergers.rs mode change 100644 => 100755 azalea-physics/src/collision/mod.rs mode change 100644 => 100755 azalea-physics/src/collision/shape.rs (limited to 'azalea-physics/src/collision') diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs old mode 100644 new mode 100755 diff --git a/azalea-physics/src/collision/dimension_collisions.rs b/azalea-physics/src/collision/dimension_collisions.rs old mode 100644 new mode 100755 index 35eb9f5b..fd4e5141 --- a/azalea-physics/src/collision/dimension_collisions.rs +++ b/azalea-physics/src/collision/dimension_collisions.rs @@ -3,7 +3,8 @@ use azalea_block::BlockState; use azalea_core::{ChunkPos, ChunkSectionPos, Cursor3d, CursorIterationType, EPSILON}; use azalea_world::entity::EntityData; use azalea_world::{Chunk, Dimension}; -use std::sync::{Arc, Mutex}; +use parking_lot::Mutex; +use std::sync::Arc; use super::Shapes; @@ -92,10 +93,10 @@ impl<'a> Iterator for BlockCollisions<'a> { Some(chunk) => chunk, None => continue, }; - let chunk_lock = chunk.lock().unwrap(); let pos = item.pos; - let block_state: BlockState = chunk_lock + let block_state: BlockState = chunk + .lock() .get(&(&pos).into(), self.dimension.min_y()) .unwrap_or(BlockState::Air); diff --git a/azalea-physics/src/collision/discrete_voxel_shape.rs b/azalea-physics/src/collision/discrete_voxel_shape.rs old mode 100644 new mode 100755 diff --git a/azalea-physics/src/collision/mergers.rs b/azalea-physics/src/collision/mergers.rs old mode 100644 new mode 100755 diff --git a/azalea-physics/src/collision/mod.rs b/azalea-physics/src/collision/mod.rs old mode 100644 new mode 100755 index f08e48e3..d5502f3d --- a/azalea-physics/src/collision/mod.rs +++ b/azalea-physics/src/collision/mod.rs @@ -4,8 +4,10 @@ mod discrete_voxel_shape; mod mergers; mod shape; -use azalea_core::{Axis, PositionXYZ, Vec3, AABB, EPSILON}; -use azalea_world::entity::{EntityData, EntityMut}; +use std::ops::DerefMut; + +use azalea_core::{Axis, Vec3, AABB, EPSILON}; +use azalea_world::entity::{Entity, EntityData}; use azalea_world::{Dimension, MoveEntityError}; pub use blocks::BlockWithShape; use dimension_collisions::CollisionGetter; @@ -81,7 +83,7 @@ impl HasCollision for Dimension { } } -impl MovableEntity for EntityMut<'_> { +impl> MovableEntity for Entity<'_, D> { /// Move an entity by a given delta, checking for collisions. fn move_colliding( &mut self, @@ -158,6 +160,8 @@ impl MovableEntity for EntityMut<'_> { if vertical_collision { // blockBelow.updateEntityAfterFallOn(this.level, this); + // the default implementation of updateEntityAfterFallOn sets the y movement to 0 + self.delta.y = 0.; } if on_ground { diff --git a/azalea-physics/src/collision/shape.rs b/azalea-physics/src/collision/shape.rs old mode 100644 new mode 100755 -- cgit v1.2.3