diff --git a/src/components/entity.rs b/src/components/entity.rs index 8badb90..afbb99b 100644 --- a/src/components/entity.rs +++ b/src/components/entity.rs @@ -16,4 +16,7 @@ pub struct Health{ pub struct Inventory{ pub items: Vec, pub max_size: u32, -} \ No newline at end of file +} + +#[derive(Component, Debug)] +pub struct Speed(pub f32); diff --git a/src/main.rs b/src/main.rs index 25caef2..35e4d58 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,10 +4,10 @@ pub mod systems; fn main() { App::new() - .insert_resource(ClearColor(Color::srgb(1.0, 1.0, 1.0))) .add_plugins(DefaultPlugins) - .add_systems(Startup, (setup, systems::player::spawn_player)) - .add_systems(Update, systems::debug::debug_player_components) + .insert_resource(Time::::from_hz(60.0)) + .add_systems(Startup, (setup, systems::player::spawn_player, systems::wolf::spawn_wolf)) + .add_systems(FixedUpdate, (systems::player::camera_lock, systems::player::player_movement)) .run(); } diff --git a/src/systems/debug.rs b/src/systems/debug.rs index 9d51a63..e9b40cb 100644 --- a/src/systems/debug.rs +++ b/src/systems/debug.rs @@ -1,7 +1,7 @@ use bevy::prelude::*; use crate::components::entity::{Level, Xp, Health, Inventory}; -pub fn debug_player_components( +pub fn debug_entity_components( query: Query<(Entity, &Level, &Xp, &Health, &Inventory)>, ) { for (entity, level, xp, health, inv) in query.iter() { diff --git a/src/systems/mod.rs b/src/systems/mod.rs index 323557c..8ed4674 100644 --- a/src/systems/mod.rs +++ b/src/systems/mod.rs @@ -1,2 +1,3 @@ pub mod player; -pub mod debug; \ No newline at end of file +pub mod debug; +pub mod wolf; \ No newline at end of file diff --git a/src/systems/player.rs b/src/systems/player.rs index 95eb88e..e2fda84 100644 --- a/src/systems/player.rs +++ b/src/systems/player.rs @@ -1,5 +1,8 @@ use bevy::prelude::*; -use crate::components::entity::{Level, Xp, Health, Inventory}; +use crate::components::entity::{Level, Xp, Health, Inventory, Speed}; + +#[derive(Component)] +pub struct Player; pub fn spawn_player(mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>) { let player_mesh = meshes.add(Capsule2d::new(25.0, 50.0)); @@ -11,5 +14,39 @@ pub fn spawn_player(mut commands: Commands, mut meshes: ResMut>, mu Level(1), Xp(0), Health{current: 10, max: 10}, - Inventory {items: Vec::new(), max_size: 10},)); + Inventory {items: Vec::new(), max_size: 10}, + Speed(100.0), + Player,)); +} + +pub fn camera_lock( + camera_query: Single<(&Camera, &mut Transform), + Without>, player_query: Single<(&Player, &Transform)> ) { + let (_, mut camera_pos) = camera_query.into_inner(); + let (_, player_pos) = player_query.into_inner(); + camera_pos.translation = player_pos.translation; +} + +pub fn player_movement( + keyboard_input: Res>, + time: Res