From f0fc380a39add718abd0c2c585a03e8a0573c54c Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Sat, 18 Jul 2020 14:36:16 -0700 Subject: [PATCH] transform: impl deref/derefmut for components --- crates/bevy_transform/src/components/children.rs | 14 ++++++++++++++ .../src/components/local_transform.rs | 15 ++++++++++++++- .../src/components/non_uniform_scale.rs | 15 ++++++++++++++- crates/bevy_transform/src/components/parent.rs | 14 ++++++++++++++ crates/bevy_transform/src/components/rotation.rs | 14 ++++++++++++++ crates/bevy_transform/src/components/scale.rs | 15 ++++++++++++++- .../bevy_transform/src/components/translation.rs | 16 +++++++++++++++- .../hierarchy/hierarchy_maintenance_system.rs | 3 --- examples/game/breakout.rs | 9 ++++----- 9 files changed, 103 insertions(+), 12 deletions(-) diff --git a/crates/bevy_transform/src/components/children.rs b/crates/bevy_transform/src/components/children.rs index af0dc3c3dc..861e3fa134 100644 --- a/crates/bevy_transform/src/components/children.rs +++ b/crates/bevy_transform/src/components/children.rs @@ -1,6 +1,7 @@ use bevy_ecs::Entity; use bevy_property::Properties; use smallvec::SmallVec; +use std::ops::{DerefMut, Deref}; #[derive(Default, Clone, Properties, Debug)] pub struct Children(pub SmallVec<[Entity; 8]>); @@ -10,3 +11,16 @@ impl Children { Self(SmallVec::from_slice(entity)) } } + +impl Deref for Children { + type Target = SmallVec<[Entity; 8]>; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Children { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/local_transform.rs b/crates/bevy_transform/src/components/local_transform.rs index 0482e6c4cc..a60719318b 100644 --- a/crates/bevy_transform/src/components/local_transform.rs +++ b/crates/bevy_transform/src/components/local_transform.rs @@ -1,6 +1,6 @@ use bevy_math::Mat4; use bevy_property::Properties; -use std::fmt; +use std::{ops::{DerefMut, Deref}, fmt}; #[derive(Debug, PartialEq, Clone, Copy, Properties)] pub struct LocalTransform(pub Mat4); @@ -22,3 +22,16 @@ impl fmt::Display for LocalTransform { write!(f, "{}", self.0) } } + +impl Deref for LocalTransform { + type Target = Mat4; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for LocalTransform { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/non_uniform_scale.rs b/crates/bevy_transform/src/components/non_uniform_scale.rs index 82e3b28e99..d73c881cf5 100644 --- a/crates/bevy_transform/src/components/non_uniform_scale.rs +++ b/crates/bevy_transform/src/components/non_uniform_scale.rs @@ -1,6 +1,6 @@ use bevy_math::Vec3; use bevy_property::Properties; -use std::fmt; +use std::{ops::{DerefMut, Deref}, fmt}; #[derive(Debug, PartialEq, Clone, Copy, Properties)] pub struct NonUniformScale(pub Vec3); @@ -41,3 +41,16 @@ impl fmt::Display for NonUniformScale { write!(f, "NonUniformScale({}, {}, {})", x, y, z) } } + +impl Deref for NonUniformScale { + type Target = Vec3; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for NonUniformScale { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/parent.rs b/crates/bevy_transform/src/components/parent.rs index f408a93810..c846c06704 100644 --- a/crates/bevy_transform/src/components/parent.rs +++ b/crates/bevy_transform/src/components/parent.rs @@ -1,8 +1,22 @@ use bevy_ecs::Entity; use bevy_property::Properties; +use std::ops::{DerefMut, Deref}; #[derive(Debug, Copy, Clone, Eq, PartialEq, Properties)] pub struct Parent(pub Entity); #[derive(Debug, Copy, Clone, Eq, PartialEq)] pub struct PreviousParent(pub Option); + +impl Deref for Parent { + type Target = Entity; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Parent { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/rotation.rs b/crates/bevy_transform/src/components/rotation.rs index 4767300915..197b006d81 100644 --- a/crates/bevy_transform/src/components/rotation.rs +++ b/crates/bevy_transform/src/components/rotation.rs @@ -1,5 +1,6 @@ use bevy_math::Quat; use bevy_property::Properties; +use std::ops::{Deref, DerefMut}; #[derive(Debug, PartialEq, Clone, Copy, Properties)] pub struct Rotation(pub Quat); @@ -21,3 +22,16 @@ impl From for Rotation { Self(rotation) } } + +impl Deref for Rotation { + type Target = Quat; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Rotation { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/scale.rs b/crates/bevy_transform/src/components/scale.rs index bc56aae7eb..edb364ca85 100644 --- a/crates/bevy_transform/src/components/scale.rs +++ b/crates/bevy_transform/src/components/scale.rs @@ -1,5 +1,5 @@ use bevy_property::Properties; -use std::fmt; +use std::{ops::{DerefMut, Deref}, fmt}; #[derive(Debug, PartialEq, Clone, Copy, Properties)] pub struct Scale(pub f32); @@ -29,3 +29,16 @@ impl fmt::Display for Scale { write!(f, "Scale({})", self.0) } } + +impl Deref for Scale { + type Target = f32; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Scale { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/components/translation.rs b/crates/bevy_transform/src/components/translation.rs index a049e4dffa..3e6e66039d 100644 --- a/crates/bevy_transform/src/components/translation.rs +++ b/crates/bevy_transform/src/components/translation.rs @@ -1,7 +1,8 @@ use bevy_math::Vec3; use bevy_property::Properties; +use std::ops::{DerefMut, Deref}; -#[derive(Debug, PartialEq, Clone, Copy, Properties)] +#[derive(Debug, PartialEq, Copy, Clone, Properties)] pub struct Translation(pub Vec3); impl Translation { @@ -27,3 +28,16 @@ impl From for Translation { Self(Vec3::from(translation)) } } + +impl Deref for Translation { + type Target = Vec3; + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Translation { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} \ No newline at end of file diff --git a/crates/bevy_transform/src/hierarchy/hierarchy_maintenance_system.rs b/crates/bevy_transform/src/hierarchy/hierarchy_maintenance_system.rs index 42ac1b452c..d769774843 100644 --- a/crates/bevy_transform/src/hierarchy/hierarchy_maintenance_system.rs +++ b/crates/bevy_transform/src/hierarchy/hierarchy_maintenance_system.rs @@ -166,7 +166,6 @@ mod test { world .get::(parent) .unwrap() - .0 .iter() .cloned() .collect::>(), @@ -177,7 +176,6 @@ mod test { world .get::(children[1]) .unwrap() - .0 .iter() .cloned() .collect::>(), @@ -192,7 +190,6 @@ mod test { world .get::(parent) .unwrap() - .0 .iter() .cloned() .collect::>(), diff --git a/examples/game/breakout.rs b/examples/game/breakout.rs index 32951f2328..6ce59a8773 100644 --- a/examples/game/breakout.rs +++ b/examples/game/breakout.rs @@ -193,8 +193,7 @@ fn ball_collision_system( mut brick_query: Query<(Entity, &Brick, &Translation, &Sprite)>, mut wall_query: Query<(&Wall, &Translation, &Sprite)>, ) { - for (mut ball, translation, sprite) in &mut ball_query.iter() { - let ball_position = translation.0; + for (mut ball, ball_translation, sprite) in &mut ball_query.iter() { let ball_size = sprite.size; let velocity = &mut ball.velocity; let mut collision = None; @@ -205,7 +204,7 @@ fn ball_collision_system( break; } - collision = collide(ball_position, ball_size, translation.0, sprite.size); + collision = collide(ball_translation.0, ball_size, translation.0, sprite.size); } // check collision with paddle(s) @@ -214,7 +213,7 @@ fn ball_collision_system( break; } - collision = collide(ball_position, ball_size, translation.0, sprite.size); + collision = collide(ball_translation.0, ball_size, translation.0, sprite.size); } // check collision with bricks @@ -223,7 +222,7 @@ fn ball_collision_system( break; } - collision = collide(ball_position, ball_size, translation.0, sprite.size); + collision = collide(ball_translation.0, ball_size, translation.0, sprite.size); if collision.is_some() { scoreboard.score += 1; commands.despawn(brick_entity);