neon-sprawl/server/NeonSprawl.Server/Game/Combat/PlayerCombatHealthApi.cs

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,
};
}