From 6b9a8799275ddf0adcca5517e24da4c284ca6989 Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Sun, 14 Jul 2024 22:52:24 -0700 Subject: [PATCH] checkpoint, still not compiling --- src/action/mod.rs | 22 ++---- src/action/systems.rs | 164 +++++++++-------------------------------- src/bike/body.rs | 3 + src/bike/components.rs | 4 +- src/bike/wheels.rs | 83 ++++++++++----------- src/glamor.rs | 35 ++++----- src/input.rs | 22 +++--- src/planet.rs | 53 ++++++------- src/ui.rs | 20 +++-- 9 files changed, 151 insertions(+), 255 deletions(-) diff --git a/src/action/mod.rs b/src/action/mod.rs index 1fb495a..233d6a2 100644 --- a/src/action/mod.rs +++ b/src/action/mod.rs @@ -1,6 +1,6 @@ use avian3d::prelude::*; use bevy::{ - app::Startup, + app::{Startup, Update}, diagnostic::FrameTimeDiagnosticsPlugin, ecs::reflect::ReflectResource, prelude::{App, IntoSystemConfigs, Plugin, Resource}, @@ -29,20 +29,14 @@ impl Plugin for CyberActionPlugin { .init_resource::() .register_type::() .register_type::() - .add_plugins(PhysicsPlugins::default()) - .add_systems(Startup, timestep_setup) - .add_plugins(FrameTimeDiagnosticsPlugin::default()) + .add_plugins(( + PhysicsPlugins::default(), + FrameTimeDiagnosticsPlugin::default(), + )) + .insert_resource(SubstepCount(12)) .add_systems( - ( - gravity, - cyber_lean, - falling_cat, - input_forces, - drag, - tunnel_out, - surface_fix, - ) - .chain(), + Update, + (gravity, cyber_lean, falling_cat, input_forces).chain(), ); } } diff --git a/src/action/systems.rs b/src/action/systems.rs index 61b4444..e1d9048 100644 --- a/src/action/systems.rs +++ b/src/action/systems.rs @@ -1,6 +1,8 @@ use std::f32::consts::{FRAC_PI_3, FRAC_PI_4}; -use avian3d::prelude::*; +use avian3d::{ + dynamics::solver::xpbd::AngularConstraint, parry::mass_properties::MassProperties, prelude::*, +}; use bevy::prelude::{ Commands, Entity, Quat, Query, Res, ResMut, Time, Transform, Vec3, With, Without, }; @@ -33,46 +35,28 @@ fn rotate_point(pt: &Vec3, rot: &Quat) -> Vec3 { -Vec3::from_array([rot_qpt.x, rot_qpt.y, rot_qpt.z]) } -pub(super) fn timestep_setup(mut config: ResMut) { - let ts = TimestepMode::Fixed { - dt: 1.0 / 60.0, - substeps: 2, - }; - config.timestep_mode = ts; -} - /// The gravity vector points from the cyberbike to the center of the planet. pub(super) fn gravity( mut query: Query<(&Transform, &mut ExternalForce), With>, settings: Res, - mut rapier_config: ResMut, + mut gravity: ResMut, #[cfg(feature = "inspector")] mut debug_instant: ResMut, ) { let (xform, mut forces) = query.single_mut(); - - #[cfg(feature = "inspectorb")] - { - if debug_instant.elapsed().as_millis() > 6000 { - dbg!(&forces); - debug_instant.reset(); - } - } - - rapier_config.gravity = xform.translation.normalize() * -settings.gravity; - forces.force = Vec3::ZERO; - forces.torque = Vec3::ZERO; + *gravity = Gravity(xform.translation.normalize() * -settings.gravity); + forces.clear(); } /// The desired lean angle, given steering input and speed. pub(super) fn cyber_lean( - bike_state: Query<(&Velocity, &Transform), With>, + bike_state: Query<(&LinearVelocity, &Transform), With>, wheels: Query<&Transform, With>, input: Res, gravity_settings: Res, mut lean: ResMut, ) { let (velocity, xform) = bike_state.single(); - let vel = velocity.linvel.dot(xform.forward()); + let vel = velocity.dot(*xform.forward()); let v_squared = vel.powi(2); let steering_angle = yaw_to_angle(input.yaw); let wheels: Vec<_> = wheels.iter().map(|w| w.translation).collect(); @@ -91,20 +75,20 @@ pub(super) fn cyber_lean( /// PID-based controller for stabilizing attitude; keeps the cyberbike upright. pub(super) fn falling_cat( - mut bike_query: Query<(&Transform, &mut ExternalForce, &mut CatControllerState)>, + mut bike_query: Query<(&Transform, &mut ExternalTorque, &mut CatControllerState)>, time: Res