use bevy::prelude::*; use bevy_mod_xr::session::XrTracker; use bevy_xr_utils::tracking_utils::{XrTrackedLocalFloor, XrTrackedStage, XrTrackedView}; use felix_assets::{BevyObjectData, BevyObjectLightDataType}; use felix_audio::FelixAudioListener; use crate::components::debug_camera::DebugCamera; pub fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut> ){ // TODO: World loading from server // TODO: UI and Menus // commands.spawn(( // Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), // MeshMaterial3d(materials.add(Color::WHITE)), // Transform::from_xyz(5.0, 0.0, 0.0), // )); // commands.spawn(( // Mesh3d(meshes.add(Cuboid::new(0.5, 0.5, 0.5))), // MeshMaterial3d(materials.add(Color::WHITE)), // Transform::from_xyz(-5.0, 0.0, 0.0) // )); // commands.spawn(( // Mesh3d(meshes.add(Cuboid::new(0.5, 0.5, 0.5))), // MeshMaterial3d(materials.add(Color::WHITE)), // Transform::from_xyz(0.0, 0.0, 5.0) // )); // commands.spawn(( // Mesh3d(meshes.add(Cuboid::new(0.5, 0.5, 0.5))), // MeshMaterial3d(materials.add(Color::WHITE)), // Transform::from_xyz(0.0, 0.0, -5.0) // )); commands.spawn(( DebugCamera::default(), // TODO: Build a proper player controller Camera3d::default(), Transform::from_xyz(0.0, 0.0, 0.0).looking_at(Vec3::ZERO, Vec3::Y), FelixAudioListener, XrTracker, XrTrackedView )); commands.spawn(( Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 144))), Transform::from_xyz(0.0, 0.0, 0.0), XrTrackedLocalFloor, XrTracker, )); commands.spawn(( Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 255))), Transform::from_xyz(0.0, 0.0, 0.0), XrTrackedStage, XrTracker, )); let gos = felix_assets::load("/home/phaze/Documents/rindo.flx").unwrap(); for go in gos{ match go.data{ BevyObjectData::Mesh(mesh) => { commands.spawn(( Mesh3d(meshes.add(mesh)), MeshMaterial3d(materials.add(Color::WHITE)), go.transform )); }, BevyObjectData::Light(light) => { match light.type_{ BevyObjectLightDataType::Point => { commands.spawn(( PointLight { color: light.colour, intensity: light.power, shadows_enabled: true, ..Default::default() }, go.transform )); }, _ => {} } } } } }