public void GameobjectTranslation( [NUnit.Framework.Range(0, 10, 5)] int x, [NUnit.Framework.Range(0, 10, 5)] int y, [NUnit.Framework.Range(0, 10, 5)] int z) { ISpline3DPlane spline = PrepareSpline(); Assume.That(spline is MonoBehaviour, "Test isn't valid for this spline"); float3 a = new float3(0f, 0f, 0f); spline.AddControlPoint(a); float3 b = new float3(10f, 0f, 0f); spline.AddControlPoint(b); Assert.AreEqual(2, spline.ControlPointCount); // make sure everything is where it's supposed to be TestHelpers.CheckFloat3(a, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat3(b, spline.Get3DPointWorld(1f)); TestHelpers.CheckFloat2(a.xy, spline.Get2DPointWorld(0f)); TestHelpers.CheckFloat2(b.xy, spline.Get2DPointWorld(1f)); // move the gameobject float3 pos = new float3(x, y, z); MoveGameobject(spline, pos); // check that the spline has moved accordingly TestHelpers.CheckFloat3(a + pos, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat3(b + pos, spline.Get3DPointWorld(1f)); TestHelpers.CheckFloat2((a + pos).xy, spline.Get2DPointWorld(0f)); TestHelpers.CheckFloat2((b + pos).xy, spline.Get2DPointWorld(1f)); }
public void Rotation() { ISpline3DPlane spline = PrepareSpline(); float3 a = new float3(10f, 5f, 0f); spline.AddControlPoint(a); TestHelpers.CheckFloat3(a, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat2(a.xy, spline.Get2DPointWorld(0f)); { // rotate a little bit Quaternion targetRotation = Quaternion.Euler(0f, 90f, 0f); spline.Forward = targetRotation; TestHelpers.CheckFloat3(new float3(0f, 5f, -10f), spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat2(a.xy, spline.Get2DPointWorld(0f)); } { // Go back to the original orientation Quaternion targetRotation = Quaternion.Euler(0f, 0f, 0f); spline.Forward = targetRotation; TestHelpers.CheckFloat3(a, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat2(a.xy, spline.Get2DPointWorld(0f)); } }
private void MoveGameobject(ISpline3DPlane spline, float3 pos) { Transform trans = (spline as MonoBehaviour)?.transform; Assert.IsNotNull(trans); Debug.Log($"Moving to {pos}"); trans.position = pos; }
/// <inheritdoc cref="Base3DEditor.DrawSelectedHandles"/> protected override void DrawSelectedHandles(ISpline3DEditor spline, int pointIndex) { float3 point = spline.GetControlPoint3DWorld(pointIndex); EditorGUI.BeginChangeCheck(); ISpline3DPlane plane = spline as ISpline3DPlane; float3 pos = Handles.DoPositionHandle(point, plane.Forward); if (EditorGUI.EndChangeCheck() && spline is Object objSpline) { Undo.RecordObject(objSpline, "Move Point"); EditorUtility.SetDirty(objSpline); spline.UpdateControlPointWorld(pointIndex, pos, SplinePoint.Point); SceneView.RepaintAll(); } }
public void GameobjectAxisTranslationRotation( [NUnit.Framework.Range(0, 10, 5)] int x, [NUnit.Framework.Range(0, 10, 5)] int y, [NUnit.Framework.Range(0, 10, 5)] int z, [NUnit.Framework.Range(-90, 90, 45)] int yRotation) { ISpline3DPlane spline = PrepareSpline(); Assume.That(spline is MonoBehaviour, "Test isn't valid for this spline"); float3 a = new float3(0f, 0f, 0f); spline.AddControlPoint(a); float3 b = new float3(10f, 0f, 0f); spline.AddControlPoint(b); Assert.AreEqual(2, spline.ControlPointCount); // make sure everything is where it's supposed to be TestHelpers.CheckFloat3(a, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat2(a.xy, spline.Get2DPointWorld(0f)); TestHelpers.CheckFloat3(b, spline.Get3DPointWorld(1f)); TestHelpers.CheckFloat2(b.xy, spline.Get2DPointWorld(1f)); // move the gameobject float3 pos = new float3(x, y, z); MoveGameobject(spline, pos); // check that the spline has moved accordingly TestHelpers.CheckFloat3(a + pos, spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat3(b + pos, spline.Get3DPointWorld(1f)); { // rotate a little bit Quaternion targetRotation = Quaternion.Euler(0f, yRotation, 0f); spline.Forward = targetRotation; TestHelpers.CheckFloat3(pos + ((float3)(targetRotation * a)), spline.Get3DPointWorld(0f)); TestHelpers.CheckFloat3(pos + ((float3)(targetRotation * b)), spline.Get3DPointWorld(1f)); } }