Skip to content

Commit 56a4a35

Browse files
committed
Pass Transform2D, Transform3D, Basis by-ref
1 parent 4a2484e commit 56a4a35

File tree

6 files changed

+62
-61
lines changed

6 files changed

+62
-61
lines changed

godot-core/src/builtin/basis.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,15 @@ impl Basis {
162162
}
163163

164164
/// Creates a `[Vector3; 3]` with the columns of the `Basis`.
165-
pub fn to_cols(self) -> [Vector3; 3] {
165+
pub fn to_cols(&self) -> [Vector3; 3] {
166166
self.transposed().rows
167167
}
168168

169169
/// Creates a [`Quaternion`] representing the same rotation as this basis.
170170
///
171171
/// _Godot equivalent: `Basis.get_rotation_quaternion()`_
172172
#[doc(alias = "get_rotation_quaternion")]
173-
pub fn to_quat(self) -> Quaternion {
173+
pub fn to_quat(&self) -> Quaternion {
174174
RQuat::from_mat3(&self.orthonormalized().to_glam()).to_front()
175175
}
176176

@@ -211,7 +211,7 @@ impl Basis {
211211
/// The order of the angles are given by `order`.
212212
///
213213
/// _Godot equivalent: `Basis.get_euler()`_
214-
pub fn to_euler(self, order: EulerOrder) -> Vector3 {
214+
pub fn to_euler(&self, order: EulerOrder) -> Vector3 {
215215
use glam::swizzles::Vec3Swizzles as _;
216216

217217
let col_a = self.col_a().to_glam();
@@ -346,23 +346,23 @@ impl Basis {
346346
///
347347
/// _Godot equivalent: `Basis.scaled()`_
348348
#[must_use]
349-
pub fn scaled(self, scale: Vector3) -> Self {
350-
Self::from_diagonal(scale.x, scale.y, scale.z) * self
349+
pub fn scaled(&self, scale: Vector3) -> Self {
350+
Self::from_diagonal(scale.x, scale.y, scale.z) * (*self)
351351
}
352352

353353
/// Returns the inverse of the matrix.
354354
///
355355
/// _Godot equivalent: `Basis.inverse()`_
356356
#[must_use]
357-
pub fn inverse(self) -> Basis {
357+
pub fn inverse(&self) -> Basis {
358358
self.glam(|mat| mat.inverse())
359359
}
360360

361361
/// Returns the transposed version of the matrix.
362362
///
363363
/// _Godot equivalent: `Basis.transposed()`_
364364
#[must_use]
365-
pub fn transposed(self) -> Self {
365+
pub fn transposed(&self) -> Self {
366366
Self::from_cols(self.rows[0], self.rows[1], self.rows[2])
367367
}
368368

@@ -376,7 +376,7 @@ impl Basis {
376376
///
377377
/// _Godot equivalent: `Basis.orthonormalized()`_
378378
#[must_use]
379-
pub fn orthonormalized(self) -> Self {
379+
pub fn orthonormalized(&self) -> Self {
380380
assert!(
381381
!self.determinant().is_zero_approx(),
382382
"Determinant should not be zero."
@@ -401,16 +401,16 @@ impl Basis {
401401
///
402402
/// _Godot equivalent: `Basis.rotated()`_
403403
#[must_use]
404-
pub fn rotated(self, axis: Vector3, angle: real) -> Self {
405-
Self::from_axis_angle(axis, angle) * self
404+
pub fn rotated(&self, axis: Vector3, angle: real) -> Self {
405+
Self::from_axis_angle(axis, angle) * (*self)
406406
}
407407

408408
/// Assuming that the matrix is a proper rotation matrix, slerp performs
409409
/// a spherical-linear interpolation with another rotation matrix.
410410
///
411411
/// _Godot equivalent: `Basis.slerp()`_
412412
#[must_use]
413-
pub fn slerp(self, other: Self, weight: real) -> Self {
413+
pub fn slerp(&self, other: &Self, weight: real) -> Self {
414414
let from = self.to_quat();
415415
let to = other.to_quat();
416416

godot-core/src/builtin/transform2d.rs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,8 @@ impl Transform2D {
136136
}
137137

138138
/// Create a [`Basis2D`] from the first two columns of the transform.
139-
fn to_basis(self) -> Basis2D {
139+
#[allow(clippy::wrong_self_convention)]
140+
fn to_basis(&self) -> Basis2D {
140141
Basis2D::from_cols(self.a, self.b)
141142
}
142143

@@ -145,7 +146,7 @@ impl Transform2D {
145146
///
146147
/// _Godot equivalent: `Transform2D.affine_inverse()`_
147148
#[must_use]
148-
pub fn affine_inverse(self) -> Self {
149+
pub fn affine_inverse(&self) -> Self {
149150
self.glam(|aff| aff.inverse())
150151
}
151152

@@ -177,7 +178,7 @@ impl Transform2D {
177178
///
178179
/// _Godot equivalent: `Transform2D.interpolate_with()`_
179180
#[must_use]
180-
pub fn interpolate_with(self, other: Self, weight: real) -> Self {
181+
pub fn interpolate_with(&self, other: &Self, weight: real) -> Self {
181182
Self::from_angle_scale_skew_origin(
182183
self.rotation().lerp_angle(other.rotation(), weight),
183184
self.scale().lerp(other.scale(), weight),
@@ -199,7 +200,7 @@ impl Transform2D {
199200
///
200201
/// _Godot equivalent: `Transform2D.orthonormalized()`_
201202
#[must_use]
202-
pub fn orthonormalized(self) -> Self {
203+
pub fn orthonormalized(&self) -> Self {
203204
Self::from_basis_origin(self.basis().orthonormalized(), self.origin)
204205
}
205206

@@ -210,8 +211,8 @@ impl Transform2D {
210211
///
211212
/// _Godot equivalent: `Transform2D.rotated()`_
212213
#[must_use]
213-
pub fn rotated(self, angle: real) -> Self {
214-
Self::from_angle(angle) * self
214+
pub fn rotated(&self, angle: real) -> Self {
215+
Self::from_angle(angle) * (*self)
215216
}
216217

217218
/// Returns a copy of the transform rotated by the given `angle` (in radians).
@@ -221,8 +222,8 @@ impl Transform2D {
221222
///
222223
/// _Godot equivalent: `Transform2D.rotated_local()`_
223224
#[must_use]
224-
pub fn rotated_local(self, angle: real) -> Self {
225-
self * Self::from_angle(angle)
225+
pub fn rotated_local(&self, angle: real) -> Self {
226+
(*self) * Self::from_angle(angle)
226227
}
227228

228229
/// Returns a copy of the transform scaled by the given scale factor.
@@ -232,7 +233,7 @@ impl Transform2D {
232233
///
233234
/// _Godot equivalent: `Transform2D.scaled()`_
234235
#[must_use]
235-
pub fn scaled(self, scale: Vector2) -> Self {
236+
pub fn scaled(&self, scale: Vector2) -> Self {
236237
let mut basis = self.to_basis();
237238
basis.set_row_a(basis.row_a() * scale.x);
238239
basis.set_row_b(basis.row_b() * scale.y);
@@ -246,7 +247,7 @@ impl Transform2D {
246247
///
247248
/// _Godot equivalent: `Transform2D.scaled_local()`_
248249
#[must_use]
249-
pub fn scaled_local(self, scale: Vector2) -> Self {
250+
pub fn scaled_local(&self, scale: Vector2) -> Self {
250251
Self::from_basis_origin(self.basis().scaled(scale), self.origin)
251252
}
252253

@@ -257,7 +258,7 @@ impl Transform2D {
257258
///
258259
/// _Godot equivalent: `Transform2D.translated()`_
259260
#[must_use]
260-
pub fn translated(self, offset: Vector2) -> Self {
261+
pub fn translated(&self, offset: Vector2) -> Self {
261262
Self::from_cols(self.a, self.b, self.origin + offset)
262263
}
263264

@@ -268,7 +269,7 @@ impl Transform2D {
268269
///
269270
/// _Godot equivalent: `Transform2D.translated()`_
270271
#[must_use]
271-
pub fn translated_local(self, offset: Vector2) -> Self {
272+
pub fn translated_local(&self, offset: Vector2) -> Self {
272273
Self::from_cols(self.a, self.b, self.origin + (self.to_basis() * offset))
273274
}
274275

@@ -670,7 +671,7 @@ mod test {
670671
);
671672

672673
let interpolated: Transform2D =
673-
Transform2D::IDENTITY.interpolate_with(rotate_scale_skew_pos, 0.5);
674+
Transform2D::IDENTITY.interpolate_with(&rotate_scale_skew_pos, 0.5);
674675
assert_eq_approx!(interpolated.origin, rotate_scale_skew_pos_halfway.origin);
675676
assert_eq_approx!(
676677
interpolated.rotation(),
@@ -680,7 +681,7 @@ mod test {
680681
assert_eq_approx!(interpolated.skew(), rotate_scale_skew_pos_halfway.skew());
681682
assert_eq_approx!(interpolated, rotate_scale_skew_pos_halfway);
682683

683-
let interpolated = rotate_scale_skew_pos.interpolate_with(Transform2D::IDENTITY, 0.5);
684+
let interpolated = rotate_scale_skew_pos.interpolate_with(&Transform2D::IDENTITY, 0.5);
684685
assert_eq_approx!(interpolated, rotate_scale_skew_pos_halfway);
685686
}
686687

godot-core/src/builtin/transform3d.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ impl Transform3D {
8181
/// the projection matrix.
8282
///
8383
/// _Godot equivalent: `Transform3D(Projection from)`_
84-
pub fn from_projection(proj: Projection) -> Self {
84+
pub fn from_projection(proj: &Projection) -> Self {
8585
let a = Vector3::new(proj.cols[0].x, proj.cols[0].y, proj.cols[0].z);
8686
let b = Vector3::new(proj.cols[1].x, proj.cols[1].y, proj.cols[1].z);
8787
let c = Vector3::new(proj.cols[2].x, proj.cols[2].y, proj.cols[2].z);
@@ -114,14 +114,14 @@ impl Transform3D {
114114
/// Returns the inverse of the transform, under the assumption that the
115115
/// transformation is composed of rotation, scaling and translation.
116116
#[must_use]
117-
pub fn affine_inverse(self) -> Self {
117+
pub fn affine_inverse(&self) -> Self {
118118
self.glam(|aff| aff.inverse())
119119
}
120120

121121
/// Returns a transform interpolated between this transform and another by
122122
/// a given weight (on the range of 0.0 to 1.0).
123123
#[must_use]
124-
pub fn interpolate_with(self, other: Self, weight: real) -> Self {
124+
pub fn interpolate_with(&self, other: &Self, weight: real) -> Self {
125125
let src_scale = self.basis.scale();
126126
let src_rot = self.basis.to_quat().normalized();
127127
let src_loc = self.origin;
@@ -151,7 +151,7 @@ impl Transform3D {
151151
/// See [`Basis::new_looking_at()`] for more information.
152152
#[cfg(before_api = "4.1")]
153153
#[must_use]
154-
pub fn looking_at(self, target: Vector3, up: Vector3) -> Self {
154+
pub fn looking_at(&self, target: Vector3, up: Vector3) -> Self {
155155
Self {
156156
basis: Basis::new_looking_at(target - self.origin, up),
157157
origin: self.origin,
@@ -160,7 +160,7 @@ impl Transform3D {
160160

161161
#[cfg(since_api = "4.1")]
162162
#[must_use]
163-
pub fn looking_at(self, target: Vector3, up: Vector3, use_model_front: bool) -> Self {
163+
pub fn looking_at(&self, target: Vector3, up: Vector3, use_model_front: bool) -> Self {
164164
Self {
165165
basis: Basis::new_looking_at(target - self.origin, up, use_model_front),
166166
origin: self.origin,
@@ -172,7 +172,7 @@ impl Transform3D {
172172
///
173173
/// _Godot equivalent: Transform3D.orthonormalized()_
174174
#[must_use]
175-
pub fn orthonormalized(self) -> Self {
175+
pub fn orthonormalized(&self) -> Self {
176176
Self {
177177
basis: self.basis.orthonormalized(),
178178
origin: self.origin,
@@ -186,7 +186,7 @@ impl Transform3D {
186186
///
187187
/// _Godot equivalent: `Transform2D.rotated()`_
188188
#[must_use]
189-
pub fn rotated(self, axis: Vector3, angle: real) -> Self {
189+
pub fn rotated(&self, axis: Vector3, angle: real) -> Self {
190190
let rotation = Basis::from_axis_angle(axis, angle);
191191
Self {
192192
basis: rotation * self.basis,
@@ -200,7 +200,7 @@ impl Transform3D {
200200
///
201201
/// _Godot equivalent: `Transform2D.rotated_local()`_
202202
#[must_use]
203-
pub fn rotated_local(self, axis: Vector3, angle: real) -> Self {
203+
pub fn rotated_local(&self, axis: Vector3, angle: real) -> Self {
204204
Self {
205205
basis: self.basis * Basis::from_axis_angle(axis, angle),
206206
origin: self.origin,
@@ -214,7 +214,7 @@ impl Transform3D {
214214
///
215215
/// _Godot equivalent: `Transform2D.scaled()`_
216216
#[must_use]
217-
pub fn scaled(self, scale: Vector3) -> Self {
217+
pub fn scaled(&self, scale: Vector3) -> Self {
218218
Self {
219219
basis: Basis::from_scale(scale) * self.basis,
220220
origin: self.origin * scale,
@@ -228,7 +228,7 @@ impl Transform3D {
228228
///
229229
/// _Godot equivalent: `Transform2D.scaled_local()`_
230230
#[must_use]
231-
pub fn scaled_local(self, scale: Vector3) -> Self {
231+
pub fn scaled_local(&self, scale: Vector3) -> Self {
232232
Self {
233233
basis: self.basis * Basis::from_scale(scale),
234234
origin: self.origin,
@@ -242,7 +242,7 @@ impl Transform3D {
242242
///
243243
/// _Godot equivalent: `Transform2D.translated()`_
244244
#[must_use]
245-
pub fn translated(self, offset: Vector3) -> Self {
245+
pub fn translated(&self, offset: Vector3) -> Self {
246246
Self {
247247
basis: self.basis,
248248
origin: self.origin + offset,
@@ -256,7 +256,7 @@ impl Transform3D {
256256
///
257257
/// _Godot equivalent: `Transform2D.translated()`_
258258
#[must_use]
259-
pub fn translated_local(self, offset: Vector3) -> Self {
259+
pub fn translated_local(&self, offset: Vector3) -> Self {
260260
Self {
261261
basis: self.basis,
262262
origin: self.origin + (self.basis * offset),

itest/rust/src/builtin_tests/geometry/basis_test.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,12 @@ fn basis_equiv() {
122122

123123
#[rustfmt::skip]
124124
let mappings_basis = [
125-
("inverse", inner.inverse(), outer.inverse() ),
126-
("transposed", inner.transposed(), outer.transposed() ),
127-
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
128-
("rotated", inner.rotated(vec.normalized(), 0.1), outer.rotated(vec.normalized(), 0.1)),
129-
("scaled", inner.scaled(vec), outer.scaled(vec) ),
130-
("slerp", inner.slerp(Basis::IDENTITY, 0.5), outer.slerp(Basis::IDENTITY, 0.5) ),
125+
("inverse", inner.inverse(), outer.inverse() ),
126+
("transposed", inner.transposed(), outer.transposed() ),
127+
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
128+
("rotated", inner.rotated(vec.normalized(), 0.1), outer.rotated(vec.normalized(), 0.1) ),
129+
("scaled", inner.scaled(vec), outer.scaled(vec) ),
130+
("slerp", inner.slerp(Basis::IDENTITY, 0.5), outer.slerp(&Basis::IDENTITY, 0.5) ),
131131
];
132132
for (name, inner, outer) in mappings_basis {
133133
assert_eq_approx!(inner, outer, "function: {name}\n");

itest/rust/src/builtin_tests/geometry/transform2d_test.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ fn transform2d_equiv() {
2626

2727
#[rustfmt::skip]
2828
let mappings_transform = [
29-
("affine_inverse", inner.affine_inverse(), outer.affine_inverse() ),
30-
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
31-
("rotated", inner.rotated(1.0), outer.rotated(1.0) ),
32-
("rotated_local", inner.rotated_local(1.0), outer.rotated_local(1.0) ),
33-
("scaled", inner.scaled(vec), outer.scaled(vec) ),
34-
("scaled_local", inner.scaled_local(vec), outer.scaled_local(vec) ),
35-
("translated", inner.translated(vec), outer.translated(vec) ),
36-
("translated_local", inner.translated_local(vec), outer.translated_local(vec) ),
37-
("interpolate_with", inner.interpolate_with(Transform2D::IDENTITY, 0.5), outer.interpolate_with(Transform2D::IDENTITY, 0.5))
29+
("affine_inverse", inner.affine_inverse(), outer.affine_inverse() ),
30+
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
31+
("rotated", inner.rotated(1.0), outer.rotated(1.0) ),
32+
("rotated_local", inner.rotated_local(1.0), outer.rotated_local(1.0) ),
33+
("scaled", inner.scaled(vec), outer.scaled(vec) ),
34+
("scaled_local", inner.scaled_local(vec), outer.scaled_local(vec) ),
35+
("translated", inner.translated(vec), outer.translated(vec) ),
36+
("translated_local", inner.translated_local(vec), outer.translated_local(vec) ),
37+
("interpolate_with", inner.interpolate_with(Transform2D::IDENTITY, 0.5), outer.interpolate_with(&Transform2D::IDENTITY, 0.5))
3838
];
3939
for (name, inner, outer) in mappings_transform {
4040
assert_eq_approx!(inner, outer, "function: {name}\n");

itest/rust/src/builtin_tests/geometry/transform3d_test.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ fn transform3d_equiv() {
2929

3030
#[rustfmt::skip]
3131
let mappings_transform = [
32-
("affine_inverse", inner.affine_inverse(), outer.affine_inverse() ),
33-
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
34-
("rotated", inner.rotated(vec.normalized(), 1.0), outer.rotated(vec.normalized(), 1.0) ),
35-
("rotated_local", inner.rotated_local(vec.normalized(), 1.0), outer.rotated_local(vec.normalized(), 1.0) ),
36-
("scaled", inner.scaled(vec), outer.scaled(vec) ),
37-
("scaled_local", inner.scaled_local(vec), outer.scaled_local(vec) ),
38-
("translated", inner.translated(vec), outer.translated(vec) ),
39-
("translated_local", inner.translated_local(vec), outer.translated_local(vec) ),
40-
("interpolate_with", inner.interpolate_with(Transform3D::IDENTITY, 0.5), outer.interpolate_with(Transform3D::IDENTITY, 0.5))
32+
("affine_inverse", inner.affine_inverse(), outer.affine_inverse() ),
33+
("orthonormalized", inner.orthonormalized(), outer.orthonormalized() ),
34+
("rotated", inner.rotated(vec.normalized(), 1.0), outer.rotated(vec.normalized(), 1.0) ),
35+
("rotated_local", inner.rotated_local(vec.normalized(), 1.0), outer.rotated_local(vec.normalized(), 1.0) ),
36+
("scaled", inner.scaled(vec), outer.scaled(vec) ),
37+
("scaled_local", inner.scaled_local(vec), outer.scaled_local(vec) ),
38+
("translated", inner.translated(vec), outer.translated(vec) ),
39+
("translated_local", inner.translated_local(vec), outer.translated_local(vec) ),
40+
("interpolate_with", inner.interpolate_with(Transform3D::IDENTITY, 0.5), outer.interpolate_with(&Transform3D::IDENTITY, 0.5))
4141
];
4242
for (name, inner, outer) in mappings_transform {
4343
assert_eq_approx!(inner, outer, "function: {name}\n");

0 commit comments

Comments
 (0)