public IEnumerator TrailGetsLongerDuringRace() { yield return(Given.Scene(this, "MainScene")); var tron = Find.SingleObjectById("Tron"); var originalTronBackBorder = GeometryUtils.GetBackBorder(tron); var tronTransform = tron.transform; tronTransform.GetComponent <Tron>().StartRace(); var tronMoved = new ObjectMovedPredicate(tronTransform, 0.5f); var waiter = new WaitUntilOrTimeout(tronMoved.HasMoved, 2.0f); yield return(waiter); waiter.AssertTimeoutWasNotReached("move of Tron"); var currentTronBackBorder = GeometryUtils.GetBackBorder(tron); var trail = Find.SingleObjectById("Trail"); // still at same back position var trailBackBorder = GeometryUtils.GetBackBorder(trail); var comparer = new Vector3EqualityComparer(0.0001f); Assert.That(trailBackBorder, Is.EqualTo(originalTronBackBorder).Using(comparer), "trailBackBorder"); var trailFrontBorder = GeometryUtils.GetFrontBorder(trail); Assert.That(trailFrontBorder, Is.EqualTo(currentTronBackBorder).Using(comparer), "trailFrontBorder"); }
public void GenerateMesh_OnLine_ReturnsCorrectVertices() { var geometry = new Geometry() { geometryKind = GeometryKind.Line, startPose = new RigidTransform(quaternion.identity, float3.zero), length = 0.4f, sRoad = 0f }; var wd2 = RoadNetworkMesher.RoadWidth * .5f; // NOTE: The expected values here vary with respect to the const values in RoadNetworkMesher var verticesExpected = new[] { new Vector3(-wd2, 0, 0), new Vector3(wd2, 0, 0), new Vector3(-wd2, 0, 0.3f), new Vector3(wd2, 0, 0.3f), new Vector3(-wd2, 0, 0.4f), new Vector3(wd2, 0, 0.4f) }; var mesh = RoadNetworkMesher.BuildMeshForGeometry(geometry, 3); var verticesActual = mesh.vertices; Assert.AreEqual(verticesExpected.Length, verticesActual.Length); // It is ok for the generated vertices to be slightly off from the exact values we expect var laxVectorComparer = new Vector3EqualityComparer(0.1f); foreach (var vertex in verticesExpected) { Assert.IsTrue(verticesActual.Contains(vertex, laxVectorComparer)); } }
void Update() { Vector3EqualityComparer comparer = new Vector3EqualityComparer(); if (isClone && Vector3.Equals(transform.position, imitated.transform.position)) { if (CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down) is Cube) { Clone(CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down)); } else { UnClone(); } } }
public void InverseTransformPoint() { var foo = new GameObject("foo"); var bar = new GameObject("bar"); foo.transform.position = Vector3.one; foo.transform.rotation = Quaternion.Euler(new Vector3(0, 180, 0)); var inv1 = foo.transform.InverseTransformPoint(bar.transform.position); var inv2 = Matrix4x4.TRS(foo.transform.position, foo.transform.rotation, foo.transform.lossyScale) .inverse .MultiplyPoint3x4(bar.transform.position); var comparer = new Vector3EqualityComparer(10e-6f); Assert.That(inv1, Is.EqualTo(inv2).Using(comparer)); }
public IEnumerator BoundaryPoints() { AddExtension(MockRuntime.XR_UNITY_mock_test); base.InitializeAndStart(); yield return(null); Assert.IsTrue(base.IsRunning <XRInputSubsystem>(), "Input subsystem failed to properly start!"); MockRuntime.SetReferenceSpaceBounds(XrReferenceSpaceType.Stage, new Vector2 { x = 1.0f, y = 3.0f }); yield return(null); var input = Loader.GetLoadedSubsystem <XRInputSubsystem>(); Assert.That(() => input, Is.Not.Null); input.TrySetTrackingOriginMode(TrackingOriginModeFlags.Floor); yield return(null); var points = new List <Vector3>(); Assert.IsTrue(input.TryGetBoundaryPoints(points), "Failed to get boundary points!"); Assert.That(() => points.Count, Is.EqualTo(4), "Incorrect number of boundary points received!"); var comparer = new Vector3EqualityComparer(10e-6f); Assert.That(points[0], Is.EqualTo(new Vector3 { x = -1.0f, y = 0.0f, z = -3.0f }).Using(comparer)); Assert.That(points[1], Is.EqualTo(new Vector3 { x = -1.0f, y = 0.0f, z = 3.0f }).Using(comparer)); Assert.That(points[2], Is.EqualTo(new Vector3 { x = 1.0f, y = 0.0f, z = 3.0f }).Using(comparer)); Assert.That(points[3], Is.EqualTo(new Vector3 { x = 1.0f, y = 0.0f, z = -3.0f }).Using(comparer)); }
public IEnumerator ball_moves_3_units_per_second() { var ball = CreateTestBall(); try { yield return(WaitForFixedTime(1f)); // Allow for 1 frame of error. var equalityComparer = new Vector3EqualityComparer(0.01f); Assert.That( ball.transform.position, Is.EqualTo(new Vector3(0f, 3f)).Using(equalityComparer) ); } finally { Object.Destroy(ball); } }
public void InverseTransformPointLookRotation() { var comparer = new Vector3EqualityComparer(10e-6f); var foo = new GameObject("foo"); var bar = new GameObject("bar"); bar.transform.position = Vector3.right; // (1, 0, 0) foo.transform.rotation = Quaternion.LookRotation(bar.transform.position); Assert.That(bar.transform.position, Is.EqualTo(new Vector3(1, 0, 0)).Using(comparer)); Assert.That(foo.transform.rotation * Vector3.forward, Is.EqualTo(bar.transform.position).Using(comparer)); var inv1 = foo.transform.InverseTransformPoint(bar.transform.position); var inv2 = Matrix4x4.TRS( foo.transform.position, foo.transform.rotation, foo.transform.lossyScale) .inverse .MultiplyPoint3x4(bar.transform.position); Assert.That(inv1, Is.EqualTo(inv2).Using(comparer)); }
void Update() { Vector3EqualityComparer comparer = new Vector3EqualityComparer(); if (isClone && Vector3.Equals(transform.position,imitated.transform.position)) { if (CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down) is Cube) { Clone(CubeHelper.GetEntityInPosition(imitated.transform.position + Vector3.down)); } else { UnClone(); } } }
public void MatrixDecomposeTest() { // Corner case matrix (90°/0°/45° rotation with -1/-1/-1 scale) var m = new Matrix4x4( new Vector4( -0.7071067811865474f, 0f, -0.7071067811865477f, 0f ), new Vector4( 0.7071067811865477f, 0f, -0.7071067811865474f, 0f ), new Vector4( 0f, 1f, 0f, 0f ), new Vector4( 0f, 0f, 0f, 1f ) ); var m2 = new float4x4( m.m00, m.m01, m.m02, m.m03, m.m10, m.m11, m.m12, m.m13, m.m20, m.m21, m.m22, m.m23, m.m30, m.m31, m.m32, m.m33 ); Profiler.BeginSample("Matrix4x4.DecomposeUnity"); if (m.ValidTRS()) { Vector3 t1 = new Vector3(m.m03, m.m13, m.m23); Quaternion r1 = m.rotation; Vector3 s1 = m.lossyScale; } Profiler.EndSample(); Profiler.BeginSample("Matrix4x4.DecomposeCustom"); m.Decompose(out var t, out var r, out var s); Profiler.EndSample(); var comparer3 = new Vector3EqualityComparer(10e-6f); var comparer4 = new QuaternionEqualityComparer(10e-6f); Assert.That(t, Is.EqualTo(new Vector3(0, 0, 0)).Using(comparer3)); Assert.That(r, Is.EqualTo(new Quaternion(0.65328151f, -0.270598054f, 0.270598054f, 0.65328151f)).Using(comparer4)); Assert.That(s, Is.EqualTo(new Vector3(-.99999994f, -.99999994f, -1)).Using(comparer3)); Profiler.BeginSample("float4x4.Decompose"); m2.Decompose(out var t3, out var r3, out var s3); Profiler.EndSample(); Assert.That((Vector3)t3, Is.EqualTo(new Vector3(0, 0, 0)).Using(comparer3)); Assert.That((Quaternion) new quaternion(r3), Is.EqualTo(new Quaternion(0.65328151f, -0.270598054f, 0.270598054f, 0.65328151f)).Using(comparer4)); Assert.That((Vector3)s3, Is.EqualTo(new Vector3(-.99999994f, -.99999994f, -1)).Using(comparer3)); }