41 lines
1.2 KiB
C#
41 lines
1.2 KiB
C#
using NeonSprawl.Server.Game.PositionState;
|
|
|
|
namespace NeonSprawl.Server.Game.Combat;
|
|
|
|
/// <summary>Maps <c>GET /game/players/{id}/combat-health</c> (NEO-95).</summary>
|
|
public static class PlayerCombatHealthApi
|
|
{
|
|
public static WebApplication MapPlayerCombatHealthApi(this WebApplication app)
|
|
{
|
|
app.MapGet(
|
|
"/game/players/{id}/combat-health",
|
|
(string id, IPositionStateStore positions, IPlayerCombatHealthStore playerHealthStore) =>
|
|
{
|
|
if (!positions.TryGetPosition(id, out _))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
|
|
if (!playerHealthStore.TryGet(id, out var snapshot))
|
|
{
|
|
return Results.NotFound();
|
|
}
|
|
|
|
return Results.Json(BuildResponse(id, snapshot));
|
|
});
|
|
|
|
return app;
|
|
}
|
|
|
|
internal static PlayerCombatHealthResponse BuildResponse(
|
|
string playerId,
|
|
in PlayerCombatHealthSnapshot snapshot) =>
|
|
new()
|
|
{
|
|
PlayerId = playerId,
|
|
MaxHp = snapshot.MaxHp,
|
|
CurrentHp = snapshot.CurrentHp,
|
|
Defeated = snapshot.Defeated,
|
|
};
|
|
}
|