diff --git a/src/debug.rs b/src/debug.rs index 14014d6..98a3fb2 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -8,8 +8,11 @@ pub struct DebugSet; impl Plugin for DebugPlugin { fn build(&self, app: &mut App) { - app.configure_sets(Last, DebugSet.run_if(is_debug_enabled)) - .configure_sets(PostUpdate, DebugSet.run_if(is_debug_enabled)); + app.configure_sets(First, DebugSet.run_if(is_debug_enabled)) + .configure_sets(PreUpdate, DebugSet.run_if(is_debug_enabled)) + .configure_sets(Update, DebugSet.run_if(is_debug_enabled)) + .configure_sets(PostUpdate, DebugSet.run_if(is_debug_enabled)) + .configure_sets(Last, DebugSet.run_if(is_debug_enabled)); app.insert_resource(DebugMode::off()) .insert_resource(DebugDraw::default()); diff --git a/src/game.rs b/src/game.rs index ad13dcd..4a1842a 100644 --- a/src/game.rs +++ b/src/game.rs @@ -3,6 +3,7 @@ use bevy::prelude::*; use bevy_prototype_lyon::prelude::*; use bevy_rapier2d::prelude::*; +mod creature; mod item; mod prefab; mod systems; @@ -22,10 +23,18 @@ pub fn init(app: &mut App) { .register_type::() .register_type::() .register_type::() + .register_type::() .register_type::() .register_type::() .add_systems(Startup, systems::setup_2d) - .add_systems(Update, (systems::demo_2d, systems::work_select)) + .add_systems( + Update, + ( + systems::demo_2d, + systems::work_select, + systems::worker_movement, + ), + ) .add_systems(PostUpdate, item::update_item_sprite) .add_systems(Update, (systems::draw_job_targets).in_set(debug::DebugSet)); } diff --git a/src/game/creature.rs b/src/game/creature.rs new file mode 100644 index 0000000..73acc85 --- /dev/null +++ b/src/game/creature.rs @@ -0,0 +1,13 @@ +use bevy::prelude::*; + +#[derive(Copy, Clone, Debug, Component, Reflect)] +#[reflect(Component)] +pub struct Mover { + pub speed: f32, +} + +impl Default for Mover { + fn default() -> Self { + Self { speed: 100.0 } + } +} diff --git a/src/game/prefab.rs b/src/game/prefab.rs index 9561abe..ab1bad4 100644 --- a/src/game/prefab.rs +++ b/src/game/prefab.rs @@ -1,5 +1,6 @@ use bevy::{prelude::*, sprite::Anchor}; use bevy_rapier2d::prelude::*; +use creature::Mover; use item::{Inventory, Item, ItemSource, ItemStack, Stockpile}; use work::{WorkDuration, Worker}; @@ -17,8 +18,8 @@ use crate::util::SpriteLoader; SpriteLoader(|| SpriteLoader::from("sprites/glorb.png")), Worker, Inventory(|| Inventory::with_capacity(1)), - Velocity, - RigidBody(|| RigidBody::KinematicVelocityBased), + RigidBody(|| RigidBody::KinematicPositionBased), + Mover, )] pub struct Glorb; diff --git a/src/game/systems.rs b/src/game/systems.rs index 116a60f..2946519 100644 --- a/src/game/systems.rs +++ b/src/game/systems.rs @@ -1,5 +1,7 @@ +mod creature; mod demo; mod worker; +pub use creature::*; pub use demo::*; pub use worker::*; diff --git a/src/game/systems/creature.rs b/src/game/systems/creature.rs new file mode 100644 index 0000000..47cfcc8 --- /dev/null +++ b/src/game/systems/creature.rs @@ -0,0 +1,21 @@ +use bevy::prelude::*; + +use crate::game::{creature::Mover, work::Worker}; + +pub fn worker_movement( + mut worker_query: Query<(Entity, &Mover, &Worker, &mut Transform)>, + global_query: Query<&GlobalTransform>, + time: Res