suon_movement 0.1.0

Entity movement and grid navigation for the Suon MMORPG framework
Documentation

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 }
);