use std::f32::consts::PI; use bevy::prelude::*; use heron::prelude::*; use crate::{ map::GroundContact, Layer, }; #[derive(Component)] pub struct Player { rotation: f32, } pub fn setup( mut commands: Commands, asset_server: Res, ) { let mesh1 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Mesh0/Primitive0"); let mesh2 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Mesh0/Primitive1"); let mesh3 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Mesh0/Primitive2"); let mesh4 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Mesh1/Primitive0"); let material1 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Material0"); let material2 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Material1"); let material3 = asset_server.load("Mini-Game Variety Pack/Models/Characters/gltf/character_duck.gltf#Material2"); let transform = Transform::from_xyz(0.0, 12.0, 0.0); commands.spawn() .insert(RigidBody::Dynamic) .insert(CollisionLayers::none() .with_group(Layer::Player) .with_masks(&[Layer::Player, Layer::Map]) ) .insert(CollisionShape::Cone { half_height: 0.7, radius: 0.4, }) .insert(PhysicMaterial { restitution: 0.0, density: 8.0, friction: 1.0, }) .insert(RotationConstraints::lock()) .insert(Velocity::default()) .insert(Player { rotation: 0.0, }) .insert(GroundContact::default()) .insert(GlobalTransform::default()) .insert(transform) .with_children(|children| { children.spawn_bundle(PbrBundle { mesh: mesh1.clone(), material: material1.clone(), ..Default::default() }); children.spawn_bundle(PbrBundle { mesh: mesh2.clone(), material: material2.clone(), ..Default::default() }); children.spawn_bundle(PbrBundle { mesh: mesh3.clone(), material: material3.clone(), ..Default::default() }); let transform = Transform::from_translation(-0.71 * Vec3::Y); children.spawn_bundle(PbrBundle { mesh: mesh4.clone(), material: material1.clone(), transform, ..Default::default() }); }); } pub fn input(time: Res