Fix bug in Basis [] operator and add missing Transform-Vector3 * operator

The [] operator of Basis was returning a reference to a temporary, so fixed it.
There was no * operator in Transform equivalent to the xform function, which is
not in line with GDScript behavior.

Also fixed remaining cases where Transform relied on the old behavior of the
[] operator of Basis (i.e. that it returns the row, not the column).
This commit is contained in:
Daniel Rakos
2019-04-11 17:06:02 +02:00
parent f0fe88bd36
commit 4be7fcdde5
3 changed files with 12 additions and 5 deletions

View File

@@ -307,7 +307,7 @@ public:
Basis();
const Vector3 &operator[](int axis) const {
const Vector3 operator[](int axis) const {
return get_axis(axis);
}

View File

@@ -58,6 +58,13 @@ public:
void operator*=(const Transform &p_transform);
Transform operator*(const Transform &p_transform) const;
inline Vector3 operator*(const Vector3 &p_vector) const {
return Vector3(
basis.elements[0].dot(p_vector) + origin.x,
basis.elements[1].dot(p_vector) + origin.y,
basis.elements[2].dot(p_vector) + origin.z);
}
Transform interpolate_with(const Transform &p_transform, real_t p_c) const;
Transform inverse_xform(const Transform &t) const;