Movement systems for stepping and teleporting entities across the Suon world.
This crate owns intent-driven movement behaviors that update
[suon_position::position::Position] and record
[suon_position::previous_position::PreviousPosition] so downstream crates can
react consistently to movement.
Modules
- Step flow via [
prelude::Step], [prelude::StepIntent], and [prelude::StepPath] - Teleport flow via [
prelude::Teleport] and [prelude::TeleportIntent]
Examples
use bevy::prelude::*;
use suon_chunk::{Chunk, ChunkPlugin, chunks::Chunks};
use suon_movement::prelude::{MovementPlugins, StepIntent};
use suon_position::{direction::Direction, floor::Floor, position::Position};
let mut app = App::new();
app.add_plugins(MinimalPlugins);
app.add_plugins(ChunkPlugin);
app.add_plugins(MovementPlugins);
let chunk = app.world_mut().spawn(Chunk).id();
app.insert_resource(Chunks::from_iter([
(Position { x: 1, y: 1 }, chunk),
(Position { x: 2, y: 1 }, chunk),
]));
let entity = app.world_mut().spawn((Position { x: 1, y: 1 }, Floor { z: 0 })).id();
app.world_mut().trigger(StepIntent {
to: Direction::East,
entity,
});
app.update();
assert_eq!(
*app.world().get::<Position>(entity).unwrap(),
Position { x: 2, y: 1 }
);