Fix set_scale and set_rotation in new Transform api (#500)
This commit is contained in:
parent
d4ab2f4d47
commit
ad7613c674
@ -28,11 +28,22 @@ impl GlobalTransform {
|
|||||||
GlobalTransform::new(Mat4::from_quat(rotation))
|
GlobalTransform::new(Mat4::from_quat(rotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make sure scale is positive
|
pub fn from_scale(scale: f32) -> Self {
|
||||||
pub fn from_scale(scale: Vec3) -> Self {
|
GlobalTransform::new(Mat4::from_scale(Vec3::splat(scale)))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_non_uniform_scale(scale: Vec3) -> Self {
|
||||||
GlobalTransform::new(Mat4::from_scale(scale))
|
GlobalTransform::new(Mat4::from_scale(scale))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn from_translation_rotation_scale(translation: Vec3, rotation: Quat, scale: f32) -> Self {
|
||||||
|
GlobalTransform::new(Mat4::from_scale_rotation_translation(
|
||||||
|
Vec3::splat(scale),
|
||||||
|
rotation,
|
||||||
|
translation,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_translation(mut self, translation: Vec3) -> Self {
|
pub fn with_translation(mut self, translation: Vec3) -> Self {
|
||||||
self.translate(translation);
|
self.translate(translation);
|
||||||
self
|
self
|
||||||
@ -43,11 +54,16 @@ impl GlobalTransform {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_scale(mut self, scale: Vec3) -> Self {
|
pub fn with_scale(mut self, scale: f32) -> Self {
|
||||||
self.apply_scale(scale);
|
self.apply_scale(scale);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_non_uniform_scale(mut self, scale: Vec3) -> Self {
|
||||||
|
self.apply_non_uniform_scale(scale);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn value(&self) -> &Mat4 {
|
pub fn value(&self) -> &Mat4 {
|
||||||
&self.value
|
&self.value
|
||||||
}
|
}
|
||||||
@ -83,14 +99,21 @@ impl GlobalTransform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_rotation(&mut self, rotation: Quat) {
|
pub fn set_rotation(&mut self, rotation: Quat) {
|
||||||
let rotation = rotation * self.rotation().conjugate();
|
self.value =
|
||||||
rotation.normalize();
|
Mat4::from_scale_rotation_translation(self.scale(), rotation, self.translation());
|
||||||
self.value = Mat4::from_quat(rotation) * self.value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_scale(&mut self, scale: Vec3) {
|
pub fn set_scale(&mut self, scale: f32) {
|
||||||
let scale = scale / self.scale();
|
self.value = Mat4::from_scale_rotation_translation(
|
||||||
self.value = Mat4::from_scale(scale) * self.value;
|
Vec3::splat(scale),
|
||||||
|
self.rotation(),
|
||||||
|
self.translation(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_non_uniform_scale(&mut self, scale: Vec3) {
|
||||||
|
self.value =
|
||||||
|
Mat4::from_scale_rotation_translation(scale, self.rotation(), self.translation());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn translate(&mut self, translation: Vec3) {
|
pub fn translate(&mut self, translation: Vec3) {
|
||||||
@ -101,7 +124,11 @@ impl GlobalTransform {
|
|||||||
self.value = Mat4::from_quat(rotation) * self.value;
|
self.value = Mat4::from_quat(rotation) * self.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply_scale(&mut self, scale: Vec3) {
|
pub fn apply_scale(&mut self, scale: f32) {
|
||||||
|
self.value = Mat4::from_scale(Vec3::splat(scale)) * self.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn apply_non_uniform_scale(&mut self, scale: Vec3) {
|
||||||
self.value = Mat4::from_scale(scale) * self.value;
|
self.value = Mat4::from_scale(scale) * self.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,8 +28,19 @@ impl Transform {
|
|||||||
Transform::new(Mat4::from_quat(rotation))
|
Transform::new(Mat4::from_quat(rotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make sure scale is positive
|
pub fn from_scale(scale: f32) -> Self {
|
||||||
pub fn from_scale(scale: Vec3) -> Self {
|
Transform::new(Mat4::from_scale(Vec3::splat(scale)))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_translation_rotation_scale(translation: Vec3, rotation: Quat, scale: f32) -> Self {
|
||||||
|
Transform::new(Mat4::from_scale_rotation_translation(
|
||||||
|
Vec3::splat(scale),
|
||||||
|
rotation,
|
||||||
|
translation,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_non_uniform_scale(scale: Vec3) -> Self {
|
||||||
Transform::new(Mat4::from_scale(scale))
|
Transform::new(Mat4::from_scale(scale))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,11 +54,16 @@ impl Transform {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_scale(mut self, scale: Vec3) -> Self {
|
pub fn with_scale(mut self, scale: f32) -> Self {
|
||||||
self.apply_scale(scale);
|
self.apply_scale(scale);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_non_uniform_scale(mut self, scale: Vec3) -> Self {
|
||||||
|
self.apply_non_uniform_scale(scale);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn value(&self) -> &Mat4 {
|
pub fn value(&self) -> &Mat4 {
|
||||||
&self.value
|
&self.value
|
||||||
}
|
}
|
||||||
@ -87,14 +103,21 @@ impl Transform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_rotation(&mut self, rotation: Quat) {
|
pub fn set_rotation(&mut self, rotation: Quat) {
|
||||||
let rotation = rotation * self.rotation().conjugate();
|
self.value =
|
||||||
rotation.normalize();
|
Mat4::from_scale_rotation_translation(self.scale(), rotation, self.translation());
|
||||||
self.value = Mat4::from_quat(rotation) * self.value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_scale(&mut self, scale: Vec3) {
|
pub fn set_scale(&mut self, scale: f32) {
|
||||||
let scale = scale / self.scale();
|
self.value = Mat4::from_scale_rotation_translation(
|
||||||
self.value = Mat4::from_scale(scale) * self.value;
|
Vec3::splat(scale),
|
||||||
|
self.rotation(),
|
||||||
|
self.translation(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_non_uniform_scale(&mut self, scale: Vec3) {
|
||||||
|
self.value =
|
||||||
|
Mat4::from_scale_rotation_translation(scale, self.rotation(), self.translation());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn translate(&mut self, translation: Vec3) {
|
pub fn translate(&mut self, translation: Vec3) {
|
||||||
@ -105,7 +128,11 @@ impl Transform {
|
|||||||
self.value = Mat4::from_quat(rotation) * self.value;
|
self.value = Mat4::from_quat(rotation) * self.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply_scale(&mut self, scale: Vec3) {
|
pub fn apply_scale(&mut self, scale: f32) {
|
||||||
|
self.value = Mat4::from_scale(Vec3::splat(scale)) * self.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn apply_non_uniform_scale(&mut self, scale: Vec3) {
|
||||||
self.value = Mat4::from_scale(scale) * self.value;
|
self.value = Mat4::from_scale(scale) * self.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ fn setup(
|
|||||||
.spawn(Camera2dComponents::default())
|
.spawn(Camera2dComponents::default())
|
||||||
.spawn(SpriteSheetComponents {
|
.spawn(SpriteSheetComponents {
|
||||||
texture_atlas: texture_atlas_handle,
|
texture_atlas: texture_atlas_handle,
|
||||||
transform: Transform::from_scale(Vec3::one() * 6.0),
|
transform: Transform::from_scale(6.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(Timer::from_seconds(0.1, true));
|
.with(Timer::from_seconds(0.1, true));
|
||||||
|
|||||||
@ -61,8 +61,7 @@ fn load_atlas(
|
|||||||
.spawn(Camera2dComponents::default())
|
.spawn(Camera2dComponents::default())
|
||||||
// draw a sprite from the atlas
|
// draw a sprite from the atlas
|
||||||
.spawn(SpriteSheetComponents {
|
.spawn(SpriteSheetComponents {
|
||||||
transform: Transform::from_translation(Vec3::new(150.0, 0.0, 0.0))
|
transform: Transform::from_scale(4.0).with_translation(Vec3::new(150.0, 0.0, 0.0)),
|
||||||
.with_scale(Vec3::one() * 4.0),
|
|
||||||
sprite: TextureAtlasSprite::new(vendor_index as u32),
|
sprite: TextureAtlasSprite::new(vendor_index as u32),
|
||||||
texture_atlas: atlas_handle,
|
texture_atlas: atlas_handle,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
|||||||
@ -15,7 +15,7 @@ fn spawn_system(
|
|||||||
commands
|
commands
|
||||||
.spawn(SpriteComponents {
|
.spawn(SpriteComponents {
|
||||||
material,
|
material,
|
||||||
transform: Transform::from_scale(Vec3::one() * 0.1),
|
transform: Transform::from_scale(0.1),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.with(Velocity(
|
.with(Velocity(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user