From f1ca432aaf10ca0d16416921a5eefa2f1312f2c7 Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Sat, 24 Jul 2021 11:36:50 +0200 Subject: [PATCH] smooth animation --- .cargo/{config.toml.txt => config.toml} | 0 Cargo.lock | 30 +++-- Cargo.toml | 4 +- src/main.rs | 141 +++--------------------- 4 files changed, 39 insertions(+), 136 deletions(-) rename .cargo/{config.toml.txt => config.toml} (100%) diff --git a/.cargo/config.toml.txt b/.cargo/config.toml similarity index 100% rename from .cargo/config.toml.txt rename to .cargo/config.toml diff --git a/Cargo.lock b/Cargo.lock index ab6d390..2fc7399 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -196,6 +196,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6b14f8ba7c373fdf7bd27547bb95f2849b2569bf02bbf3d19ca54e9d692de4f" dependencies = [ + "bevy_dylib", "bevy_internal", "syn", ] @@ -223,9 +224,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "426b3557161b34230e7ec04bdc48664509985ca7a6b874491f238eadd1e7cab0" +checksum = "bd798cfbed1fcd406c9b3c978a8cb0a278aa03c4c8abd6edf460ee7cad0987e0" dependencies = [ "anyhow", "bevy_app", @@ -308,6 +309,15 @@ dependencies = [ "parking_lot", ] +[[package]] +name = "bevy_dylib" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa62c7c03470969539a07337bf8c5694c0b952678fd081d68b6331842134b85" +dependencies = [ + "bevy_internal", +] + [[package]] name = "bevy_dynamic_plugin" version = "0.5.0" @@ -785,9 +795,9 @@ checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" [[package]] name = "bytemuck" -version = "1.7.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9966d2ab714d0f785dbac0a0396251a35280aeb42413281617d0209ab4898435" +checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" [[package]] name = "byteorder" @@ -1333,15 +1343,15 @@ checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" [[package]] name = "futures-core" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" +checksum = "af51b1b4a7fdff033703db39de8802c673eb91855f2e0d47dcf3bf2c0ef01f99" [[package]] name = "futures-io" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" +checksum = "0b0e06c393068f3a6ef246c75cdca793d6a46347e75286933e5e75fd2fd11582" [[package]] name = "futures-lite" @@ -2547,9 +2557,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" dependencies = [ "unicode-xid", ] diff --git a/Cargo.toml b/Cargo.toml index c9d3859..7ab9e06 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,5 +6,5 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -#bevy = { version = "0.5.0", features = ["dynamic"] } -bevy = { version = "0.5.0" } \ No newline at end of file +bevy = { version = "0.5.0", features = ["dynamic"] } +# bevy = { version = "0.5.0" } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 66275da..37c1d56 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,21 +8,15 @@ fn main() { .insert_resource(WindowDescriptor { title: "My Little Zombie".to_string(), width: 1920., - height: 1080., + height: 1081., ..Default::default() }) .add_startup_system(setup.system()) - // .add_system(player_movement.system()) .add_system_set( SystemSet::new() .with_run_criteria(FixedTimestep::step(1.0 / 60.0)) .with_system(player_movement.system()), ) - // .add_system_set( - // SystemSet::new() - // .with_run_criteria(FixedTimestep::step(1.0 / 10.0)) - // .with_system(player_animation.system()), - // ) .add_plugins(DefaultPlugins) .run(); } @@ -47,7 +41,7 @@ fn setup( transform: Transform { translation: Vec3::new(0., bottom / 2.0, 10.0), - // scale: Vec3::new(1., 1., 1.0), + scale: Vec3::new(1., 1., 1.0), ..Default::default() }, ..Default::default() @@ -76,133 +70,32 @@ impl Default for Player { // run each frame (60Hz) fn player_movement( - keyboard_input: Res<Input<KeyCode>>, mut query: Query<(&mut Player, &mut Transform, &mut TextureAtlasSprite)>, + keyboard_input: Res<Input<KeyCode>>, ) { if let Ok((mut player, mut transform, mut sprite)) = query.single_mut() { - let (index, state, dir) = if keyboard_input.pressed(KeyCode::Left) { + let (index, state, dir) = if keyboard_input.pressed(KeyCode::Right) { match player.state { - State::Left => ((player.index + 1) % 8, State::Left, -2.), - _ => (1, State::Left, 1.), + // already walking + State::Right => { + let index = (player.index + 1) % 32; + sprite.index = (4 * 9) + index / 4; + (index, State::Right, 2.) + } + // starting walking + _ => { + let index = 3 * 4; + sprite.index = (4 * 9) + index / 4; + (index, State::Right, 2.) + } } } else { + sprite.index = 0; (0, State::Idle, 0.) }; player.state = state; player.index = index; - sprite.index = if index == 0 { 0 } else { 4 * 9 - 1 + index }; transform.translation.x += dir; } } - -// fn player_movement(mut head_positions: Query<(&SnakeHead, &mut Transform)>) { -// for (_head, mut transform) in head_positions.iter_mut() { -// transform.translation.y += 2.; -// } -// } - -// pub struct PlayerPlugin; - -// impl Plugin for PlayerPlugin { -// fn build(&self, app: &mut AppBuilder) { -// app.insert_resource(PlayerState::default()) -// .add_startup_stage( -// "game_setup_actors", -// SystemStage::single(player_spawn.system()), -// ) -// .add_system(player_movement.system()) -// .add_system(player_fire.system()) -// .add_system(laser_movement.system()) -// .add_system_set( -// SystemSet::new() -// .with_run_criteria(FixedTimestep::step(0.5)) -// .with_system(player_spawn.system()), -// ); -// } -// } - -// fn player_spawn( -// mut commands: Commands, -// materials: Res<Materials>, -// win_size: Res<WinSize>, -// time: Res<Time>, -// mut player_state: ResMut<PlayerState>, -// ) { -// let now = time.seconds_since_startup(); -// let last_shot = player_state.last_shot; - -// // spawn a sprite -// if !player_state.on && (last_shot == 0. || now > last_shot + PLAYER_RESPAWN_DELAY) { -// let bottom = -win_size.h / 2.; -// commands -// .spawn_bundle(SpriteBundle { -// material: materials.player.clone(), -// transform: Transform { -// translation: Vec3::new(0., bottom + 75. / 4. + 5., 10.), -// scale: Vec3::new(SCALE, SCALE, 1.), -// ..Default::default() -// }, -// ..Default::default() -// }) -// .insert(Player) -// .insert(PlayerReadyFire(true)) -// .insert(Speed::default()); - -// player_state.spawned(); -// } -// } - -// fn player_fire( -// mut commands: Commands, -// kb: Res<Input<KeyCode>>, -// materials: Res<Materials>, -// mut query: Query<(&Transform, &mut PlayerReadyFire), With<Player>>, -// ) { -// if let Ok((player_tf, mut ready_fire)) = query.single_mut() { -// if ready_fire.0 && kb.pressed(KeyCode::Space) { -// let x = player_tf.translation.x; -// let y = player_tf.translation.y; - -// let mut spawn_lasers = |x_offset: f32| { -// commands -// .spawn_bundle(SpriteBundle { -// material: materials.player_laser.clone(), -// transform: Transform { -// translation: Vec3::new(x + x_offset, y + 15., 0.), -// scale: Vec3::new(SCALE, SCALE, 1.), -// ..Default::default() -// }, -// ..Default::default() -// }) -// .insert(Laser) -// .insert(FromPlayer) -// .insert(Speed::default()); -// }; - -// let x_offset = 144.0 / 4.0 - 5.0; -// spawn_lasers(x_offset); -// spawn_lasers(-x_offset); - -// ready_fire.0 = false; -// } - -// if kb.just_released(KeyCode::Space) { -// ready_fire.0 = true; -// } -// } -// } - -// fn laser_movement( -// mut commands: Commands, -// win_size: Res<WinSize>, -// mut query: Query<(Entity, &Speed, &mut Transform), (With<Laser>, With<FromPlayer>)>, -// ) { -// for (laser_entity, speed, mut laser_tf) in query.iter_mut() { -// let translation = &mut laser_tf.translation; -// translation.y += speed.0 * TIME_STEP; -// if translation.y > win_size.h { -// commands.entity(laser_entity).despawn(); -// } -// } -// } -- GitLab