gdnative
gdnative copied to clipboard
Transform2D modifiers do not work as expected
These following test cases fail on gdnative = "0.10":
#[test]
fn test_godot_transform2d() {
use std::f32::consts::PI;
let position = Vector2::new(250.0, 150.0);
let rotation = PI / 4.0;
let transform = Transform2D::IDENTITY
.translated(position)
.rotated(rotation);
let mut transform_2 = Transform2D::IDENTITY.translated(position);
transform_2.set_rotation(rotation);
assert_eq!(transform, transform_2);
}
#[test]
fn test_godot_transform2d_2() {
use std::f32::consts::PI;
let position = Vector2::new(250.0, 150.0);
let rotation = PI / 4.0;
let transform =
Transform2D::from_rotation_translation_scale(position, rotation, Vector2::ONE);
let mut transform_2 = Transform2D::IDENTITY.translated(position);
transform_2.set_rotation(rotation);
assert_eq!(transform, transform_2);
}
---- test_godot_transform2d_2 stdout ----
thread 'test_godot_transform2d_2' panicked at 'assertion failed: `(left == right)`
left: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 70.71068, y: 282.8427 } }`,
right: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 250.0, y: 150.0 } }`'
---- test_godot_transform2d stdout ----
thread 'test_godot_transform2d' panicked at 'assertion failed: `(left == right)`
left: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 70.71068, y: 282.8427 } }`,
right: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 250.0, y: 150.0 } }`'
I believe the matrix multiply is backwards in Transform2D::rotated. The function Transform2D::from_rotation_translation_scale also suffers from the above issue, and has a odd argument order for its name.
EDIT: I was mistaken in my belief that xform_basis was not functioning correctly.