Skip to content

Commit

Permalink
better astar WeightedNode::cmp
Browse files Browse the repository at this point in the history
  • Loading branch information
mat-1 committed Dec 27, 2024
1 parent 185ed84 commit 6ccd44e
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 10 deletions.
2 changes: 1 addition & 1 deletion azalea-core/src/position.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ impl Vec3 {
}

/// The coordinates of a block in the world. For entities (if the coordinate
/// with decimals), use [`Vec3`] instead.
/// have decimals), use [`Vec3`] instead.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct BlockPos {
Expand Down
15 changes: 6 additions & 9 deletions azalea/src/pathfinder/astar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,28 +277,25 @@ impl<P: Hash + Copy + Clone, M: Clone> Clone for Movement<P, M> {
#[derive(PartialEq)]
pub struct WeightedNode {
index: usize,
/// The actual cost to get to this node
g_score: f32,
/// Sum of the g_score and heuristic
f_score: f32,
}

impl Ord for WeightedNode {
#[inline]
fn cmp(&self, other: &Self) -> cmp::Ordering {
// intentionally inverted to make the BinaryHeap a min-heap
match other
.f_score
.partial_cmp(&self.f_score)
.unwrap_or(cmp::Ordering::Equal)
{
cmp::Ordering::Equal => self
.g_score
.partial_cmp(&other.g_score)
.unwrap_or(cmp::Ordering::Equal),
match other.f_score.total_cmp(&self.f_score) {
cmp::Ordering::Equal => self.g_score.total_cmp(&other.g_score),
s => s,
}
}
}
impl Eq for WeightedNode {}
impl PartialOrd for WeightedNode {
#[inline]
fn partial_cmp(&self, other: &Self) -> Option<cmp::Ordering> {
Some(self.cmp(other))
}
Expand Down

0 comments on commit 6ccd44e

Please sign in to comment.