aboutsummaryrefslogtreecommitdiff
path: root/azalea/src/pathfinder/mod.rs
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2023-08-25 02:34:31 -0500
committermat <git@matdoes.dev>2023-08-25 02:34:31 -0500
commitd5465cd28e43d48b3e913fdb1161eb907e4d80d0 (patch)
treeb0962ac1bd09b434c67296c038ef3b26245ce6d7 /azalea/src/pathfinder/mod.rs
parent9c31f8033f006d5f505ce97e359638d6c1136859 (diff)
downloadazalea-drasl-d5465cd28e43d48b3e913fdb1161eb907e4d80d0.tar.xz
add basic pathfinding test
Diffstat (limited to 'azalea/src/pathfinder/mod.rs')
-rw-r--r--azalea/src/pathfinder/mod.rs59
1 files changed, 57 insertions, 2 deletions
diff --git a/azalea/src/pathfinder/mod.rs b/azalea/src/pathfinder/mod.rs
index 58b59fd4..d59f0046 100644
--- a/azalea/src/pathfinder/mod.rs
+++ b/azalea/src/pathfinder/mod.rs
@@ -1,6 +1,7 @@
mod astar;
pub mod goals;
mod moves;
+pub mod simulation;
use crate::bot::{JumpEvent, LookAtEvent};
use crate::pathfinder::astar::a_star;
@@ -22,7 +23,7 @@ use azalea_entity::Local;
use azalea_entity::{Physics, Position};
use azalea_physics::PhysicsSet;
use azalea_world::{InstanceContainer, InstanceName};
-use bevy_app::{FixedUpdate, Update};
+use bevy_app::{FixedUpdate, PreUpdate, Update};
use bevy_ecs::prelude::Event;
use bevy_ecs::query::Changed;
use bevy_ecs::schedule::IntoSystemConfigs;
@@ -44,11 +45,11 @@ impl Plugin for PathfinderPlugin {
// (every 50 milliseconds).
tick_execute_path.before(PhysicsSet),
)
+ .add_systems(PreUpdate, add_default_pathfinder)
.add_systems(
Update,
(
goto_listener,
- add_default_pathfinder,
(handle_tasks, path_found_listener).chain(),
stop_pathfinding_on_instance_change,
),
@@ -342,3 +343,57 @@ impl Node {
}
}
}
+
+#[cfg(test)]
+mod tests {
+ use std::sync::Arc;
+
+ use azalea_core::{BlockPos, ChunkPos, Vec3};
+ use azalea_world::{Chunk, ChunkStorage, PartialChunkStorage};
+ use bevy_log::LogPlugin;
+
+ use super::{
+ goals::BlockPosGoal,
+ simulation::{SimulatedPlayerBundle, Simulation},
+ GotoEvent,
+ };
+
+ #[test]
+ fn test_simple_forward() {
+ let mut chunks = ChunkStorage::default();
+ let mut partial_chunks = PartialChunkStorage::default();
+ partial_chunks.set(
+ &ChunkPos { x: 0, z: 0 },
+ Some(Chunk::default()),
+ &mut chunks,
+ );
+ chunks.set_block_state(
+ &BlockPos::new(0, 70, 0),
+ azalea_registry::Block::Stone.into(),
+ );
+ chunks.set_block_state(
+ &BlockPos::new(0, 70, 1),
+ azalea_registry::Block::Stone.into(),
+ );
+ let player = SimulatedPlayerBundle::new(Vec3::new(0.5, 71., 0.5));
+ let mut simulation = Simulation::new(chunks, player);
+ simulation.app.add_plugins(LogPlugin {
+ level: bevy_log::Level::DEBUG,
+ filter: "".to_string(),
+ });
+
+ simulation.app.world.send_event(GotoEvent {
+ entity: simulation.entity,
+ goal: Arc::new(BlockPosGoal::from(BlockPos::new(0, 71, 1))),
+ });
+
+ for _ in 0..20 {
+ simulation.tick();
+ }
+
+ assert_eq!(
+ BlockPos::from(simulation.position()),
+ BlockPos::new(0, 71, 1)
+ );
+ }
+}