430 lines
19 KiB
C#
430 lines
19 KiB
C#
using AnimatorAsCode.V0.Extensions.VRChat;
|
|
using NUnit.Framework;
|
|
using VRC.SDK3.Avatars.Components;
|
|
using VRC.SDKBase;
|
|
|
|
namespace av3_animator_as_code.Tests.PlayMode.GenerationTests
|
|
{
|
|
public class AIACVRCExtensionsDriverGenerationTest : AbstractSimpleSingleLayerAIAC
|
|
{
|
|
[Test]
|
|
public void It_generates_a_driver_that_sets_bool_to_true()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.Drives(fx.BoolParameter("MyBool"), true);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyBool", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Set, eParameter.type);
|
|
Assert.AreEqual(1f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_sets_bool_to_false()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.Drives(fx.BoolParameter("MyBool"), false);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyBool", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Set, eParameter.type);
|
|
Assert.AreEqual(0f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_sets_int_to_300()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.Drives(fx.IntParameter("MyInt"), 300);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyInt", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Set, eParameter.type);
|
|
Assert.AreEqual(300f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_sets_float_to_400_point_56()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.Drives(fx.FloatParameter("MyFloat"), 400.56f);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloat", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Set, eParameter.type);
|
|
Assert.AreEqual(400.56f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_increases_int_by_2()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingIncreases(fx.IntParameter("MyInt"), 2);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyInt", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Add, eParameter.type);
|
|
Assert.AreEqual(2f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_decreases_int_by_2_through_adding_its_opposite()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingDecreases(fx.IntParameter("MyInt"), 2);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyInt", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Add, eParameter.type);
|
|
Assert.AreEqual(-2f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_increases_float_by_3_point_4()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingIncreases(fx.FloatParameter("MyFloat"), 3.4f);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloat", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Add, eParameter.type);
|
|
Assert.AreEqual(3.4f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_decreases_float_by_3_point_4_through_adding_its_opposite()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingDecreases(fx.FloatParameter("MyFloat"), 3.4f);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloat", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Add, eParameter.type);
|
|
Assert.AreEqual(-3.4f, eParameter.value);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_copies_a_bool_to_another_bool()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingCopies(fx.BoolParameter("MyBoolSource"), fx.BoolParameter("MyBoolDestination"));
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyBoolDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsFalse(eParameter.convertRange);
|
|
Assert.AreEqual("MyBoolSource", eParameter.source);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_copies_a_bool_to_an_int()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingCopies(fx.BoolParameter("MyBoolSource"), fx.IntParameter("MyIntDestination"));
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyIntDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsFalse(eParameter.convertRange);
|
|
Assert.AreEqual("MyBoolSource", eParameter.source);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_copies_a_bool_to_a_float()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingCopies(fx.BoolParameter("MyBoolSource"), fx.FloatParameter("MyFloatDestination"));
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloatDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsFalse(eParameter.convertRange);
|
|
Assert.AreEqual("MyBoolSource", eParameter.source);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_copies_an_int_to_another_int()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingCopies(fx.IntParameter("MyIntSource"), fx.IntParameter("MyIntDestination"));
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyIntDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsFalse(eParameter.convertRange);
|
|
Assert.AreEqual("MyIntSource", eParameter.source);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_copies_a_float_to_another_float()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingCopies(fx.FloatParameter("MyFloatSource"), fx.FloatParameter("MyFloatDestination"));
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloatDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsFalse(eParameter.convertRange);
|
|
Assert.AreEqual("MyFloatSource", eParameter.source);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_remaps_a_bool_to_another_bool_to_invert_its_value()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingRemaps(fx.BoolParameter("MyBoolSource"), false, true, fx.BoolParameter("MyBoolDestination"), true, false);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyBoolDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsTrue(eParameter.convertRange);
|
|
Assert.AreEqual("MyBoolSource", eParameter.source);
|
|
Assert.AreEqual(0f, eParameter.sourceMin);
|
|
Assert.AreEqual(1f, eParameter.sourceMax);
|
|
Assert.AreEqual(1f, eParameter.destMin);
|
|
Assert.AreEqual(0f, eParameter.destMax);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_remaps_an_int_percentage_to_a_joystick_float()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingRemaps(fx.IntParameter("MyIntSource"), 0, 100, fx.FloatParameter("MyFloatDestination"), -1f, 1f);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloatDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsTrue(eParameter.convertRange);
|
|
Assert.AreEqual("MyIntSource", eParameter.source);
|
|
Assert.AreEqual(0f, eParameter.sourceMin);
|
|
Assert.AreEqual(100f, eParameter.sourceMax);
|
|
Assert.AreEqual(-1f, eParameter.destMin);
|
|
Assert.AreEqual(1f, eParameter.destMax);
|
|
}
|
|
|
|
[Test]
|
|
public void It_generates_a_driver_that_remaps_an_analog_float_to_an_inverse_joystick_float()
|
|
{
|
|
var aac = TestAac();
|
|
var controller = NewPersistentController();
|
|
var fx = aac.CreateMainArbitraryControllerLayer(controller);
|
|
|
|
// Exercise
|
|
var first = fx.NewState("First");
|
|
first.DrivingRemaps(fx.FloatParameter("MyFloatSource"), 0, 1f, fx.FloatParameter("MyFloatDestination"), 1f, -1f);
|
|
|
|
// Verify
|
|
var eState = controller.layers[0].stateMachine.states[0].state;
|
|
Assert.AreEqual(1, eState.behaviours.Length);
|
|
|
|
var eBehaviour = (VRCAvatarParameterDriver)eState.behaviours[0];
|
|
Assert.AreEqual(typeof(VRCAvatarParameterDriver), eBehaviour.GetType());
|
|
Assert.AreEqual(1, eBehaviour.parameters.Count);
|
|
|
|
var eParameter = eBehaviour.parameters[0];
|
|
Assert.AreEqual("MyFloatDestination", eParameter.name);
|
|
Assert.AreEqual(VRC_AvatarParameterDriver.ChangeType.Copy, eParameter.type);
|
|
Assert.IsTrue(eParameter.convertRange);
|
|
Assert.AreEqual("MyFloatSource", eParameter.source);
|
|
Assert.AreEqual(0f, eParameter.sourceMin);
|
|
Assert.AreEqual(1f, eParameter.sourceMax);
|
|
Assert.AreEqual(1f, eParameter.destMin);
|
|
Assert.AreEqual(-1f, eParameter.destMax);
|
|
}
|
|
}
|
|
} |