use rapier3d::prelude::*; #[derive(Debug, serde::Deserialize)] pub struct SimulationConfig { pub tickrate: f32, pub drone_tick_rate: u64, // PID pub target_rate: f32, pub proportional_multiplier: [f32; 3], pub integral_multiplier: [f32; 3], pub diferential_multiplier: [f32; 3], // Motors pub max_thrust: f32, pub max_torque: f32, #[serde(default)] pub time_constant: f32, // Drone pub mass: f32, } impl SimulationConfig { pub fn proportional(&self) -> Vector { vector![ self.proportional_multiplier[0], self.proportional_multiplier[1], self.proportional_multiplier[2] ] } pub fn integral(&self) -> Vector { vector![ self.integral_multiplier[0], self.integral_multiplier[1], self.integral_multiplier[2] ] } pub fn diferential(&self) -> Vector { vector![ self.diferential_multiplier[0], self.diferential_multiplier[1], self.diferential_multiplier[2] ] } }