80 lines
2.2 KiB
C#
80 lines
2.2 KiB
C#
using NUnit.Framework;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using Unity.Mathematics;
|
|
using static Rukhanka.AnimatorControllerSystemJobs;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace Rukhanka.Tests
|
|
{
|
|
public class AnimatorControllerTest
|
|
{
|
|
[Test]
|
|
public void LoopAwareTransitionTimeTest()
|
|
{
|
|
var fn = TestToolbox.GetStaticPrivateMethod<StateMachineProcessJob>("GetLoopAwareTransitionExitTime");
|
|
|
|
var testData = new List<float2>();
|
|
testData.Add(new float2(0, 0));
|
|
testData.Add(new float2(1, 0));
|
|
testData.Add(new float2(0, 1));
|
|
testData.Add(new float2(1, 1));
|
|
testData.Add(new float2(0, 2));
|
|
testData.Add(new float2(1, 2));
|
|
testData.Add(new float2(0, 3));
|
|
testData.Add(new float2(1, 3));
|
|
testData.Add(new float2(0, 3.5f));
|
|
testData.Add(new float2(1, 3.5f));
|
|
testData.Add(new float2(0, 6.99f));
|
|
testData.Add(new float2(1, 6.99f));
|
|
testData.Add(new float2(0, 7.01f));
|
|
testData.Add(new float2(1, 7.01f));
|
|
|
|
UnityEngine.Random.InitState(DateTime.Now.Millisecond);
|
|
|
|
for (var i = 0; i < 100; ++i)
|
|
{
|
|
var exitTime = UnityEngine.Random.value;
|
|
var normalizedStateTime = (UnityEngine.Random.value * 2 - 1) * 20;
|
|
testData.Add(new float2(exitTime, normalizedStateTime));
|
|
}
|
|
|
|
|
|
// Test for exit time [0..1]
|
|
foreach (var td in testData)
|
|
{
|
|
var exitTime = td.x;
|
|
var normalizedStateTime = td.y;
|
|
var t = StateMachineProcessJob.GetLoopAwareTransitionExitTime(exitTime, normalizedStateTime, math.sign(normalizedStateTime));
|
|
var dt = t - normalizedStateTime;
|
|
|
|
//Debug.Log($"ET: {exitTime}, NT: {normalizedStateTime}, Transition Time: {t}");
|
|
|
|
if (math.sign(normalizedStateTime) > 0)
|
|
{
|
|
Assert.IsTrue(dt >= 0);
|
|
Assert.IsTrue(dt <= 1);
|
|
}
|
|
else
|
|
{
|
|
Assert.IsTrue(dt <= 0);
|
|
Assert.IsTrue(dt >= -1);
|
|
}
|
|
}
|
|
|
|
// Test for exit time >= 1
|
|
for (var i = 0; i < 20; ++i)
|
|
{
|
|
var exitTime = UnityEngine.Random.value * 10 + 1;
|
|
var normalizedStateTime = (UnityEngine.Random.value * 2 - 1) * 20;
|
|
|
|
var sgn = math.sign(normalizedStateTime);
|
|
var t = StateMachineProcessJob.GetLoopAwareTransitionExitTime(exitTime, normalizedStateTime, sgn);
|
|
|
|
Assert.IsTrue(t == exitTime * sgn);
|
|
}
|
|
}
|
|
}
|
|
}
|