feat(matching): IBotRoster + hardcoded BotRoster fixture (8 bots, one per class)
AIBotProfile carries the cosmetic metadata the AI rank-battle start endpoint composes into oppo_info. BotRoster.Pick is deterministic per MatchContext so mid-flight retries get the same opponent. ai_id values 4001..4008 are placeholders per the existing ai-start.md TODO — we have no live capture of the prod catalog. Future improvement: migrate Roster to a bot-roster.json seed under SVSim.Bootstrap/Data/seeds/ for editability without rebuilds. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
21
SVSim.EmulatedEntrypoint/Matching/IBotRoster.cs
Normal file
21
SVSim.EmulatedEntrypoint/Matching/IBotRoster.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using SVSim.BattleNode.Bridge;
|
||||
|
||||
namespace SVSim.EmulatedEntrypoint.Matching;
|
||||
|
||||
/// <summary>
|
||||
/// Picks a bot opponent for an incoming AI rank battle. Used by
|
||||
/// <c>RankBattleController.AiStart</c> to compose <c>oppo_info</c>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Phase 3 ships a hardcoded fixture; future improvement is to migrate the roster
|
||||
/// to <c>SVSim.Bootstrap/Data/seeds/bot-roster.json</c> for editability without
|
||||
/// rebuilds. See spec § Future improvements.
|
||||
/// </remarks>
|
||||
public interface IBotRoster
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns a bot profile for the calling viewer. Deterministic per
|
||||
/// <see cref="MatchContext"/> — the same context value returns the same bot.
|
||||
/// </summary>
|
||||
AIBotProfile Pick(MatchContext selfCtx);
|
||||
}
|
||||
Reference in New Issue
Block a user