mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
add Color type
This commit is contained in:
parent
aa09e93980
commit
99cdf56e7d
12 changed files with 100 additions and 49 deletions
|
@ -4,7 +4,7 @@ use bevy_derive::Uniforms;
|
|||
|
||||
#[derive(Uniforms, Default)]
|
||||
struct MyMaterial {
|
||||
pub color: Vec4,
|
||||
pub color: Color,
|
||||
#[uniform(ignore, shader_def)]
|
||||
pub always_red: bool,
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
..Default::default()
|
||||
},
|
||||
material: MyMaterial {
|
||||
color: Vec4::new(0.0, 0.8, 0.0, 1.0),
|
||||
color: Color::rgb(0.0, 0.8, 0.0).into(),
|
||||
always_red: false,
|
||||
},
|
||||
translation: Translation::new(-2.0, 0.0, 0.0),
|
||||
|
@ -93,7 +93,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
..Default::default()
|
||||
},
|
||||
material: MyMaterial {
|
||||
color: Vec4::new(0.0, 0.0, 0.0, 1.0),
|
||||
color: Color::rgb(0.0, 0.0, 0.0).into(),
|
||||
always_red: true,
|
||||
},
|
||||
translation: Translation::new(2.0, 0.0, 0.0),
|
||||
|
|
|
@ -16,7 +16,7 @@ fn create_entities_insert_vec(
|
|||
vec![(
|
||||
plane_handle,
|
||||
StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
},
|
||||
LocalToWorld::identity(),
|
||||
Translation::new(0.0, 0.0, 0.0),
|
||||
|
@ -29,7 +29,7 @@ fn create_entities_insert_vec(
|
|||
vec![(
|
||||
cube_handle,
|
||||
StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.3, 0.3).into(),
|
||||
},
|
||||
LocalToWorld::identity(),
|
||||
Translation::new(0.0, 0.0, 1.0),
|
||||
|
@ -79,7 +79,7 @@ fn create_entities_builder_add_component(
|
|||
.build_entity()
|
||||
.add(plane_handle)
|
||||
.add(StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
})
|
||||
.add(LocalToWorld::identity())
|
||||
.add(Translation::new(0.0, 0.0, 0.0))
|
||||
|
@ -87,7 +87,7 @@ fn create_entities_builder_add_component(
|
|||
.build_entity()
|
||||
.add(cube_handle)
|
||||
.add(StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.3, 0.3).into(),
|
||||
})
|
||||
.add(LocalToWorld::identity())
|
||||
.add(Translation::new(0.0, 0.0, 1.0))
|
||||
|
@ -125,7 +125,7 @@ fn create_entities_builder_archetype(
|
|||
.add_entity(MeshEntity {
|
||||
mesh: plane_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
|
@ -133,7 +133,7 @@ fn create_entities_builder_archetype(
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.3, 0.3).into(),
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
|
|
|
@ -32,7 +32,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.4, 0.3).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
@ -43,7 +43,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
builder.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.4, 0.3).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 3.0),
|
||||
..Default::default()
|
||||
|
|
|
@ -24,7 +24,7 @@ pub fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_archetype(MeshEntity {
|
||||
mesh: plane_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
|
@ -32,7 +32,7 @@ pub fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_archetype(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.4, 0.3).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
|
|
@ -15,7 +15,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: plane_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
|
@ -23,7 +23,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.4, 0.3).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
|
|
@ -20,12 +20,7 @@ fn build_move_system() -> Box<dyn Schedulable> {
|
|||
translation.0 += math::vec3(1.0, 0.0, 0.0) * time.delta_seconds;
|
||||
if let ColorSource::Color(color) = material.albedo {
|
||||
material.albedo = (color
|
||||
+ math::vec4(
|
||||
-time.delta_seconds,
|
||||
-time.delta_seconds,
|
||||
time.delta_seconds,
|
||||
0.0,
|
||||
))
|
||||
+ Color::rgb(-time.delta_seconds, -time.delta_seconds, time.delta_seconds))
|
||||
.into();
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +67,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: plane_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(),
|
||||
albedo: Color::rgb(0.1, 0.2, 0.1).into(),
|
||||
},
|
||||
..Default::default()
|
||||
})
|
||||
|
@ -80,7 +75,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(1.0, 1.0, 1.0, 1.0).into(),
|
||||
albedo: Color::rgb(1.0, 1.0, 1.0).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
@ -88,7 +83,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.0, 1.0, 0.0, 1.0).into(),
|
||||
albedo: Color::rgb(0.0, 1.0, 0.0).into(),
|
||||
},
|
||||
translation: Translation::new(-2.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
@ -119,11 +114,10 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
builder = builder.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(
|
||||
albedo: Color::rgb(
|
||||
rng.gen_range(0.0, 1.0),
|
||||
rng.gen_range(0.0, 1.0),
|
||||
rng.gen_range(0.0, 1.0),
|
||||
1.0,
|
||||
)
|
||||
.into(),
|
||||
},
|
||||
|
|
|
@ -14,7 +14,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
.add_entity(MeshEntity {
|
||||
mesh: cube_handle,
|
||||
material: StandardMaterial {
|
||||
albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(),
|
||||
albedo: Color::rgb(0.5, 0.3, 0.3).into(),
|
||||
},
|
||||
translation: Translation::new(0.0, 0.0, 1.0),
|
||||
..Default::default()
|
||||
|
@ -57,7 +57,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(0.1, 0.1, 0.1, 1.0),
|
||||
Color::rgb(0.1, 0.1, 0.1),
|
||||
),
|
||||
})
|
||||
// top right anchor with vertical fill
|
||||
|
@ -66,7 +66,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(0.1, 0.1, 0.1, 1.0),
|
||||
Color::rgb(0.1, 0.1, 0.1),
|
||||
),
|
||||
})
|
||||
// render order test: reddest in the back, whitest in the front
|
||||
|
@ -75,7 +75,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(1.0, 0.1, 0.1, 1.0),
|
||||
Color::rgb(1.0, 0.1, 0.1),
|
||||
),
|
||||
})
|
||||
.add_entity(UiEntity {
|
||||
|
@ -83,7 +83,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(1.0, 0.3, 0.3, 1.0),
|
||||
Color::rgb(1.0, 0.3, 0.3),
|
||||
),
|
||||
})
|
||||
.add_entity(UiEntity {
|
||||
|
@ -91,7 +91,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(1.0, 0.5, 0.5, 1.0),
|
||||
Color::rgb(1.0, 0.5, 0.5),
|
||||
),
|
||||
})
|
||||
.add_entity(UiEntity {
|
||||
|
@ -99,7 +99,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(1.0, 0.7, 0.7, 1.0),
|
||||
Color::rgb(1.0, 0.7, 0.7),
|
||||
),
|
||||
})
|
||||
// parenting
|
||||
|
@ -108,7 +108,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(0.1, 0.1, 1.0, 1.0),
|
||||
Color::rgb(0.1, 0.1, 1.0),
|
||||
),
|
||||
})
|
||||
.add_children(|builder| {
|
||||
|
@ -117,7 +117,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(0.6, 0.6, 1.0, 1.0),
|
||||
Color::rgb(0.6, 0.6, 1.0),
|
||||
),
|
||||
})
|
||||
})
|
||||
|
@ -127,7 +127,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||
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),
|
||||
math::vec4(1.0, 0.9, 0.9, 0.4),
|
||||
Color::rgba(1.0, 0.9, 0.9, 0.4),
|
||||
),
|
||||
})
|
||||
.build();
|
||||
|
|
|
@ -8,7 +8,7 @@ pub use crate::{
|
|||
pipeline::PipelineDescriptor,
|
||||
render_resource::{resource_name, resource_providers::UniformResourceProvider},
|
||||
shader::{uniforms::StandardMaterial, Shader, ShaderDefSuffixProvider, ShaderStage},
|
||||
ActiveCamera, ActiveCamera2d, Camera, CameraType, ColorSource, Instanced, Light,
|
||||
ActiveCamera, ActiveCamera2d, Camera, CameraType, Color, ColorSource, Instanced, Light,
|
||||
Renderable,
|
||||
},
|
||||
ui::{Anchors, Margins, Node},
|
||||
|
|
|
@ -4,15 +4,70 @@ use crate::{
|
|||
math::Vec4,
|
||||
render::shader::ShaderDefSuffixProvider,
|
||||
};
|
||||
use std::ops::Add;
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq)]
|
||||
pub struct Color(Vec4);
|
||||
|
||||
impl Color {
|
||||
pub fn rgb(r: f32, g: f32, b: f32) -> Color {
|
||||
Color(Vec4::new(r, g, b, 1.0))
|
||||
}
|
||||
|
||||
pub fn rgba(r: f32, g: f32, b: f32, a: f32) -> Color {
|
||||
Color(Vec4::new(r, g, b, a))
|
||||
}
|
||||
}
|
||||
|
||||
impl Add<Color> for Color {
|
||||
type Output = Color;
|
||||
fn add(self, rhs: Color) -> Self::Output {
|
||||
Color(self.0 + rhs.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl Add<Vec4> for Color {
|
||||
type Output = Color;
|
||||
fn add(self, rhs: Vec4) -> Self::Output {
|
||||
Color(self.0 + rhs)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Vec4> for Color {
|
||||
fn from(vec4: Vec4) -> Self {
|
||||
Color(vec4)
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<[f32; 4]> for Color {
|
||||
fn into(self) -> [f32; 4] {
|
||||
self.0.into()
|
||||
}
|
||||
}
|
||||
|
||||
impl GetBytes for Color {
|
||||
fn get_bytes(&self) -> Vec<u8> {
|
||||
self.0.get_bytes()
|
||||
}
|
||||
fn get_bytes_ref(&self) -> Option<&[u8]> {
|
||||
self.0.get_bytes_ref()
|
||||
}
|
||||
}
|
||||
|
||||
pub enum ColorSource {
|
||||
Color(Vec4),
|
||||
Color(Color),
|
||||
Texture(Handle<Texture>),
|
||||
}
|
||||
|
||||
impl From<Vec4> for ColorSource {
|
||||
fn from(vec4: Vec4) -> Self {
|
||||
ColorSource::Color(vec4)
|
||||
ColorSource::Color(vec4.into())
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Color> for ColorSource {
|
||||
fn from(color: Color) -> Self {
|
||||
ColorSource::Color(color)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +89,7 @@ impl ShaderDefSuffixProvider for ColorSource {
|
|||
impl GetBytes for ColorSource {
|
||||
fn get_bytes(&self) -> Vec<u8> {
|
||||
match *self {
|
||||
ColorSource::Color(color) => color.get_bytes(),
|
||||
ColorSource::Color(ref color) => color.get_bytes(),
|
||||
ColorSource::Texture(_) => Vec::new(), // Texture is not a uniform
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
use crate::{math, math::Vec4, prelude::Translation, render::camera};
|
||||
use super::Color;
|
||||
use crate::{math, prelude::Translation, render::camera};
|
||||
use std::ops::Range;
|
||||
use zerocopy::{AsBytes, FromBytes};
|
||||
|
||||
pub struct Light {
|
||||
pub color: Vec4,
|
||||
pub color: Color,
|
||||
pub fov: f32,
|
||||
pub depth: Range<f32>,
|
||||
}
|
||||
|
@ -11,7 +12,7 @@ pub struct Light {
|
|||
impl Default for Light {
|
||||
fn default() -> Self {
|
||||
Light {
|
||||
color: Vec4::new(1.0, 1.0, 1.0, 1.0),
|
||||
color: Color::rgb(1.0, 1.0, 1.0),
|
||||
depth: 0.1..50.0,
|
||||
fov: f32::to_radians(60.0),
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{math::Vec4, render::ColorSource};
|
||||
use crate::render::{Color, ColorSource};
|
||||
|
||||
use crate as bevy; // for macro imports
|
||||
use bevy_derive::Uniforms;
|
||||
|
@ -12,7 +12,7 @@ pub struct StandardMaterial {
|
|||
impl Default for StandardMaterial {
|
||||
fn default() -> Self {
|
||||
StandardMaterial {
|
||||
albedo: ColorSource::Color(Vec4::new(0.3, 0.3, 0.3, 1.0)),
|
||||
albedo: Color::rgb(0.3, 0.3, 0.3).into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use crate::{
|
||||
math,
|
||||
math::{Vec2, Vec4},
|
||||
math::Vec2,
|
||||
prelude::Color,
|
||||
ui::{Anchors, Margins},
|
||||
};
|
||||
|
||||
|
@ -16,7 +17,7 @@ pub struct Node {
|
|||
pub parent_dimensions: Vec2,
|
||||
pub anchors: Anchors,
|
||||
pub margins: Margins,
|
||||
pub color: Vec4,
|
||||
pub color: Color,
|
||||
}
|
||||
|
||||
impl Default for Node {
|
||||
|
@ -28,13 +29,13 @@ impl Default for Node {
|
|||
parent_dimensions: Vec2::default(),
|
||||
anchors: Anchors::default(),
|
||||
margins: Margins::default(),
|
||||
color: math::vec4(0.0, 0.0, 0.0, 1.0),
|
||||
color: Color::rgb(0.0, 0.0, 0.0),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Node {
|
||||
pub fn new(position: Vec2, anchors: Anchors, margins: Margins, color: Vec4) -> Self {
|
||||
pub fn new(position: Vec2, anchors: Anchors, margins: Margins, color: Color) -> Self {
|
||||
Node {
|
||||
position,
|
||||
global_position: Vec2::default(),
|
||||
|
|
Loading…
Reference in a new issue