use super::{Mode, Player};
use crate::sim::{Event, Intent, Tuning};
impl Player {
pub(super) fn try_dive(&mut self, i: &Intent, t: &Tuning, ev: &mut Vec<Event>) {
if !t.dive
|| !i.dive_pressed
|| self.grounded
|| !matches!(self.mode, Mode::Normal | Mode::Dash { .. })
{
return;
}
self.mode = Mode::Dive { t: 0.0 };
self.vx = 0.0;
self.vy = 0.0;
self.stop_jump();
ev.push(Event::DiveStarted);
}
pub(super) fn dive_motion(&mut self, t: &Tuning) {
if let Mode::Dive { t: dt } = self.mode {
self.vx = 0.0;
self.vy = if dt < t.dive_windup {
0.0
} else {
t.dive_speed
};
}
}
}