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 );
}
}