player.rs (1636B)
1 use crate::actions::Actions; 2 use crate::loading::TextureAssets; 3 use crate::GameState; 4 use bevy::prelude::*; 5 6 pub struct PlayerPlugin; 7 8 #[derive(Component)] 9 pub struct Player; 10 11 /// This plugin handles player related stuff like movement 12 /// Player logic is only active during the State `GameState::Playing` 13 impl Plugin for PlayerPlugin { 14 fn build(&self, app: &mut App) { 15 app.add_system_set( 16 SystemSet::on_enter(GameState::Playing) 17 .with_system(spawn_player.system()) 18 .with_system(spawn_camera.system()), 19 ) 20 .add_system_set(SystemSet::on_update(GameState::Playing).with_system(move_player.system())); 21 } 22 } 23 24 fn spawn_camera(mut commands: Commands) { 25 commands.spawn_bundle(OrthographicCameraBundle::new_2d()); 26 } 27 28 fn spawn_player(mut commands: Commands, textures: Res<TextureAssets>) { 29 commands 30 .spawn_bundle(SpriteBundle { 31 texture: textures.texture_bevy.clone(), 32 transform: Transform::from_translation(Vec3::new(0., 0., 1.)), 33 ..Default::default() 34 }) 35 .insert(Player); 36 } 37 38 fn move_player( 39 time: Res<Time>, 40 actions: Res<Actions>, 41 mut player_query: Query<&mut Transform, With<Player>>, 42 ) { 43 if actions.player_movement.is_none() { 44 return; 45 } 46 let speed = 150.; 47 let movement = Vec3::new( 48 actions.player_movement.unwrap().x * speed * time.delta_seconds(), 49 actions.player_movement.unwrap().y * speed * time.delta_seconds(), 50 0., 51 ); 52 for mut player_transform in player_query.iter_mut() { 53 player_transform.translation += movement; 54 } 55 }