use carla::client::{ActorBase, Client};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Connecting to CARLA simulator...");
let client = Client::connect("localhost", 2000, None)?;
println!("Connected!");
println!("\nGetting current world...");
let mut world = client.world()?;
println!("World ready!");
let blueprint_library = world.blueprint_library()?;
let vehicle_bp = blueprint_library
.find("vehicle.tesla.model3")?
.expect("Tesla Model 3 not found");
let spawn_points = world.map()?.recommended_spawn_points()?;
let spawn_point = spawn_points.get(0).expect("No spawn points available");
let vehicle = world
.spawn_actor(&vehicle_bp, spawn_point)
.expect("Failed to spawn vehicle");
println!("Vehicle spawned: ID {}\n", vehicle.id());
let transform = vehicle.transform()?;
println!("Transform:");
println!(" Translation:");
println!(" x: {:.2}", transform.location.x);
println!(" y: {:.2}", transform.location.y);
println!(" z: {:.2}", transform.location.z);
println!(" Rotation: {:?}", transform.rotation);
let location = vehicle.location()?;
println!("\nLocation (shortcut):");
println!(" x: {:.2}", location.x);
println!(" y: {:.2}", location.y);
println!(" z: {:.2}", location.z);
let velocity = vehicle.velocity()?;
println!("\nVelocity:");
println!(" x: {:.2} m/s", velocity.x);
println!(" y: {:.2} m/s", velocity.y);
println!(" z: {:.2} m/s", velocity.z);
let speed = (velocity.x.powi(2) + velocity.y.powi(2) + velocity.z.powi(2)).sqrt();
println!(" Speed: {:.2} m/s ({:.2} km/h)", speed, speed * 3.6);
println!("\nVehicle will remain in the simulation.");
Ok(())
}