Updated glam to 0.21. (#5142)

Removed `const_vec2`/`const_vec3`
and replaced with equivalent `.from_array`.

# Objective

Fixes #5112 

## Solution

- `encase` needs to update to `glam` as well. See teoxoy/encase#4 on progress on that. 
- `hexasphere` also needs to be updated, see OptimisticPeach/hexasphere#12.
This commit is contained in:
CGMossa 2022-07-03 19:55:33 +00:00
parent 8f721d8d0a
commit 33f9b3940d
25 changed files with 71 additions and 82 deletions

View File

@ -7,7 +7,7 @@ publish = false
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
[dev-dependencies] [dev-dependencies]
glam = "0.20" glam = "0.21"
rand = "0.8" rand = "0.8"
rand_chacha = "0.3" rand_chacha = "0.3"
criterion = { version = "0.3", features = ["html_reports"] } criterion = { version = "0.3", features = ["html_reports"] }

View File

@ -13,4 +13,4 @@ proc-macro = true
[dependencies] [dependencies]
bevy_macro_utils = { path = "../bevy_macro_utils", version = "0.8.0-dev" } bevy_macro_utils = { path = "../bevy_macro_utils", version = "0.8.0-dev" }
encase_derive_impl = "0.2" encase_derive_impl = "0.3.0"

View File

@ -350,11 +350,11 @@ mod test {
let touch_event = Touch { let touch_event = Touch {
id: 4, id: 4,
start_position: Vec2::new(0.0, 0.0), start_position: Vec2::ZERO,
start_force: None, start_force: None,
previous_position: Vec2::new(0.0, 0.0), previous_position: Vec2::ZERO,
previous_force: None, previous_force: None,
position: Vec2::new(0.0, 0.0), position: Vec2::ZERO,
force: None, force: None,
}; };
@ -383,7 +383,7 @@ mod test {
let touch_event = TouchInput { let touch_event = TouchInput {
phase: TouchPhase::Started, phase: TouchPhase::Started,
position: Vec2::new(4.0, 4.0), position: Vec2::splat(4.0),
force: None, force: None,
id: 4, id: 4,
}; };
@ -398,7 +398,7 @@ mod test {
let moved_touch_event = TouchInput { let moved_touch_event = TouchInput {
phase: TouchPhase::Moved, phase: TouchPhase::Moved,
position: Vec2::new(5.0, 5.0), position: Vec2::splat(5.0),
force: None, force: None,
id: touch_event.id, id: touch_event.id,
}; };
@ -419,7 +419,7 @@ mod test {
let cancel_touch_event = TouchInput { let cancel_touch_event = TouchInput {
phase: TouchPhase::Cancelled, phase: TouchPhase::Cancelled,
position: Vec2::new(1.0, 1.0), position: Vec2::ONE,
force: None, force: None,
id: touch_event.id, id: touch_event.id,
}; };
@ -434,7 +434,7 @@ mod test {
let end_touch_event = TouchInput { let end_touch_event = TouchInput {
phase: TouchPhase::Ended, phase: TouchPhase::Ended,
position: Vec2::new(4.0, 4.0), position: Vec2::splat(4.0),
force: None, force: None,
id: 4, id: 4,
}; };
@ -456,7 +456,7 @@ mod test {
let touch_event = TouchInput { let touch_event = TouchInput {
phase: TouchPhase::Started, phase: TouchPhase::Started,
position: Vec2::new(4.0, 4.0), position: Vec2::splat(4.0),
force: None, force: None,
id: 4, id: 4,
}; };
@ -478,7 +478,7 @@ mod test {
let touch_event = TouchInput { let touch_event = TouchInput {
phase: TouchPhase::Ended, phase: TouchPhase::Ended,
position: Vec2::new(4.0, 4.0), position: Vec2::splat(4.0),
force: None, force: None,
id: 4, id: 4,
}; };
@ -500,7 +500,7 @@ mod test {
let touch_event = TouchInput { let touch_event = TouchInput {
phase: TouchPhase::Cancelled, phase: TouchPhase::Cancelled,
position: Vec2::new(4.0, 4.0), position: Vec2::splat(4.0),
force: None, force: None,
id: 4, id: 4,
}; };

View File

@ -9,4 +9,4 @@ license = "MIT OR Apache-2.0"
keywords = ["bevy"] keywords = ["bevy"]
[dependencies] [dependencies]
glam = { version = "0.20.0", features = ["serde", "bytemuck"] } glam = { version = "0.21", features = ["serde", "bytemuck"] }

View File

@ -11,7 +11,7 @@ license = "Zlib AND (MIT OR Apache-2.0)"
keywords = ["bevy", "3D", "graphics", "algorithm", "tangent"] keywords = ["bevy", "3D", "graphics", "algorithm", "tangent"]
[dependencies] [dependencies]
glam = "0.20.0" glam = "0.21"
[[example]] [[example]]
name = "generate" name = "generate"

View File

@ -1,9 +1,7 @@
use std::collections::HashSet; use std::collections::HashSet;
use bevy_ecs::prelude::*; use bevy_ecs::prelude::*;
use bevy_math::{ use bevy_math::{Mat4, UVec2, UVec3, Vec2, Vec3, Vec3A, Vec3Swizzles, Vec4, Vec4Swizzles};
const_vec2, Mat4, UVec2, UVec3, Vec2, Vec3, Vec3A, Vec3Swizzles, Vec4, Vec4Swizzles,
};
use bevy_reflect::prelude::*; use bevy_reflect::prelude::*;
use bevy_render::{ use bevy_render::{
camera::{Camera, CameraProjection, OrthographicProjection}, camera::{Camera, CameraProjection, OrthographicProjection},
@ -497,8 +495,8 @@ fn ndc_position_to_cluster(
.clamp(UVec3::ZERO, cluster_dimensions - UVec3::ONE) .clamp(UVec3::ZERO, cluster_dimensions - UVec3::ONE)
} }
const VEC2_HALF: Vec2 = const_vec2!([0.5, 0.5]); const VEC2_HALF: Vec2 = Vec2::splat(0.5);
const VEC2_HALF_NEGATIVE_Y: Vec2 = const_vec2!([0.5, -0.5]); const VEC2_HALF_NEGATIVE_Y: Vec2 = Vec2::new(0.5, -0.5);
// Calculate bounds for the light using a view space aabb. // Calculate bounds for the light using a view space aabb.
// Returns a (Vec3, Vec3) containing min and max with // Returns a (Vec3, Vec3) containing min and max with
@ -587,8 +585,8 @@ fn cluster_space_light_aabb(
) )
} }
const NDC_MIN: Vec2 = const_vec2!([-1.0, -1.0]); const NDC_MIN: Vec2 = Vec2::NEG_ONE;
const NDC_MAX: Vec2 = const_vec2!([1.0, 1.0]); const NDC_MAX: Vec2 = Vec2::ONE;
// Sort point lights with shadows enabled first, then by a stable key so that the index // Sort point lights with shadows enabled first, then by a stable key so that the index
// can be used to limit the number of point light shadows to render based on the device and // can be used to limit the number of point light shadows to render based on the device and

View File

@ -9,7 +9,7 @@ use bevy_ecs::{
prelude::*, prelude::*,
system::{lifetimeless::*, SystemParamItem}, system::{lifetimeless::*, SystemParamItem},
}; };
use bevy_math::{const_vec3, Mat4, UVec2, UVec3, UVec4, Vec2, Vec3, Vec4, Vec4Swizzles}; use bevy_math::{Mat4, UVec2, UVec3, UVec4, Vec2, Vec3, Vec4, Vec4Swizzles};
use bevy_render::{ use bevy_render::{
camera::{Camera, CameraProjection}, camera::{Camera, CameraProjection},
color::Color, color::Color,
@ -501,11 +501,6 @@ pub fn extract_lights(
pub(crate) const POINT_LIGHT_NEAR_Z: f32 = 0.1f32; pub(crate) const POINT_LIGHT_NEAR_Z: f32 = 0.1f32;
// Can't do `Vec3::Y * -1.0` because mul isn't const
const NEGATIVE_X: Vec3 = const_vec3!([-1.0, 0.0, 0.0]);
const NEGATIVE_Y: Vec3 = const_vec3!([0.0, -1.0, 0.0]);
const NEGATIVE_Z: Vec3 = const_vec3!([0.0, 0.0, -1.0]);
pub(crate) struct CubeMapFace { pub(crate) struct CubeMapFace {
pub(crate) target: Vec3, pub(crate) target: Vec3,
pub(crate) up: Vec3, pub(crate) up: Vec3,
@ -515,33 +510,33 @@ pub(crate) struct CubeMapFace {
pub(crate) const CUBE_MAP_FACES: [CubeMapFace; 6] = [ pub(crate) const CUBE_MAP_FACES: [CubeMapFace; 6] = [
// 0 GL_TEXTURE_CUBE_MAP_POSITIVE_X // 0 GL_TEXTURE_CUBE_MAP_POSITIVE_X
CubeMapFace { CubeMapFace {
target: NEGATIVE_X, target: Vec3::NEG_X,
up: NEGATIVE_Y, up: Vec3::NEG_Y,
}, },
// 1 GL_TEXTURE_CUBE_MAP_NEGATIVE_X // 1 GL_TEXTURE_CUBE_MAP_NEGATIVE_X
CubeMapFace { CubeMapFace {
target: Vec3::X, target: Vec3::X,
up: NEGATIVE_Y, up: Vec3::NEG_Y,
}, },
// 2 GL_TEXTURE_CUBE_MAP_POSITIVE_Y // 2 GL_TEXTURE_CUBE_MAP_POSITIVE_Y
CubeMapFace { CubeMapFace {
target: NEGATIVE_Y, target: Vec3::NEG_Y,
up: Vec3::Z, up: Vec3::Z,
}, },
// 3 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y // 3 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
CubeMapFace { CubeMapFace {
target: Vec3::Y, target: Vec3::Y,
up: NEGATIVE_Z, up: Vec3::NEG_Z,
}, },
// 4 GL_TEXTURE_CUBE_MAP_POSITIVE_Z // 4 GL_TEXTURE_CUBE_MAP_POSITIVE_Z
CubeMapFace { CubeMapFace {
target: NEGATIVE_Z, target: Vec3::NEG_Z,
up: NEGATIVE_Y, up: Vec3::NEG_Y,
}, },
// 5 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z // 5 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
CubeMapFace { CubeMapFace {
target: Vec3::Z, target: Vec3::Z,
up: NEGATIVE_Y, up: Vec3::NEG_Y,
}, },
]; ];
@ -1016,7 +1011,7 @@ struct GpuClusterLightIndexListsUniform {
// NOTE: Assert at compile time that GpuClusterLightIndexListsUniform // NOTE: Assert at compile time that GpuClusterLightIndexListsUniform
// fits within the maximum uniform buffer binding size // fits within the maximum uniform buffer binding size
const _: () = assert!(GpuClusterLightIndexListsUniform::SIZE.get() <= 16384); const _: () = assert!(GpuClusterLightIndexListsUniform::SHADER_SIZE.get() <= 16384);
impl Default for GpuClusterLightIndexListsUniform { impl Default for GpuClusterLightIndexListsUniform {
fn default() -> Self { fn default() -> Self {

View File

@ -25,7 +25,7 @@ thiserror = "1.0"
once_cell = "1.11" once_cell = "1.11"
serde = "1" serde = "1"
smallvec = { version = "1.6", features = ["serde", "union", "const_generics"], optional = true } smallvec = { version = "1.6", features = ["serde", "union", "const_generics"], optional = true }
glam = { version = "0.20.0", features = ["serde"], optional = true } glam = { version = "0.21", features = ["serde"], optional = true }
[dev-dependencies] [dev-dependencies]
ron = "0.7.0" ron = "0.7.0"

View File

@ -922,7 +922,7 @@ bevy_reflect::tests::should_reflect_debug::Test {
assert_eq!( assert_eq!(
result, result,
r#"{"type":"glam::vec3::Vec3","struct":{"x":{"type":"f32","value":12.0},"y":{"type":"f32","value":3.0},"z":{"type":"f32","value":-6.9}}}"# r#"{"type":"glam::f32::vec3::Vec3","struct":{"x":{"type":"f32","value":12.0},"y":{"type":"f32","value":3.0},"z":{"type":"f32","value":-6.9}}}"#
); );
} }

View File

@ -59,7 +59,7 @@ thiserror = "1.0"
futures-lite = "1.4.0" futures-lite = "1.4.0"
anyhow = "1.0" anyhow = "1.0"
hex = "0.4.2" hex = "0.4.2"
hexasphere = "7.0.0" hexasphere = "7.2"
parking_lot = "0.11.0" parking_lot = "0.11.0"
regex = "1.5" regex = "1.5"
copyless = "0.1.5" copyless = "0.1.5"
@ -70,4 +70,4 @@ flate2 = { version = "1.0.22", optional = true }
ruzstd = { version = "0.2.4", optional = true } ruzstd = { version = "0.2.4", optional = true }
# For transcoding of UASTC/ETC1S universal formats, and for .basis file support # For transcoding of UASTC/ETC1S universal formats, and for .basis file support
basis-universal = { version = "0.2.0", optional = true } basis-universal = { version = "0.2.0", optional = true }
encase = { version = "0.2", features = ["glam"] } encase = { version = "0.3", features = ["glam"] }

View File

@ -1153,7 +1153,9 @@ impl encase::ShaderType for Color {
type ExtraMetadata = (); type ExtraMetadata = ();
const METADATA: encase::private::Metadata<Self::ExtraMetadata> = { const METADATA: encase::private::Metadata<Self::ExtraMetadata> = {
let size = encase::private::SizeValue::from(<f32 as encase::private::Size>::SIZE).mul(4); let size =
encase::private::SizeValue::from(<f32 as encase::private::ShaderSize>::SHADER_SIZE)
.mul(4);
let alignment = encase::private::AlignmentValue::from_next_power_of_two_size(size); let alignment = encase::private::AlignmentValue::from_next_power_of_two_size(size);
encase::private::Metadata { encase::private::Metadata {
@ -1214,7 +1216,7 @@ impl encase::private::CreateFrom for Color {
} }
} }
impl encase::Size for Color {} impl encase::ShaderSize for Color {}
#[derive(Debug, Error)] #[derive(Debug, Error)]
pub enum HexColorError { pub enum HexColorError {

View File

@ -505,8 +505,8 @@ struct MeshAttributeData {
values: VertexAttributeValues, values: VertexAttributeValues,
} }
const VEC3_MIN: Vec3 = const_vec3!([std::f32::MIN, std::f32::MIN, std::f32::MIN]); const VEC3_MIN: Vec3 = Vec3::splat(std::f32::MIN);
const VEC3_MAX: Vec3 = const_vec3!([std::f32::MAX, std::f32::MAX, std::f32::MAX]); const VEC3_MAX: Vec3 = Vec3::splat(std::f32::MAX);
fn face_normal(a: [f32; 3], b: [f32; 3], c: [f32; 3]) -> [f32; 3] { fn face_normal(a: [f32; 3], b: [f32; 3], c: [f32; 3]) -> [f32; 3] {
let (a, b, c) = (Vec3::from(a), Vec3::from(b), Vec3::from(c)); let (a, b, c) = (Vec3::from(a), Vec3::from(b), Vec3::from(c));

View File

@ -118,7 +118,7 @@ impl From<Capsule> for Mesh {
// North. // North.
vs[j] = Vec3::new(0.0, summit, 0.0); vs[j] = Vec3::new(0.0, summit, 0.0);
vts[j] = Vec2::new(s_texture_polar, 1.0); vts[j] = Vec2::new(s_texture_polar, 1.0);
vns[j] = Vec3::new(0.0, 1.0, 0.0); vns[j] = Vec3::Y;
// South. // South.
let idx = vert_offset_south_cap + j; let idx = vert_offset_south_cap + j;

View File

@ -49,6 +49,6 @@ pub mod encase {
pub use encase::*; pub use encase::*;
} }
pub use self::encase::{ShaderType, Size as ShaderSize}; pub use self::encase::{ShaderSize, ShaderType};
pub use naga::ShaderStage; pub use naga::ShaderStage;

View File

@ -798,6 +798,6 @@ mod test {
#[test] #[test]
fn image_default_size() { fn image_default_size() {
let image = Image::default(); let image = Image::default();
assert_eq!(Vec2::new(1.0, 1.0), image.size()); assert_eq!(Vec2::ONE, image.size());
} }
} }

View File

@ -143,7 +143,7 @@ impl RenderAsset for ColorMaterial {
flags: flags.bits(), flags: flags.bits(),
}; };
let byte_buffer = [0u8; ColorMaterialUniformData::SIZE.get() as usize]; let byte_buffer = [0u8; ColorMaterialUniformData::SHADER_SIZE.get() as usize];
let mut buffer = encase::UniformBuffer::new(byte_buffer); let mut buffer = encase::UniformBuffer::new(byte_buffer);
buffer.write(&value).unwrap(); buffer.write(&value).unwrap();

View File

@ -10,7 +10,7 @@ use bevy_ecs::{
prelude::*, prelude::*,
system::{lifetimeless::*, SystemParamItem}, system::{lifetimeless::*, SystemParamItem},
}; };
use bevy_math::{const_vec2, Vec2}; use bevy_math::Vec2;
use bevy_reflect::Uuid; use bevy_reflect::Uuid;
use bevy_render::{ use bevy_render::{
color::Color, color::Color,
@ -307,17 +307,17 @@ impl Default for SpriteMeta {
const QUAD_INDICES: [usize; 6] = [0, 2, 3, 0, 1, 2]; const QUAD_INDICES: [usize; 6] = [0, 2, 3, 0, 1, 2];
const QUAD_VERTEX_POSITIONS: [Vec2; 4] = [ const QUAD_VERTEX_POSITIONS: [Vec2; 4] = [
const_vec2!([-0.5, -0.5]), Vec2::new(-0.5, -0.5),
const_vec2!([0.5, -0.5]), Vec2::new(0.5, -0.5),
const_vec2!([0.5, 0.5]), Vec2::new(0.5, 0.5),
const_vec2!([-0.5, 0.5]), Vec2::new(-0.5, 0.5),
]; ];
const QUAD_UVS: [Vec2; 4] = [ const QUAD_UVS: [Vec2; 4] = [
const_vec2!([0., 1.]), Vec2::new(0., 1.),
const_vec2!([1., 1.]), Vec2::new(1., 1.),
const_vec2!([1., 0.]), Vec2::new(1., 0.),
const_vec2!([0., 0.]), Vec2::new(0., 0.),
]; ];
#[derive(Component, Eq, PartialEq, Copy, Clone)] #[derive(Component, Eq, PartialEq, Copy, Clone)]

View File

@ -62,7 +62,7 @@ impl FontAtlasSet {
vec![FontAtlas::new( vec![FontAtlas::new(
textures, textures,
texture_atlases, texture_atlases,
Vec2::new(512.0, 512.0), Vec2::splat(512.0),
)] )]
}); });
let glyph_texture = Font::get_outlined_glyph_texture(outlined_glyph); let glyph_texture = Font::get_outlined_glyph_texture(outlined_glyph);

View File

@ -92,7 +92,7 @@ impl<ID: Hash + Eq> TextPipeline<ID> {
id, id,
TextLayoutInfo { TextLayoutInfo {
glyphs: Vec::new(), glyphs: Vec::new(),
size: Vec2::new(0., 0.), size: Vec2::ZERO,
}, },
); );
return Ok(()); return Ok(());

View File

@ -1,6 +1,6 @@
use super::Transform; use super::Transform;
use bevy_ecs::{component::Component, reflect::ReflectComponent}; use bevy_ecs::{component::Component, reflect::ReflectComponent};
use bevy_math::{const_vec3, Affine3A, Mat3, Mat4, Quat, Vec3}; use bevy_math::{Affine3A, Mat3, Mat4, Quat, Vec3};
use bevy_reflect::prelude::*; use bevy_reflect::prelude::*;
use std::ops::Mul; use std::ops::Mul;
@ -39,7 +39,7 @@ impl GlobalTransform {
#[doc(hidden)] #[doc(hidden)]
#[inline] #[inline]
pub const fn from_xyz(x: f32, y: f32, z: f32) -> Self { pub const fn from_xyz(x: f32, y: f32, z: f32) -> Self {
Self::from_translation(const_vec3!([x, y, z])) Self::from_translation(Vec3::new(x, y, z))
} }
/// Creates a new identity [`GlobalTransform`], with no translation, rotation, and a scale of 1 /// Creates a new identity [`GlobalTransform`], with no translation, rotation, and a scale of 1

View File

@ -1,6 +1,6 @@
use super::GlobalTransform; use super::GlobalTransform;
use bevy_ecs::{component::Component, reflect::ReflectComponent}; use bevy_ecs::{component::Component, reflect::ReflectComponent};
use bevy_math::{const_vec3, Mat3, Mat4, Quat, Vec3}; use bevy_math::{Mat3, Mat4, Quat, Vec3};
use bevy_reflect::prelude::*; use bevy_reflect::prelude::*;
use bevy_reflect::Reflect; use bevy_reflect::Reflect;
use std::ops::Mul; use std::ops::Mul;
@ -43,7 +43,7 @@ impl Transform {
/// `z`-value. /// `z`-value.
#[inline] #[inline]
pub const fn from_xyz(x: f32, y: f32, z: f32) -> Self { pub const fn from_xyz(x: f32, y: f32, z: f32) -> Self {
Self::from_translation(const_vec3!([x, y, z])) Self::from_translation(Vec3::new(x, y, z))
} }
/// Creates a new identity [`Transform`], with no translation, rotation, and a scale of 1 on /// Creates a new identity [`Transform`], with no translation, rotation, and a scale of 1 on

View File

@ -9,7 +9,7 @@ use crate::{prelude::CameraUi, CalculatedClip, Node, UiColor, UiImage};
use bevy_app::prelude::*; use bevy_app::prelude::*;
use bevy_asset::{load_internal_asset, AssetEvent, Assets, Handle, HandleUntyped}; use bevy_asset::{load_internal_asset, AssetEvent, Assets, Handle, HandleUntyped};
use bevy_ecs::prelude::*; use bevy_ecs::prelude::*;
use bevy_math::{const_vec3, Mat4, Vec2, Vec3, Vec4Swizzles}; use bevy_math::{Mat4, Vec2, Vec3, Vec4Swizzles};
use bevy_reflect::TypeUuid; use bevy_reflect::TypeUuid;
use bevy_render::{ use bevy_render::{
camera::{Camera, CameraProjection, DepthCalculation, OrthographicProjection, WindowOrigin}, camera::{Camera, CameraProjection, DepthCalculation, OrthographicProjection, WindowOrigin},
@ -353,10 +353,10 @@ impl Default for UiMeta {
} }
const QUAD_VERTEX_POSITIONS: [Vec3; 4] = [ const QUAD_VERTEX_POSITIONS: [Vec3; 4] = [
const_vec3!([-0.5, -0.5, 0.0]), Vec3::new(-0.5, -0.5, 0.0),
const_vec3!([0.5, -0.5, 0.0]), Vec3::new(0.5, -0.5, 0.0),
const_vec3!([0.5, 0.5, 0.0]), Vec3::new(0.5, 0.5, 0.0),
const_vec3!([-0.5, 0.5, 0.0]), Vec3::new(-0.5, 0.5, 0.0),
]; ];
const QUAD_INDICES: [usize; 6] = [0, 2, 3, 0, 1, 2]; const QUAD_INDICES: [usize; 6] = [0, 2, 3, 0, 1, 2];

View File

@ -1,13 +1,9 @@
//! Demonstrates rotating entities in 2D using quaternions. //! Demonstrates rotating entities in 2D using quaternions.
use bevy::{ use bevy::{math::Vec3Swizzles, prelude::*, time::FixedTimestep};
math::{const_vec2, Vec3Swizzles},
prelude::*,
time::FixedTimestep,
};
const TIME_STEP: f32 = 1.0 / 60.0; const TIME_STEP: f32 = 1.0 / 60.0;
const BOUNDS: Vec2 = const_vec2!([1200.0, 640.0]); const BOUNDS: Vec2 = Vec2::new(1200.0, 640.0);
fn main() { fn main() {
App::new() App::new()

View File

@ -1,7 +1,6 @@
//! A simplified implementation of the classic game "Breakout". //! A simplified implementation of the classic game "Breakout".
use bevy::{ use bevy::{
math::{const_vec2, const_vec3},
prelude::*, prelude::*,
sprite::collide_aabb::{collide, Collision}, sprite::collide_aabb::{collide, Collision},
time::FixedTimestep, time::FixedTimestep,
@ -12,18 +11,17 @@ const TIME_STEP: f32 = 1.0 / 60.0;
// These constants are defined in `Transform` units. // These constants are defined in `Transform` units.
// Using the default 2D camera they correspond 1:1 with screen pixels. // Using the default 2D camera they correspond 1:1 with screen pixels.
// The `const_vec3!` macros are needed as functions that operate on floats cannot be constant in Rust. const PADDLE_SIZE: Vec3 = Vec3::new(120.0, 20.0, 0.0);
const PADDLE_SIZE: Vec3 = const_vec3!([120.0, 20.0, 0.0]);
const GAP_BETWEEN_PADDLE_AND_FLOOR: f32 = 60.0; const GAP_BETWEEN_PADDLE_AND_FLOOR: f32 = 60.0;
const PADDLE_SPEED: f32 = 500.0; const PADDLE_SPEED: f32 = 500.0;
// How close can the paddle get to the wall // How close can the paddle get to the wall
const PADDLE_PADDING: f32 = 10.0; const PADDLE_PADDING: f32 = 10.0;
// We set the z-value of the ball to 1 so it renders on top in the case of overlapping sprites. // We set the z-value of the ball to 1 so it renders on top in the case of overlapping sprites.
const BALL_STARTING_POSITION: Vec3 = const_vec3!([0.0, -50.0, 1.0]); const BALL_STARTING_POSITION: Vec3 = Vec3::new(0.0, -50.0, 1.0);
const BALL_SIZE: Vec3 = const_vec3!([30.0, 30.0, 0.0]); const BALL_SIZE: Vec3 = Vec3::new(30.0, 30.0, 0.0);
const BALL_SPEED: f32 = 400.0; const BALL_SPEED: f32 = 400.0;
const INITIAL_BALL_DIRECTION: Vec2 = const_vec2!([0.5, -0.5]); const INITIAL_BALL_DIRECTION: Vec2 = Vec2::new(0.5, -0.5);
const WALL_THICKNESS: f32 = 10.0; const WALL_THICKNESS: f32 = 10.0;
// x coordinates // x coordinates
@ -33,7 +31,7 @@ const RIGHT_WALL: f32 = 450.;
const BOTTOM_WALL: f32 = -300.; const BOTTOM_WALL: f32 = -300.;
const TOP_WALL: f32 = 300.; const TOP_WALL: f32 = 300.;
const BRICK_SIZE: Vec2 = const_vec2!([100., 30.]); const BRICK_SIZE: Vec2 = Vec2::new(100., 30.);
// These values are exact // These values are exact
const GAP_BETWEEN_PADDLE_AND_BRICKS: f32 = 270.0; const GAP_BETWEEN_PADDLE_AND_BRICKS: f32 = 270.0;
const GAP_BETWEEN_BRICKS: f32 = 5.0; const GAP_BETWEEN_BRICKS: f32 = 5.0;

View File

@ -45,7 +45,7 @@ fn setup(
subdivisions: 9, subdivisions: 9,
})), })),
material: materials.add(StandardMaterial::from(Color::WHITE)), material: materials.add(StandardMaterial::from(Color::WHITE)),
transform: Transform::from_scale(Vec3::splat(-1.0)), transform: Transform::from_scale(Vec3::NEG_ONE),
..default() ..default()
}); });