45 lines
1.6 KiB
C#
45 lines
1.6 KiB
C#
using NeonSprawl.Server.Game.Npc;
|
|
|
|
namespace NeonSprawl.Server.Game.Combat;
|
|
|
|
/// <summary>Maps <c>GET /game/world/combat-targets</c> (NEO-83).</summary>
|
|
public static class CombatTargetsWorldApi
|
|
{
|
|
public static WebApplication MapCombatTargetsWorldApi(this WebApplication app)
|
|
{
|
|
app.MapGet(
|
|
"/game/world/combat-targets",
|
|
(ICombatEntityHealthStore healthStore) =>
|
|
{
|
|
var ids = PrototypeNpcRegistry.GetInstanceIdsInOrder();
|
|
var targets = new List<CombatTargetJson>(ids.Count);
|
|
foreach (var id in ids)
|
|
{
|
|
if (!healthStore.TryGet(id, out var snapshot))
|
|
{
|
|
throw new InvalidOperationException(
|
|
$"Prototype combat target '{id}' is registered but missing from {nameof(ICombatEntityHealthStore)}.");
|
|
}
|
|
|
|
targets.Add(
|
|
new CombatTargetJson
|
|
{
|
|
TargetId = snapshot.TargetId,
|
|
MaxHp = snapshot.MaxHp,
|
|
CurrentHp = snapshot.CurrentHp,
|
|
Defeated = snapshot.Defeated,
|
|
});
|
|
}
|
|
|
|
return Results.Json(
|
|
new CombatTargetsListResponse
|
|
{
|
|
SchemaVersion = CombatTargetsListResponse.CurrentSchemaVersion,
|
|
Targets = targets,
|
|
});
|
|
});
|
|
|
|
return app;
|
|
}
|
|
}
|