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 {
|
||||
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());
|
||||
|
|
|
|||
11
src/game.rs
11
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::<item::Inventory>()
|
||||
.register_type::<work::WorkDuration>()
|
||||
.register_type::<work::Worker>()
|
||||
.register_type::<creature::Mover>()
|
||||
.register_type::<prefab::Glorb>()
|
||||
.register_type::<prefab::Tree>()
|
||||
.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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_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;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
mod creature;
|
||||
mod demo;
|
||||
mod worker;
|
||||
|
||||
pub use creature::*;
|
||||
pub use demo::*;
|
||||
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