use crate::engine::{Engine, EngineType};
use crate::error::Result;
use crate::forced_induction::{ForcedInduction, InductionType};
use crate::gear::{Gear, GearMaterial};
use crate::motor::{Motor, MotorType};
use crate::transmission::Transmission;
use crate::turbine::Turbine;
use alloc::vec;
pub fn v8_muscle_car(sample_rate: f32) -> Result<Engine> {
let mut engine = Engine::new(EngineType::Gasoline, 8, sample_rate)?;
engine.set_firing_order(vec![0.0, 90.0, 270.0, 180.0, 540.0, 630.0, 450.0, 360.0]);
engine.set_rpm(800.0);
engine.set_load(0.1);
Ok(engine)
}
pub fn inline4_economy(sample_rate: f32) -> Result<Engine> {
let engine = Engine::new(EngineType::Gasoline, 4, sample_rate)?;
Ok(engine)
}
pub fn diesel_truck(sample_rate: f32) -> Result<Engine> {
let mut engine = Engine::new(EngineType::Diesel, 6, sample_rate)?;
engine.set_rpm(700.0);
engine.set_load(0.2);
Ok(engine)
}
pub fn motorcycle_single(sample_rate: f32) -> Result<Engine> {
let engine = Engine::new(EngineType::TwoStroke, 1, sample_rate)?;
Ok(engine)
}
pub fn electric_vehicle(sample_rate: f32) -> Result<Motor> {
let motor = Motor::new(MotorType::Brushless, 8, sample_rate)?;
Ok(motor)
}
pub fn turbocharger(sample_rate: f32) -> Result<ForcedInduction> {
ForcedInduction::new(InductionType::Turbo, 2.5, 1.0, sample_rate)
}
pub fn supercharger(sample_rate: f32) -> Result<ForcedInduction> {
ForcedInduction::new(InductionType::Supercharger, 1.5, 0.01, sample_rate)
}
pub fn manual_5speed(sample_rate: f32) -> Result<Transmission> {
Transmission::new(vec![3.5, 2.1, 1.4, 1.0, 0.8], 24, sample_rate)
}
pub fn manual_6speed(sample_rate: f32) -> Result<Transmission> {
Transmission::new(vec![3.8, 2.3, 1.6, 1.2, 0.95, 0.78], 28, sample_rate)
}
pub fn steel_spur_gear(teeth: u32, sample_rate: f32) -> Result<Gear> {
Gear::new(teeth, GearMaterial::Steel, sample_rate)
}
pub fn industrial_turbine(sample_rate: f32) -> Result<Turbine> {
Turbine::new(24, 600.0, sample_rate)
}
pub fn propeller(sample_rate: f32) -> Result<Turbine> {
Turbine::new(3, 0.0, sample_rate)
}