|
|
|
@ -47,31 +47,31 @@ fn set_transform_on_chunkpos_changed( |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn add_chunks_to_chunkmap( |
|
|
|
|
trigger: Trigger<OnAdd, (Parent, ChunkPos)>, |
|
|
|
|
chunk_query: Query<(&Parent, &ChunkPos)>, |
|
|
|
|
trigger: Trigger<OnAdd, (ChildOf, ChunkPos)>, |
|
|
|
|
chunk_query: Query<(&ChildOf, &ChunkPos)>, |
|
|
|
|
mut map_query: Query<&mut ChunkMap>, |
|
|
|
|
) { |
|
|
|
|
let chunk = trigger.entity(); |
|
|
|
|
let Ok((parent, pos)) = chunk_query.get(chunk) else { |
|
|
|
|
let chunk = trigger.target(); |
|
|
|
|
let Ok((child_of, pos)) = chunk_query.get(chunk) else { |
|
|
|
|
// Trigger with a bundle doesn't work as expected. It triggers
|
|
|
|
|
// when ANY component is added, rather than when ALL are present.
|
|
|
|
|
return; |
|
|
|
|
}; |
|
|
|
|
let mut map = map_query.get_mut(parent.get()).unwrap(); |
|
|
|
|
let mut map = map_query.get_mut(child_of.parent()).unwrap(); |
|
|
|
|
map.try_insert(*pos, chunk).expect("chunk already present"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn remove_chunks_from_chunkmap( |
|
|
|
|
trigger: Trigger<OnRemove, (Parent, ChunkPos)>, |
|
|
|
|
chunk_query: Query<(&Parent, &ChunkPos)>, |
|
|
|
|
trigger: Trigger<OnRemove, (ChildOf, ChunkPos)>, |
|
|
|
|
chunk_query: Query<(&ChildOf, &ChunkPos)>, |
|
|
|
|
mut map_query: Query<&mut ChunkMap>, |
|
|
|
|
) { |
|
|
|
|
let chunk = trigger.entity(); |
|
|
|
|
let Ok((parent, pos)) = chunk_query.get(chunk) else { |
|
|
|
|
let chunk = trigger.target(); |
|
|
|
|
let Ok((child_of, pos)) = chunk_query.get(chunk) else { |
|
|
|
|
// See above.
|
|
|
|
|
return; |
|
|
|
|
}; |
|
|
|
|
let mut map = map_query.get_mut(parent.get()).unwrap(); |
|
|
|
|
let mut map = map_query.get_mut(child_of.parent()).unwrap(); |
|
|
|
|
map.remove(pos).expect("chunk not found"); |
|
|
|
|
println!("Chunk {chunk} @ {pos:?} removed from {}", parent.get()); |
|
|
|
|
println!("Chunk {chunk} @ {pos:?} removed from {}", child_of.parent()); |
|
|
|
|
} |
|
|
|
|