inputs but no steering
This commit is contained in:
parent
ecfa9b5864
commit
2b58ac82c4
3 changed files with 7 additions and 19 deletions
|
@ -36,7 +36,7 @@ pub struct MovementSettings {
|
|||
impl Default for MovementSettings {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
accel: 20.0,
|
||||
accel: 2000.0,
|
||||
gravity: 9.8,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ impl Plugin for CyberActionPlugin {
|
|||
.insert_resource(SubstepCount(12))
|
||||
.add_systems(
|
||||
FixedUpdate,
|
||||
(set_gravity, calculate_lean, apply_lean).chain(),
|
||||
(set_gravity, calculate_lean, apply_lean, apply_inputs).chain(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,35 +111,23 @@ pub(super) fn apply_inputs(
|
|||
settings: Res<MovementSettings>,
|
||||
input: Res<InputState>,
|
||||
time: Res<Time>,
|
||||
fork: Query<(&FixedJoint, &CyberFork), With<CyberSteering>>,
|
||||
mut hub: Query<(RigidBodyQuery, &Transform), With<CyberSteering>>,
|
||||
mut braking_query: Query<(&Transform, &mut ExternalTorque), With<CyberWheel>>,
|
||||
mut wheels: Query<(&Transform, &mut ExternalTorque), With<CyberWheel>>,
|
||||
mut body_query: Query<RigidBodyQuery, (With<CyberBikeBody>, Without<CyberSteering>)>,
|
||||
) {
|
||||
let Ok(mut bike) = body_query.get_single_mut() else {
|
||||
let Ok(mut _bike) = body_query.get_single_mut() else {
|
||||
bevy::log::debug!("no bike body found");
|
||||
return;
|
||||
};
|
||||
let dt = time.delta_seconds();
|
||||
|
||||
// brake + thrust
|
||||
for (xform, mut motor) in braking_query.iter_mut() {
|
||||
for (xform, mut torque) in wheels.iter_mut() {
|
||||
let factor = input.throttle * settings.accel;
|
||||
|
||||
let target = dt * factor;
|
||||
let torque = target * *xform.right();
|
||||
motor.apply_torque(torque);
|
||||
let tork = target * *xform.left();
|
||||
torque.apply_torque(tork);
|
||||
}
|
||||
|
||||
// steering
|
||||
let _angle = yaw_to_angle(input.yaw);
|
||||
let (mut axle, xform) = hub.single_mut();
|
||||
|
||||
let cur_rot = xform.rotation;
|
||||
let (fork, CyberFork(axis)) = fork.single();
|
||||
let new = Quat::from_axis_angle(*axis, _angle);
|
||||
let diff = (new - cur_rot).to_scaled_axis();
|
||||
let mut lagrange = 1.0;
|
||||
|
||||
fork.align_orientation(&mut axle, &mut bike, diff, &mut lagrange, 0.0, dt);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue