generated from 2ndbeam/bevy-template
feat: Player, assets and basic movement
This commit is contained in:
parent
975e065fde
commit
10afe6fd08
22 changed files with 87 additions and 55 deletions
1
src/layout.rs
Normal file
1
src/layout.rs
Normal file
|
|
@ -0,0 +1 @@
|
|||
|
||||
34
src/lib.rs
Normal file
34
src/lib.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
pub mod player;
|
||||
pub mod layout;
|
||||
|
||||
use bevy::prelude::*;
|
||||
|
||||
pub struct ExpeditionPlugin;
|
||||
|
||||
fn camera_bundle() -> impl Bundle {
|
||||
(
|
||||
Camera2d,
|
||||
Camera {
|
||||
clear_color: ClearColorConfig::Custom(Color::hsl(0.02, 0.67, 0.65)),
|
||||
..default()
|
||||
},
|
||||
Projection::Orthographic(OrthographicProjection {
|
||||
scaling_mode: bevy::camera::ScalingMode::FixedVertical {
|
||||
viewport_height: 384.,
|
||||
},
|
||||
scale: 1.,
|
||||
..OrthographicProjection::default_2d()
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
fn setup_global(mut commands: Commands) {
|
||||
commands.spawn(camera_bundle());
|
||||
}
|
||||
|
||||
impl Plugin for ExpeditionPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(Startup, (player::setup_player, setup_global))
|
||||
.add_systems(Update, player::handle_input);
|
||||
}
|
||||
}
|
||||
50
src/main.rs
50
src/main.rs
|
|
@ -1,54 +1,10 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Component)]
|
||||
struct Person;
|
||||
|
||||
#[derive(Component)]
|
||||
struct Name(String);
|
||||
|
||||
#[derive(Resource)]
|
||||
struct GreetTimer(Timer);
|
||||
|
||||
#[derive(Resource)]
|
||||
struct UpdateTimer(Timer);
|
||||
|
||||
pub struct HelloPlugin;
|
||||
|
||||
impl Plugin for HelloPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.insert_resource(GreetTimer(Timer::from_seconds(2.0, TimerMode::Repeating)));
|
||||
app.insert_resource(UpdateTimer(Timer::from_seconds(10.0, TimerMode::Once)));
|
||||
app.add_systems(Startup, add_people);
|
||||
app.add_systems(Update, (update_people, greet_people).chain());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn add_people(mut commands: Commands) {
|
||||
commands.spawn((Person, Name("Alkesey Mirnekov".to_string())));
|
||||
commands.spawn((Person, Name("Alkesey Mirnekov 2".to_string())));
|
||||
commands.spawn((Person, Name("Alkesey Mirnekov 3".to_string())));
|
||||
}
|
||||
|
||||
fn greet_people(time: Res<Time>, mut timer: ResMut<GreetTimer>, query: Query<&Name, With<Person>>) {
|
||||
if timer.0.tick(time.delta()).just_finished() {
|
||||
for name in &query {
|
||||
println!("hello {}!", name.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn update_people(time: Res<Time>, mut timer: ResMut<UpdateTimer>, mut query: Query<&mut Name, With<Person>>) {
|
||||
if timer.0.tick(time.delta()).just_finished() {
|
||||
for mut name in &mut query {
|
||||
name.0 = format!("{} II", name.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
use expedition_demo::ExpeditionPlugin;
|
||||
|
||||
fn main() {
|
||||
App::new()
|
||||
.add_plugins(DefaultPlugins)
|
||||
.add_plugins(HelloPlugin)
|
||||
.add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))
|
||||
.add_plugins(ExpeditionPlugin)
|
||||
.run();
|
||||
}
|
||||
|
|
|
|||
41
src/player.rs
Normal file
41
src/player.rs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Component)]
|
||||
pub struct Player {
|
||||
// px/s
|
||||
speed: f32,
|
||||
}
|
||||
|
||||
fn player_bundle(asset_server: &Res<AssetServer>) -> impl Bundle {
|
||||
let image = asset_server.load("sprites/player/player.png");
|
||||
(
|
||||
Player {
|
||||
speed: 51.2,
|
||||
},
|
||||
Sprite::from_image(image),
|
||||
Transform::from_xyz(0f32, 0f32, 1f32),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn setup_player(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||
commands.spawn(player_bundle(&asset_server));
|
||||
}
|
||||
|
||||
pub fn handle_input(
|
||||
key_input: Res<ButtonInput<KeyCode>>,
|
||||
time: Res<Time>,
|
||||
player: Query<(&Player, &mut Transform, &mut Sprite)>,
|
||||
) {
|
||||
let exclusive_pressed = key_input.pressed(KeyCode::KeyA) != key_input.pressed(KeyCode::KeyD);
|
||||
let direction = if !exclusive_pressed { 0f32 }
|
||||
else if key_input.pressed(KeyCode::KeyA) { -1f32 }
|
||||
else if key_input.pressed(KeyCode::KeyD) { 1f32 }
|
||||
else { unreachable!() };
|
||||
|
||||
for (Player {speed}, mut transform, mut sprite) in player {
|
||||
transform.translation.x += direction * speed * time.delta_secs();
|
||||
if direction != 0f32 {
|
||||
sprite.flip_x = direction < 0f32;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue