Fixed boost having ridiculous velocity.

This commit is contained in:
Sam 2021-03-26 16:11:25 -04:00
parent b4840ce48d
commit 6c2de7d70e
4 changed files with 22 additions and 2 deletions

View File

@ -1,4 +1,6 @@
Boost(
movement_duration: 0.05,
only_up: false,
speed: 400.0,
max_exit_velocity: 100.0,
)

View File

@ -1,4 +1,6 @@
Boost(
movement_duration: 0.05,
only_up: true,
speed: 250.0,
max_exit_velocity: 70.0,
)

View File

@ -95,6 +95,8 @@ pub enum CharacterAbility {
Boost {
movement_duration: f32,
only_up: bool,
speed: f32,
max_exit_velocity: f32,
},
DashMelee {
energy_cost: f32,
@ -371,9 +373,11 @@ impl CharacterAbility {
},
Boost {
ref mut movement_duration,
speed: ref mut boost_speed,
..
} => {
*movement_duration /= speed;
*boost_speed *= power;
},
DashMelee {
ref mut base_damage,
@ -1150,10 +1154,14 @@ impl From<(&CharacterAbility, AbilityInfo)> for CharacterState {
CharacterAbility::Boost {
movement_duration,
only_up,
speed,
max_exit_velocity,
} => CharacterState::Boost(boost::Data {
static_data: boost::StaticData {
movement_duration: Duration::from_secs_f32(*movement_duration),
only_up: *only_up,
speed: *speed,
max_exit_velocity: *max_exit_velocity,
ability_info,
},
timer: Duration::default(),

View File

@ -13,6 +13,8 @@ use std::time::Duration;
pub struct StaticData {
pub movement_duration: Duration,
pub only_up: bool,
pub speed: f32,
pub max_exit_velocity: f32,
pub ability_info: AbilityInfo,
}
@ -34,9 +36,9 @@ impl CharacterBehavior for Data {
if self.timer < self.static_data.movement_duration {
// Movement
if self.static_data.only_up {
update.vel.0.z += 500.0 * data.dt.0;
update.vel.0.z += self.static_data.speed * data.dt.0;
} else {
update.vel.0 += *data.inputs.look_dir * 500.0 * data.dt.0;
update.vel.0 += *data.inputs.look_dir * self.static_data.speed * data.dt.0;
}
update.character = CharacterState::Boost(Data {
timer: self
@ -50,6 +52,12 @@ impl CharacterBehavior for Data {
if input_is_pressed(data, self.static_data.ability_info.input) {
reset_state(self, data, &mut update);
} else {
update.vel.0 = update.vel.0.normalized()
* update
.vel
.0
.magnitude()
.min(self.static_data.max_exit_velocity);
update.character = CharacterState::Wielding;
}
}