73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using NeonSprawl.Server.Game.PositionState;
|
|
using NeonSprawl.Server.Game.Targeting;
|
|
|
|
namespace NeonSprawl.Server.Tests.Game.Targeting;
|
|
|
|
public class PlayerTargetStateReaderTests
|
|
{
|
|
[Fact]
|
|
public void ComputeValidity_ShouldReturnInvalidTarget_WhenLockIdNotInRegistry()
|
|
{
|
|
// Arrange
|
|
|
|
var snap = new PositionSnapshot(0, 0, 0, 0);
|
|
// Act
|
|
var validity = PlayerTargetStateReader.ComputeValidity("not_in_registry", in snap);
|
|
// Assert
|
|
Assert.Equal(TargetValidity.InvalidTarget, validity);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_ShouldReturnNone_WhenLockNull()
|
|
{
|
|
// Arrange
|
|
|
|
var snap = new PositionSnapshot(0, 0, 0, 0);
|
|
// Act
|
|
var validity = PlayerTargetStateReader.ComputeValidity(null, in snap);
|
|
// Assert
|
|
Assert.Equal(TargetValidity.None, validity);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_AtExactLockRadius_ReturnsOk()
|
|
{
|
|
// Arrange
|
|
// Alpha anchor XZ (-3, -3), lockRadius 6 -> horizontal distance 6 from (3, -3) is on boundary (inclusive).
|
|
var snap = new PositionSnapshot(3, 0, -3, 0);
|
|
// Act
|
|
var validity = PlayerTargetStateReader.ComputeValidity(PrototypeNpcRegistry.PrototypeNpcMeleeId, in snap);
|
|
// Assert
|
|
Assert.Equal(TargetValidity.Ok, validity);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_JustOutsideLockRadius_ReturnsOutOfRange()
|
|
{
|
|
// Arrange
|
|
|
|
const double eps = 1e-6;
|
|
var snap = new PositionSnapshot(3 + eps, 0, -3, 0);
|
|
// Act
|
|
var validity = PlayerTargetStateReader.ComputeValidity(PrototypeNpcRegistry.PrototypeNpcMeleeId, in snap);
|
|
// Assert
|
|
Assert.Equal(TargetValidity.OutOfRange, validity);
|
|
}
|
|
|
|
[Fact]
|
|
public void ComputeValidity_AtOrigin_ShouldReturnOk_ForMeleeRangedAndElite()
|
|
{
|
|
// Arrange
|
|
// Melee (-3,-3) r=6, ranged (3,3) r=6, elite (0,0) r=6 overlap at origin for tab cycle.
|
|
var snap = new PositionSnapshot(0, 0, 0, 0);
|
|
// Act
|
|
var meleeValidity = PlayerTargetStateReader.ComputeValidity(PrototypeNpcRegistry.PrototypeNpcMeleeId, in snap);
|
|
var rangedValidity = PlayerTargetStateReader.ComputeValidity(PrototypeNpcRegistry.PrototypeNpcRangedId, in snap);
|
|
var eliteValidity = PlayerTargetStateReader.ComputeValidity(PrototypeNpcRegistry.PrototypeNpcEliteId, in snap);
|
|
// Assert
|
|
Assert.Equal(TargetValidity.Ok, meleeValidity);
|
|
Assert.Equal(TargetValidity.Ok, rangedValidity);
|
|
Assert.Equal(TargetValidity.Ok, eliteValidity);
|
|
}
|
|
}
|