updated nearest-neighbor for an rtreeless world
This commit is contained in:
parent
08bd791418
commit
e73e77f800
1 changed files with 10 additions and 2 deletions
|
@ -58,7 +58,7 @@ pub async fn mine_chunk_and_sweep(turtle: TurtleCommander, pos: Vec3, chunk: Vec
|
|||
while let Some(block) = valuables.pop() {
|
||||
refuel_needed(&turtle, volume).await;
|
||||
|
||||
if turtle.world().get(block).await.is_none() {
|
||||
if turtle.world().garbage(block).await {
|
||||
continue;
|
||||
}
|
||||
let near = turtle.goto_adjacent(block).await?;
|
||||
|
@ -74,7 +74,7 @@ async fn near_valuables(turtle: &TurtleCommander, pos: Vec3, chunk: Vec3) -> Vec
|
|||
let scan = (0..(chunk*2).product()).map(|n| fill(chunk * 2, n) - chunk/2);
|
||||
|
||||
let world = turtle.world().lock().await;
|
||||
scan.map(|n| world.get(n))
|
||||
scan.map(|n| world.get(n + pos))
|
||||
.filter_map(|f| f)
|
||||
.filter(|n| n.name != "minecraft:air")
|
||||
.filter(|n| VALUABLE.iter().any(|v| n.name.contains(v)))
|
||||
|
@ -345,6 +345,14 @@ impl ChunkedTask {
|
|||
return Some(chunk);
|
||||
}
|
||||
|
||||
loop { // update head (from a save)
|
||||
let minimum = self.confirmed.load(Ordering::SeqCst);
|
||||
let head = self.head.load(Ordering::SeqCst);
|
||||
if let Ok(_) = self.head.compare_exchange(head, minimum.max(head), Ordering::AcqRel, Ordering::SeqCst) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let head = self.head.fetch_add(1, Ordering::AcqRel);
|
||||
|
||||
if head < self.max {
|
||||
|
|
Loading…
Reference in a new issue