namespace SceneTests.GameObjects; [TestClass] [DoNotParallelize] public class TransformsTest : SceneTest { [TestMethod] public void LocalTransform() { var scene = new Scene(); using var sceneScope = scene.Push(); var go = scene.CreateObject(); go.LocalTransform = Transform.Zero; Assert.AreEqual( go.LocalTransform, Transform.Zero ); go.LocalPosition = new Vector3( 10, 10, 10 ); Assert.AreEqual( go.LocalTransform, Transform.Zero.WithPosition( new Vector3( 10, 10, 10 ) ) ); Assert.AreEqual( go.LocalPosition, new Vector3( 10, 10, 10 ) ); } /// /// Test an object's updating /// when it moves. Make sure it works when it moves while inactive too. /// [TestMethod] [DataRow( false )] [DataRow( true )] public void WorldTransform( bool moveWhileInactive ) { var scene = new Scene(); using var sceneScope = scene.Push(); var obj = new GameObject( name: "Example" ); // WorldPosition gets cached here Assert.AreEqual( Vector3.Zero, obj.WorldPosition ); // Move object, optionally while it's inactive obj.Enabled = !moveWhileInactive; obj.LocalPosition = new Vector3( 100f, 0f, 0f ); obj.Enabled = true; // Make sure WorldPosition is updated Assert.AreEqual( new Vector3( 100f, 0f, 0f ), obj.WorldPosition ); } /// /// Test a child object's updating /// when its parent moves. Make sure it works when the parent moves while /// inactive too. /// [TestMethod] [DataRow( false )] [DataRow( true )] public void ChildWorldTransform( bool moveWhileInactive ) { var scene = new Scene(); using var sceneScope = scene.Push(); var parent = new GameObject( name: "Parent" ); var child = new GameObject( parent, name: "Child" ); // WorldPosition gets cached here Assert.AreEqual( Vector3.Zero, child.WorldPosition ); // Move parent, optionally while it's inactive parent.Enabled = !moveWhileInactive; parent.LocalPosition = new Vector3( 100f, 0f, 0f ); parent.Enabled = true; // Make sure WorldPosition is updated Assert.AreEqual( new Vector3( 100f, 0f, 0f ), child.WorldPosition ); } }