Latest commit b724a0f

use bevy::prelude::*;

/// 这个示例演示了几种加载资源的方法
fn main() {
    App::new()
        .insert_resource(Msaa { samples: 4 })
        .add_plugins(DefaultPlugins)
        .add_startup_system(初始设置)
        .run();
}

fn 初始设置(
    mut commands: Commands,
    asset_server: Res<AssetServer>,
    meshes: Res<Assets<Mesh>>,
    mut materials: ResMut<Assets<StandardMaterial>>,
) {
    // 默认情况下,AssetServer 会从根目录的 assets 文件夹内加载资产
    // 修改 CARGO_MANIFEST_DIR 环境变量来指定资产文件夹
    // 从 Cargo 运行 App 时,CARGO_MANIFEST_DIR 自动设置成当前工作空间的根目录
    // 查看 https://doc.rust-lang.org/cargo/reference/environment-variables.html
    let cube_handle = asset_server.load("modles/cube/cube.gltf#Mesh0/Primitive0");
    let sphere_handle = asset_server.load("modles/sphere/sphere.gltf#Mesh0/Primitive0");

    // 所有的资产在完成加载后,最终都会进入其 Assets<T> 集合
    if let Some(sphere) = meshes.get(&sphere_handle) {
        // 可能会注意到它没有运行! 这是因为资产并行加载而没有阻塞
        // 加载资产后,会显示在相关的 Assets<T> 集合中
        info!("{:?}", sphere.primitive_topology());
    } else {
        info!("还没有加载球体");
    }

    // 可以将所有资产加载到这样的文件夹中。 它们将并行加载而不会阻塞
    let _scenes: Vec<HandleUntyped> = asset_server.load_folder("modles/monkey").unwrap();

    // 然后可以像这样访问文件夹中的任何资产:
    let monkey_handle = asset_server.get_handle("models/monkey/Monkey.gltf#Mesh0/Primitive0");

    // 还可以把资产直接添加到 Assets<T>
    let material_handle = materials.add(StandardMaterial {
        base_color: Color::rgb(0.8, 0.7, 0.6),
        ..Default::default()
    });
    // 生成“猴子”
    commands.spawn_bundle(PbrBundle {
        mesh: monkey_handle,
        material: material_handle.clone(),
        transform: Transform::from_xyz(-3.0, 0.0, 0.0),
        ..Default::default()
    });
    // 生成“方块”
    commands.spawn_bundle(PbrBundle {
        mesh: cube_handle,
        material: material_handle.clone(),
        transform: Transform::from_xyz(0.0, 0.0, 0.0),
        ..Default::default()
    });
    // 生成“球体”
    commands.spawn_bundle(PbrBundle {
        mesh: sphere_handle,
        material: material_handle,
        transform: Transform::from_xyz(3.0, .0., 0.0),
        ..Default::default()
    });
    // 生成“点光源”
    commands.spawn_bundle(PointLightBundle {
        transform: Transform::from_xyz(4.0, 5.0, 4.0),
        ..Default::default()
    });
    // 生成“相机”
    commands.spawn_bundle(PerspectiveCameraBundle {
        transform: Transform::from_xyz(0.0, 3.0, 10.0).looking_at(Vec3::ZERO, Vec3::Y),
        ..Default::default()
    });
}