generated from hheik/bevy-template
Basic movement system for workers
parent
beaab7e97f
commit
bf50c19ba0
|
|
@ -8,8 +8,11 @@ pub struct DebugSet;
|
||||||
|
|
||||||
impl Plugin for DebugPlugin {
|
impl Plugin for DebugPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.configure_sets(Last, DebugSet.run_if(is_debug_enabled))
|
app.configure_sets(First, DebugSet.run_if(is_debug_enabled))
|
||||||
.configure_sets(PostUpdate, 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())
|
app.insert_resource(DebugMode::off())
|
||||||
.insert_resource(DebugDraw::default());
|
.insert_resource(DebugDraw::default());
|
||||||
|
|
|
||||||
11
src/game.rs
11
src/game.rs
|
|
@ -3,6 +3,7 @@ use bevy::prelude::*;
|
||||||
use bevy_prototype_lyon::prelude::*;
|
use bevy_prototype_lyon::prelude::*;
|
||||||
use bevy_rapier2d::prelude::*;
|
use bevy_rapier2d::prelude::*;
|
||||||
|
|
||||||
|
mod creature;
|
||||||
mod item;
|
mod item;
|
||||||
mod prefab;
|
mod prefab;
|
||||||
mod systems;
|
mod systems;
|
||||||
|
|
@ -22,10 +23,18 @@ pub fn init(app: &mut App) {
|
||||||
.register_type::<item::Inventory>()
|
.register_type::<item::Inventory>()
|
||||||
.register_type::<work::WorkDuration>()
|
.register_type::<work::WorkDuration>()
|
||||||
.register_type::<work::Worker>()
|
.register_type::<work::Worker>()
|
||||||
|
.register_type::<creature::Mover>()
|
||||||
.register_type::<prefab::Glorb>()
|
.register_type::<prefab::Glorb>()
|
||||||
.register_type::<prefab::Tree>()
|
.register_type::<prefab::Tree>()
|
||||||
.add_systems(Startup, systems::setup_2d)
|
.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(PostUpdate, item::update_item_sprite)
|
||||||
.add_systems(Update, (systems::draw_job_targets).in_set(debug::DebugSet));
|
.add_systems(Update, (systems::draw_job_targets).in_set(debug::DebugSet));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
use bevy::{prelude::*, sprite::Anchor};
|
use bevy::{prelude::*, sprite::Anchor};
|
||||||
use bevy_rapier2d::prelude::*;
|
use bevy_rapier2d::prelude::*;
|
||||||
|
use creature::Mover;
|
||||||
use item::{Inventory, Item, ItemSource, ItemStack, Stockpile};
|
use item::{Inventory, Item, ItemSource, ItemStack, Stockpile};
|
||||||
use work::{WorkDuration, Worker};
|
use work::{WorkDuration, Worker};
|
||||||
|
|
||||||
|
|
@ -17,8 +18,8 @@ use crate::util::SpriteLoader;
|
||||||
SpriteLoader(|| SpriteLoader::from("sprites/glorb.png")),
|
SpriteLoader(|| SpriteLoader::from("sprites/glorb.png")),
|
||||||
Worker,
|
Worker,
|
||||||
Inventory(|| Inventory::with_capacity(1)),
|
Inventory(|| Inventory::with_capacity(1)),
|
||||||
Velocity,
|
RigidBody(|| RigidBody::KinematicPositionBased),
|
||||||
RigidBody(|| RigidBody::KinematicVelocityBased),
|
Mover,
|
||||||
)]
|
)]
|
||||||
pub struct Glorb;
|
pub struct Glorb;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
mod creature;
|
||||||
mod demo;
|
mod demo;
|
||||||
mod worker;
|
mod worker;
|
||||||
|
|
||||||
|
pub use creature::*;
|
||||||
pub use demo::*;
|
pub use demo::*;
|
||||||
pub use worker::*;
|
pub use worker::*;
|
||||||
|
|
|
||||||
|
|
@ -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<Time>,
|
||||||
|
) {
|
||||||
|
for (entity, mover, worker, mut transform) in worker_query.iter_mut() {
|
||||||
|
let Some(task) = worker.0 else { continue };
|
||||||
|
let (Ok(from), Ok(to)) = (global_query.get(entity), global_query.get(task.target)) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
let diff = (to.translation() - from.translation()).xy();
|
||||||
|
let dist = diff.length().max(0.);
|
||||||
|
let dir = diff.normalize_or_zero();
|
||||||
|
let movement = dir.extend(0.) * mover.speed * time.delta_secs();
|
||||||
|
transform.translation += movement.clamp_length_max(dist);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue