use bevy::prelude::*; use crate::{camera::MouseCoords, illumination::Illumination, pillar::PillarActivationProgress}; #[derive(Component)] pub struct Player; #[derive(Component)] pub struct PlayerLight { i: u8, } pub fn spawn_player( commands: &mut Commands, meshes: &mut Assets, materials: &mut Assets, ) { commands .spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Capsule { radius: 0.5, ..Default::default() })), material: materials.add(Color::rgb(1.0, 1.0, 1.0).into()), transform: Transform::from_xyz(0.0, 1.0, 0.0), ..Default::default() }) .insert(Player); // light commands .spawn() .insert(LightFriends) .insert(Transform::default()) .insert(GlobalTransform::default()) .with_children(|children| { let count = 6; for i in 0..count { let color = Color::hsl(360.0 * i as f32 / count as f32, 0.5, 0.5); let mut light_material: StandardMaterial = color.into(); light_material.metallic = 0.5; light_material.reflectance = 0.5; light_material.emissive = color.as_rgba() * 10.0; let light_material = materials.add(light_material); children .spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Icosphere { radius: 0.2, subdivisions: 5, })), material: light_material.clone(), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..Default::default() }) .insert_bundle(PointLightBundle { transform: Transform::from_xyz(0.0, 0.0, 0.0), point_light: PointLight { color: color.as_rgba() * 10.0, ..Default::default() }, ..Default::default() }) .insert(PlayerLight { i: i as u8 + 1 }) .insert(Illumination { radius: 13.0 }); } }); } #[derive(Component)] pub struct LightFriends; pub fn move_light_friends( mut query: Query<(&mut Transform, &LightFriends)>, player: Query<(&Transform, &Player), Without>, coords: Res, interpolation: Res, time: Res