43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
using NeonSprawl.Server.Game.PositionState;
|
|
using NeonSprawl.Server.Game.Targeting;
|
|
using Xunit;
|
|
|
|
namespace NeonSprawl.Server.Tests.Game.Targeting;
|
|
|
|
public class PlayerTargetStateReaderTests
|
|
{
|
|
[Fact]
|
|
public void ComputeValidity_ShouldReturnInvalidTarget_WhenLockIdNotInRegistry()
|
|
{
|
|
var snap = new PositionSnapshot(0, 0, 0, 0);
|
|
Assert.Equal(TargetValidity.InvalidTarget, PlayerTargetStateReader.ComputeValidity("not_in_registry", in snap));
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_ShouldReturnNone_WhenLockNull()
|
|
{
|
|
var snap = new PositionSnapshot(0, 0, 0, 0);
|
|
Assert.Equal(TargetValidity.None, PlayerTargetStateReader.ComputeValidity(null, in snap));
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_AtExactLockRadius_ReturnsOk()
|
|
{
|
|
// Alpha anchor XZ (-5, -5), lockRadius 8 → horizontal distance 8 from (3, -5) is on boundary (inclusive).
|
|
var snap = new PositionSnapshot(3, 0, -5, 0);
|
|
Assert.Equal(
|
|
TargetValidity.Ok,
|
|
PlayerTargetStateReader.ComputeValidity(PrototypeTargetRegistry.PrototypeTargetAlphaId, in snap));
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_JustOutsideLockRadius_ReturnsOutOfRange()
|
|
{
|
|
const double eps = 1e-6;
|
|
var snap = new PositionSnapshot(3 + eps, 0, -5, 0);
|
|
Assert.Equal(
|
|
TargetValidity.OutOfRange,
|
|
PlayerTargetStateReader.ComputeValidity(PrototypeTargetRegistry.PrototypeTargetAlphaId, in snap));
|
|
}
|
|
}
|