52 lines
1.7 KiB
Rust
52 lines
1.7 KiB
Rust
use bevy::prelude::*;
|
|
use bevy_rapier3d::rapier::{dynamics::RigidBodyBuilder, geometry::ColliderBuilder};
|
|
|
|
pub struct WorldPlugin;
|
|
|
|
impl Plugin for WorldPlugin {
|
|
fn build(&self, app: &mut AppBuilder) {
|
|
app.add_startup_system(create_world.system());
|
|
}
|
|
}
|
|
|
|
fn create_world(
|
|
mut commands: Commands,
|
|
mut meshes: ResMut<Assets<Mesh>>,
|
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
|
asset_server: Res<AssetServer>,
|
|
) {
|
|
// some boxes to help with orientation
|
|
let box_mesh = meshes.add(Mesh::from(shape::Cube { size: 0.25 }));
|
|
let box_material = materials.add(Color::rgb(1.0, 0.2, 0.3).into());
|
|
const AMOUNT: i32 = 6;
|
|
for x in -(AMOUNT / 2)..(AMOUNT / 2) {
|
|
for y in -(AMOUNT / 2)..(AMOUNT / 2) {
|
|
for z in -(AMOUNT / 2)..(AMOUNT / 2) {
|
|
commands.spawn_bundle(PbrBundle {
|
|
mesh: box_mesh.clone(),
|
|
material: box_material.clone(),
|
|
transform: Transform::from_translation(Vec3::new(x as f32, y as f32, z as f32)),
|
|
..Default::default()
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// a simple light
|
|
commands.spawn_bundle(LightBundle {
|
|
transform: Transform::from_translation(Vec3::new(4.0, 8.0, 4.0)),
|
|
..Default::default()
|
|
});
|
|
|
|
// create a floor
|
|
let floor_texture_handle = materials.add(asset_server.load("textures/blocks17floor2.png").into());
|
|
let rigid_body1 = RigidBodyBuilder::new_static();
|
|
let collider1 = ColliderBuilder::cuboid(10.0, 0.1, 10.0);
|
|
commands.spawn_bundle((rigid_body1, collider1));
|
|
commands.spawn_bundle(PbrBundle {
|
|
mesh: meshes.add(Mesh::from(shape::Plane { size: 20. })),
|
|
material: floor_texture_handle,
|
|
transform: Transform::from_translation(Vec3::new(0.0, 0.1, 0.0)),
|
|
..Default::default()
|
|
});
|
|
}
|