From 691acd730d39190200afd55e51dd840298b6fd3c Mon Sep 17 00:00:00 2001 From: jiminycrick Date: Sat, 3 Oct 2020 19:06:31 -0700 Subject: [PATCH] Smoother leap and recovery leap handling --- common/src/states/repeater_ranged.rs | 78 +++++++++++++++++++--------- common/src/states/utils.rs | 2 +- 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/common/src/states/repeater_ranged.rs b/common/src/states/repeater_ranged.rs index a95f860c51..1c33566075 100644 --- a/common/src/states/repeater_ranged.rs +++ b/common/src/states/repeater_ranged.rs @@ -54,7 +54,14 @@ impl CharacterBehavior for Data { StageSection::Movement => { // Jumping if let Some(leap_strength) = self.static_data.leap { - update.vel.0 = Vec3::new(data.vel.0.x, data.vel.0.y, leap_strength); + update.vel.0 = Vec3::new( + data.vel.0.x, + data.vel.0.y, + leap_strength + * (1.0 + - self.timer.as_secs_f32() + / self.static_data.movement_duration.as_secs_f32()), + ); } if self.timer < self.static_data.movement_duration { // Do movement @@ -170,31 +177,52 @@ impl CharacterBehavior for Data { } }, StageSection::Recover => { - if !data.physics.on_ground { - // Lands - update.character = CharacterState::RepeaterRanged(Data { - static_data: self.static_data.clone(), - timer: self - .timer - .checked_add(Duration::from_secs_f32(data.dt.0)) - .unwrap_or_default(), - stage_section: self.stage_section, - reps_remaining: self.reps_remaining, - }); - } else if self.timer < self.static_data.recover_duration { - // Recovers from attack - update.character = CharacterState::RepeaterRanged(Data { - static_data: self.static_data.clone(), - timer: self - .timer - .checked_add(Duration::from_secs_f32(data.dt.0)) - .unwrap_or_default(), - stage_section: self.stage_section, - reps_remaining: self.reps_remaining, - }); + if self.static_data.leap == None { + if !data.physics.on_ground { + // Lands + update.character = CharacterState::RepeaterRanged(Data { + static_data: self.static_data.clone(), + timer: self + .timer + .checked_add(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + stage_section: self.stage_section, + reps_remaining: self.reps_remaining, + }); + } else if self.timer < self.static_data.recover_duration { + // Recovers from attack + update.character = CharacterState::RepeaterRanged(Data { + static_data: self.static_data.clone(), + timer: self + .timer + .checked_add(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + stage_section: self.stage_section, + reps_remaining: self.reps_remaining, + }); + } else { + // Done + update.character = CharacterState::Wielding; + } } else { - // Done - update.character = CharacterState::Wielding; + if data.physics.on_ground { + // Done + update.character = CharacterState::Wielding; + } else if self.timer < self.static_data.recover_duration { + // Recovers from attack + update.character = CharacterState::RepeaterRanged(Data { + static_data: self.static_data.clone(), + timer: self + .timer + .checked_add(Duration::from_secs_f32(data.dt.0)) + .unwrap_or_default(), + stage_section: self.stage_section, + reps_remaining: self.reps_remaining, + }); + } else { + // Done + update.character = CharacterState::Wielding; + } } }, _ => { diff --git a/common/src/states/utils.rs b/common/src/states/utils.rs index afaf37f25d..4578548d5d 100644 --- a/common/src/states/utils.rs +++ b/common/src/states/utils.rs @@ -107,7 +107,7 @@ pub fn forward_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32, pub fn handle_orientation(data: &JoinData, update: &mut StateUpdate, rate: f32) { // Set direction based on move direction - let ori_dir = if update.character.is_block() { + let ori_dir = if update.character.is_block() || update.character.is_attack() { data.inputs.look_dir.xy() } else if !data.inputs.move_dir.is_approx_zero() { data.inputs.move_dir