mirror of
https://github.com/bevyengine/bevy
synced 2024-11-30 00:20:20 +00:00
04590de678
I worked really hard to make ColorSource work, but sadly we need color to be instanceable and making it optional would add too much complexity. Maybe at some point in the future we can add it back. On the plus side, albedo color now modulates the albedo texture
139 lines
4.5 KiB
Rust
139 lines
4.5 KiB
Rust
use bevy::prelude::*;
|
|
|
|
fn main() {
|
|
AppBuilder::new().add_defaults().setup_world(setup).run();
|
|
}
|
|
|
|
fn setup(world: &mut World, resources: &mut Resources) {
|
|
let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap();
|
|
let mut material_storage = resources
|
|
.get_mut::<AssetStorage<StandardMaterial>>()
|
|
.unwrap();
|
|
let cube_handle = mesh_storage.add(Mesh::load(MeshType::Cube));
|
|
let cube_material_handle = material_storage.add(StandardMaterial {
|
|
albedo: Color::rgb(0.5, 0.3, 0.3),
|
|
..Default::default()
|
|
});
|
|
|
|
world
|
|
.build()
|
|
// cube
|
|
.add_entity(MeshEntity {
|
|
mesh: cube_handle,
|
|
material: cube_material_handle,
|
|
translation: Translation::new(0.0, 0.0, 1.0),
|
|
..Default::default()
|
|
})
|
|
// light
|
|
.add_entity(LightEntity {
|
|
translation: Translation::new(4.0, -4.0, 5.0),
|
|
..Default::default()
|
|
})
|
|
// 3d camera
|
|
.add_entity(CameraEntity {
|
|
camera: Camera::new(CameraType::Projection {
|
|
fov: std::f32::consts::PI / 4.0,
|
|
near: 1.0,
|
|
far: 1000.0,
|
|
aspect_ratio: 1.0,
|
|
}),
|
|
active_camera: ActiveCamera,
|
|
local_to_world: LocalToWorld(Mat4::look_at_rh(
|
|
Vec3::new(3.0, 8.0, 5.0),
|
|
Vec3::new(0.0, 0.0, 0.0),
|
|
Vec3::new(0.0, 0.0, 1.0),
|
|
)),
|
|
})
|
|
// 2d camera
|
|
.add_entity(Camera2dEntity {
|
|
camera: Camera::new(CameraType::Orthographic {
|
|
left: 0.0,
|
|
right: 0.0,
|
|
bottom: 0.0,
|
|
top: 0.0,
|
|
near: 0.0,
|
|
far: 1.0,
|
|
}),
|
|
active_camera_2d: ActiveCamera2d,
|
|
})
|
|
// bottom left anchor with vertical fill
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(0.0, 0.0),
|
|
Anchors::new(0.0, 0.0, 0.0, 1.0),
|
|
Margins::new(10.0, 200.0, 10.0, 10.0),
|
|
Color::rgb(0.1, 0.1, 0.1),
|
|
),
|
|
})
|
|
// top right anchor with vertical fill
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(0.0, 0.0),
|
|
Anchors::new(1.0, 1.0, 0.0, 1.0),
|
|
Margins::new(10.0, 100.0, 50.0, 100.0),
|
|
Color::rgb(0.1, 0.1, 0.1),
|
|
),
|
|
})
|
|
// render order test: reddest in the back, whitest in the front
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(75.0, 75.0),
|
|
Anchors::new(0.5, 0.5, 0.5, 0.5),
|
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
|
Color::rgb(1.0, 0.1, 0.1),
|
|
),
|
|
})
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(50.0, 50.0),
|
|
Anchors::new(0.5, 0.5, 0.5, 0.5),
|
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
|
Color::rgb(1.0, 0.3, 0.3),
|
|
),
|
|
})
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(100.0, 100.0),
|
|
Anchors::new(0.5, 0.5, 0.5, 0.5),
|
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
|
Color::rgb(1.0, 0.5, 0.5),
|
|
),
|
|
})
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(150.0, 150.0),
|
|
Anchors::new(0.5, 0.5, 0.5, 0.5),
|
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
|
Color::rgb(1.0, 0.7, 0.7),
|
|
),
|
|
})
|
|
// parenting
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(300.0, 300.0),
|
|
Anchors::new(0.0, 0.0, 0.0, 0.0),
|
|
Margins::new(0.0, 200.0, 0.0, 200.0),
|
|
Color::rgb(0.1, 0.1, 1.0),
|
|
),
|
|
})
|
|
.add_children(|builder| {
|
|
builder.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(0.0, 0.0),
|
|
Anchors::new(0.0, 1.0, 0.0, 1.0),
|
|
Margins::new(20.0, 20.0, 20.0, 20.0),
|
|
Color::rgb(0.6, 0.6, 1.0),
|
|
),
|
|
})
|
|
})
|
|
// alpha test
|
|
.add_entity(UiEntity {
|
|
node: Node::new(
|
|
math::vec2(200.0, 200.0),
|
|
Anchors::new(0.5, 0.5, 0.5, 0.5),
|
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
|
Color::rgba(1.0, 0.9, 0.9, 0.4),
|
|
),
|
|
})
|
|
.build();
|
|
}
|