feat(combat): Phase L.1c add outbound combat actions
This commit is contained in:
parent
29afc94b94
commit
25b9616703
5 changed files with 176 additions and 5 deletions
77
tests/AcDream.Core.Net.Tests/WorldSessionCombatTests.cs
Normal file
77
tests/AcDream.Core.Net.Tests/WorldSessionCombatTests.cs
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
using System.Net;
|
||||
using AcDream.Core.Combat;
|
||||
using AcDream.Core.Net;
|
||||
using AcDream.Core.Net.Messages;
|
||||
|
||||
namespace AcDream.Core.Net.Tests;
|
||||
|
||||
public sealed class WorldSessionCombatTests
|
||||
{
|
||||
private static WorldSession NewSession()
|
||||
{
|
||||
var ep = new IPEndPoint(IPAddress.Loopback, 65000);
|
||||
return new WorldSession(ep);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendChangeCombatMode_UsesSequenceAndRetailModeValue()
|
||||
{
|
||||
using var session = NewSession();
|
||||
byte[]? captured = null;
|
||||
session.GameActionCapture = body => captured = body;
|
||||
|
||||
session.SendChangeCombatMode(CombatMode.Magic);
|
||||
|
||||
Assert.NotNull(captured);
|
||||
Assert.Equal(CharacterActions.BuildChangeCombatMode(
|
||||
1,
|
||||
CharacterActions.CombatMode.Magic), captured);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendMeleeAttack_UsesRetailMeleeBuilder()
|
||||
{
|
||||
using var session = NewSession();
|
||||
byte[]? captured = null;
|
||||
session.GameActionCapture = body => captured = body;
|
||||
|
||||
session.SendMeleeAttack(0x50000002u, AttackHeight.High, 0.75f);
|
||||
|
||||
Assert.NotNull(captured);
|
||||
Assert.Equal(AttackTargetRequest.BuildMelee(
|
||||
1,
|
||||
0x50000002u,
|
||||
(uint)AttackHeight.High,
|
||||
0.75f), captured);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendMissileAttack_UsesRetailMissileBuilder()
|
||||
{
|
||||
using var session = NewSession();
|
||||
byte[]? captured = null;
|
||||
session.GameActionCapture = body => captured = body;
|
||||
|
||||
session.SendMissileAttack(0x50000003u, AttackHeight.Low, 0.5f);
|
||||
|
||||
Assert.NotNull(captured);
|
||||
Assert.Equal(AttackTargetRequest.BuildMissile(
|
||||
1,
|
||||
0x50000003u,
|
||||
(uint)AttackHeight.Low,
|
||||
0.5f), captured);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SendCancelAttack_UsesRetailCancelBuilder()
|
||||
{
|
||||
using var session = NewSession();
|
||||
byte[]? captured = null;
|
||||
session.GameActionCapture = body => captured = body;
|
||||
|
||||
session.SendCancelAttack();
|
||||
|
||||
Assert.NotNull(captured);
|
||||
Assert.Equal(AttackTargetRequest.BuildCancel(1), captured);
|
||||
}
|
||||
}
|
||||
|
|
@ -27,6 +27,40 @@ public sealed class CombatStateTests
|
|||
Assert.Equal(1f, state.GetHealthPercent(0xDEAD));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CombatMode_UsesRetailAceBitValues()
|
||||
{
|
||||
Assert.Equal(1, (int)CombatMode.NonCombat);
|
||||
Assert.Equal(2, (int)CombatMode.Melee);
|
||||
Assert.Equal(4, (int)CombatMode.Missile);
|
||||
Assert.Equal(8, (int)CombatMode.Magic);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetCombatMode_TracksCurrentMode_AndFiresEvent()
|
||||
{
|
||||
var state = new CombatState();
|
||||
CombatMode? seen = null;
|
||||
state.CombatModeChanged += mode => seen = mode;
|
||||
|
||||
state.SetCombatMode(CombatMode.Missile);
|
||||
|
||||
Assert.Equal(CombatMode.Missile, state.CurrentMode);
|
||||
Assert.Equal(CombatMode.Missile, seen);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnCombatCommenceAttack_FiresAttackCommenced()
|
||||
{
|
||||
var state = new CombatState();
|
||||
bool seen = false;
|
||||
state.AttackCommenced += () => seen = true;
|
||||
|
||||
state.OnCombatCommenceAttack();
|
||||
|
||||
Assert.True(seen);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnVictimNotification_FiresDamageTaken()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue