rake/src/world.rs
2021-06-07 23:50:39 +02:00

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()
});
}