mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Disable glider input until keys are pressed again after deploy
This commit is contained in:
parent
fe186fb44d
commit
270f89db6b
@ -22,6 +22,7 @@ pub struct Data {
|
||||
pub ori: Ori,
|
||||
last_vel: Vel,
|
||||
timer: f32,
|
||||
inputs_disabled: bool,
|
||||
}
|
||||
|
||||
impl Data {
|
||||
@ -40,13 +41,19 @@ impl Data {
|
||||
ori,
|
||||
last_vel: Vel::zero(),
|
||||
timer: 0.0,
|
||||
inputs_disabled: true,
|
||||
}
|
||||
}
|
||||
|
||||
fn tgt_dir(&self, data: &JoinData) -> Dir {
|
||||
let move_dir = if self.inputs_disabled {
|
||||
Vec2::zero()
|
||||
} else {
|
||||
data.inputs.move_dir
|
||||
};
|
||||
let look_ori = Ori::from(data.inputs.look_dir);
|
||||
look_ori
|
||||
.yawed_right(PI / 3.0 * look_ori.right().xy().dot(data.inputs.move_dir))
|
||||
.yawed_right(PI / 3.0 * look_ori.right().xy().dot(move_dir))
|
||||
.pitched_up(PI * 0.04)
|
||||
.pitched_down(
|
||||
data.inputs
|
||||
@ -54,7 +61,7 @@ impl Data {
|
||||
.xy()
|
||||
.try_normalized()
|
||||
.map_or(0.0, |ld| {
|
||||
PI * 0.1 * ld.dot(data.inputs.move_dir) * self.timer.min(PITCH_SLOW_TIME)
|
||||
PI * 0.1 * ld.dot(move_dir) * self.timer.min(PITCH_SLOW_TIME)
|
||||
/ PITCH_SLOW_TIME
|
||||
}),
|
||||
)
|
||||
@ -84,6 +91,8 @@ impl CharacterBehavior for Data {
|
||||
.map(|fluid| fluid.relative_flow(data.vel))
|
||||
.unwrap_or_default();
|
||||
|
||||
let inputs_disabled = self.inputs_disabled && !data.inputs.move_dir.is_approx_zero();
|
||||
|
||||
let ori = {
|
||||
let slerp_s = {
|
||||
let angle = self.ori.look_dir().angle_between(*data.inputs.look_dir);
|
||||
@ -178,6 +187,7 @@ impl CharacterBehavior for Data {
|
||||
ori,
|
||||
last_vel: *data.vel,
|
||||
timer: self.timer + data.dt.0,
|
||||
inputs_disabled,
|
||||
..*self
|
||||
});
|
||||
} else {
|
||||
|
@ -22,7 +22,7 @@ use common::{
|
||||
trade::TradeResult,
|
||||
util::{
|
||||
find_dist::{Cube, Cylinder, FindDist},
|
||||
Dir,
|
||||
Dir, Plane,
|
||||
},
|
||||
vol::ReadVol,
|
||||
};
|
||||
@ -762,19 +762,32 @@ impl PlayState for SessionState {
|
||||
.read_storage::<comp::PhysicsState>()
|
||||
.get(entity)?
|
||||
.in_fluid?;
|
||||
let wind = ecs
|
||||
.read_storage::<comp::Vel>()
|
||||
ecs.read_storage::<comp::Vel>()
|
||||
.get(entity)
|
||||
.map(|vel| -fluid.relative_flow(vel).0)?;
|
||||
Dir::from_unnormalized(wind)
|
||||
.map(|vel| fluid.relative_flow(vel).0)
|
||||
.map(|rel_flow| {
|
||||
if !self.free_look {
|
||||
Plane::from(Dir::new(self.scene.camera().right())).projection(
|
||||
rel_flow * self.inputs.look_dir.dot(rel_flow).signum(),
|
||||
)
|
||||
} else {
|
||||
-rel_flow
|
||||
}
|
||||
})
|
||||
.and_then(Dir::from_unnormalized)
|
||||
})
|
||||
{
|
||||
self.key_state.auto_walk = false;
|
||||
self.inputs.move_dir = Vec2::zero();
|
||||
self.inputs.look_dir = dir;
|
||||
} else if !self.free_look {
|
||||
self.walk_forward_dir = self.scene.camera().forward_xy();
|
||||
self.walk_right_dir = self.scene.camera().right_xy();
|
||||
self.inputs.look_dir = Dir::from_unnormalized(cam_dir + aim_dir_offset).unwrap();
|
||||
} else {
|
||||
self.key_state.auto_walk = self.auto_walk;
|
||||
if !self.free_look {
|
||||
self.walk_forward_dir = self.scene.camera().forward_xy();
|
||||
self.walk_right_dir = self.scene.camera().right_xy();
|
||||
self.inputs.look_dir =
|
||||
Dir::from_unnormalized(cam_dir + aim_dir_offset).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
// Get the current state of movement related inputs
|
||||
|
Loading…
Reference in New Issue
Block a user