diff --git a/src/action.rs b/src/action.rs index eac4151..3819d67 100644 --- a/src/action.rs +++ b/src/action.rs @@ -61,7 +61,7 @@ fn gravity( fn falling_cat( mut bike_query: Query<(&Transform, &mut ExternalForce, &mut CyberBikeControl)>, - diagnostics: Res, + _diagnostics: Res, settings: Res, ) { let (xform, mut forces, mut control_vars) = bike_query.single_mut(); @@ -82,13 +82,14 @@ fn falling_cat( let mag = (settings.kp * error) + (settings.kws * weighted_sum) + (settings.kd * derivative); - if let Some(count) = diagnostics + #[cfg(feature = "inspector")] + if let Some(count) = _diagnostics .get(FrameTimeDiagnosticsPlugin::FRAME_COUNT) .and_then(|d| d.smoothed()) .map(|x| x as u64) { if count % 30 == 0 { - dbg!(&control_vars, mag, cos); + dbg!(&control_vars, mag, cos, derivative); } } diff --git a/src/bike.rs b/src/bike.rs index 9237fd3..7425e57 100644 --- a/src/bike.rs +++ b/src/bike.rs @@ -1,6 +1,6 @@ use std::fmt::Debug; -use bevy::prelude::{shape::Capsule as Tire, *}; +use bevy::prelude::{shape::UVSphere as Tire, *}; use bevy_rapier3d::{ geometry::Group, prelude::{ @@ -54,12 +54,12 @@ impl Default for WheelConfig { fn default() -> Self { Self { front_forward: 0.9, - front_stance: 1.2, + front_stance: 0.65, rear_back: 1.1, - y: -1.0, - limits: [0.1, 1.0], - stiffness: 10.0, - damping: 0.7, + y: -1.5, + limits: [-1.0, 1.0], + stiffness: 20.0, + damping: 1.0, radius: 0.3, } } @@ -140,11 +140,27 @@ fn spawn_cyberbike( .insert(CyberBikeControl::default()) .id(); - //return; - re_tire(&mut commands, &xform, bike, &wheel_conf, &mut meshterials); + spawn_tires(&mut commands, &xform, bike, &wheel_conf, &mut meshterials); } fn re_tire( + mut commands: Commands, + wheel_conf: ResMut, + mut meshterials: Meshterial, + bquery: Query<(Entity, &Transform), With>, + wheels: Query>, +) { + // we fuck with values in the egui inspector + let (bike, xform) = bquery.single(); + if wheel_conf.is_changed() { + for wheel in wheels.iter() { + commands.entity(wheel).despawn_recursive(); + } + spawn_tires(&mut commands, xform, bike, &wheel_conf, &mut meshterials); + } +} + +fn spawn_tires( commands: &mut Commands, xform: &Transform, bike: Entity, @@ -164,8 +180,6 @@ fn re_tire( let tire = Tire { radius: wheel_rad, - rings: 1, - depth: 0.2, ..Default::default() }; let material = StandardMaterial { @@ -191,7 +205,7 @@ fn re_tire( // left front { let wheel_x = -conf.front_stance; - let wheel_z = conf.front_forward; + let wheel_z = -conf.front_forward; let offset = Vec3::new(wheel_x, wheel_y, wheel_z); wheel_poses.push(offset); } @@ -199,15 +213,15 @@ fn re_tire( // right front { let wheel_x = conf.front_stance; - let wheel_z = conf.front_forward; + let wheel_z = -conf.front_forward; let offset = Vec3::new(wheel_x, wheel_y, wheel_z); wheel_poses.push(offset); } // rear { - let wheel_x = -conf.front_stance; - let wheel_z = conf.front_forward; + let wheel_x = 0.0; + let wheel_z = conf.rear_back; let offset = Vec3::new(wheel_x, wheel_y, wheel_z); wheel_poses.push(offset); } @@ -224,7 +238,7 @@ fn re_tire( let damping = 0.3; let prismatic = PrismaticJointBuilder::new(Vec3::Y) - .local_anchor2(offset) + .local_anchor1(offset) .limits(limits) .motor_position(0.0, stiffness, damping); let joint = ImpulseJoint::new(bike, prismatic); @@ -267,6 +281,7 @@ impl Plugin for CyberBikePlugin { fn build(&self, app: &mut App) { app.insert_resource(WheelConfig::default()) .register_type::() - .add_startup_system_to_stage(StartupStage::PostStartup, spawn_cyberbike); + .add_startup_system_to_stage(StartupStage::PostStartup, spawn_cyberbike) + .add_system(re_tire); } } diff --git a/src/input.rs b/src/input.rs index a0a8014..97346e5 100644 --- a/src/input.rs +++ b/src/input.rs @@ -35,6 +35,13 @@ fn update_debug_cam(mut offset: ResMut, mut keys: ResMut continue, } } + + if keys.get_just_released().len() > 0 { + keys.reset_all(); + if shifted { + keys.press(KeyCode::LShift); + } + } } fn update_input(mut events: EventReader, mut istate: ResMut) { diff --git a/src/ui.rs b/src/ui.rs index 8b82213..507dbe1 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -2,6 +2,7 @@ use bevy::prelude::{ AlignSelf, App, AssetServer, Color, Commands, Component, Plugin, Query, Res, Style, Text, TextBundle, TextSection, TextStyle, With, }; +#[cfg(feature = "inspector")] use bevy_inspector_egui::quick::WorldInspectorPlugin; use bevy_rapier3d::prelude::Velocity; @@ -50,8 +51,9 @@ pub struct CyberUIPlugin; impl Plugin for CyberUIPlugin { fn build(&self, app: &mut App) { - app.add_plugin(WorldInspectorPlugin) - .add_startup_system(setup_ui) - .add_system(update_ui); + #[cfg(feature = "inspector")] + app.add_plugin(WorldInspectorPlugin); + + app.add_startup_system(setup_ui).add_system(update_ui); } }