bevy-game

A bevy game
git clone git://archive.git.mtrnord.blog/MTRNord/bevy-game.git
Log | Files | Refs | README | LICENSE

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 }