66 lines
2.2 KiB
C#
66 lines
2.2 KiB
C#
using AcDream.Core.Physics;
|
|
using DatReaderWriter.DBObjs;
|
|
using Xunit;
|
|
|
|
namespace AcDream.Core.Tests.Physics;
|
|
|
|
public sealed class AnimationCommandRouterTests
|
|
{
|
|
private const uint NonCombat = 0x8000003Du;
|
|
|
|
[Theory]
|
|
[InlineData(0x00000000u, AnimationCommandRouteKind.None)]
|
|
[InlineData(0x10000057u, AnimationCommandRouteKind.Action)] // Sanctuary
|
|
[InlineData(0x2500003Bu, AnimationCommandRouteKind.Modifier)] // Jump
|
|
[InlineData(0x13000087u, AnimationCommandRouteKind.ChatEmote)] // Wave
|
|
[InlineData(0x41000003u, AnimationCommandRouteKind.SubState)] // Ready
|
|
[InlineData(0x40000011u, AnimationCommandRouteKind.SubState)] // Dead
|
|
[InlineData(0x8000003Du, AnimationCommandRouteKind.Ignored)] // NonCombat style
|
|
public void Classify_ReturnsRetailRouteKind(uint command, AnimationCommandRouteKind expected)
|
|
{
|
|
Assert.Equal(expected, AnimationCommandRouter.Classify(command));
|
|
}
|
|
|
|
[Fact]
|
|
public void RouteWireCommand_SubState_UsesSetCycle()
|
|
{
|
|
var seq = MakeEmptySequencer();
|
|
|
|
var route = AnimationCommandRouter.RouteWireCommand(seq, NonCombat, 0x0011);
|
|
|
|
Assert.Equal(AnimationCommandRouteKind.SubState, route);
|
|
Assert.Equal(NonCombat, seq.CurrentStyle);
|
|
Assert.Equal(MotionCommand.Dead, seq.CurrentMotion);
|
|
}
|
|
|
|
[Fact]
|
|
public void RouteWireCommand_Sanctuary_IsActionNotDeadCycle()
|
|
{
|
|
var seq = MakeEmptySequencer();
|
|
|
|
var route = AnimationCommandRouter.RouteWireCommand(seq, NonCombat, 0x0057);
|
|
|
|
Assert.Equal(AnimationCommandRouteKind.Action, route);
|
|
Assert.Equal(0u, seq.CurrentMotion);
|
|
}
|
|
|
|
[Fact]
|
|
public void RouteWireCommand_Wave_IsChatEmote()
|
|
{
|
|
var seq = MakeEmptySequencer();
|
|
|
|
var route = AnimationCommandRouter.RouteWireCommand(seq, NonCombat, 0x0087);
|
|
|
|
Assert.Equal(AnimationCommandRouteKind.ChatEmote, route);
|
|
}
|
|
|
|
private static AnimationSequencer MakeEmptySequencer()
|
|
{
|
|
return new AnimationSequencer(new Setup(), new MotionTable(), new NullAnimationLoader());
|
|
}
|
|
|
|
private sealed class NullAnimationLoader : IAnimationLoader
|
|
{
|
|
public Animation? LoadAnimation(uint id) => null;
|
|
}
|
|
}
|