botWebWars/frontend/src/types.ts

202 lines
4.4 KiB
TypeScript
Raw Normal View History

2026-09-05 23:20:54 +00:00
export interface GridConfig {
min_x: number;
max_x: number;
min_y: number;
max_y: number;
grid_cells_x: number;
grid_cells_y: number;
}
export interface Obstacle {
x: number;
y: number;
type: 'mountain' | 'valley';
}
export interface Player {
id: string;
name: string;
color: string;
x: number;
y: number;
strength: number;
score: number;
party_id?: string | null;
2026-09-05 23:20:54 +00:00
is_party_leader: boolean;
visited_locations?: { x: number; y: number }[];
2026-09-05 23:20:54 +00:00
created_at?: string;
}
export interface Party {
id: string;
name: string;
leader_id: string;
leader_name: string;
member_ids: string[];
total_strength: number;
created_at?: string;
}
2026-09-05 21:20:39 +00:00
export interface TurnInfo {
current_player_id: string | null;
current_player_name: string | null;
round_number: number;
turn_number: number;
turn_order: string[];
}
2026-09-05 23:50:27 +00:00
export interface GameConclusion {
concluded: boolean;
winning_party_id?: string | null;
winning_party_name?: string | null;
winning_leader_id?: string | null;
winning_leader_name?: string | null;
total_bots?: number;
rankings?: Player[];
}
export interface BoardState {
2026-09-05 23:20:54 +00:00
config: GridConfig;
player_count: number;
players: Player[];
parties: Party[];
obstacles: Obstacle[];
2026-09-05 21:20:39 +00:00
turn: TurnInfo;
2026-09-05 23:50:27 +00:00
conclusion?: GameConclusion | null;
}
2026-09-05 21:20:39 +00:00
export interface MoveCheckResult {
direction: string;
dx: number;
dy: number;
target_x: number;
target_y: number;
available: boolean;
reason?: string | null;
}
export interface AvailableMovesResponse {
player_id: string;
player_name: string;
current_x: number;
current_y: number;
is_turn: boolean;
is_party_leader: boolean;
party_id?: string | null;
party_member_count: number;
current_turn_player_id?: string | null;
2026-09-05 21:20:39 +00:00
moves: Record<string, MoveCheckResult>;
}
export interface BotMemoryResponse {
player_id: string;
player_name: string;
current_x: number;
current_y: number;
visited_count: number;
visited_history: { x: number; y: number }[];
has_visited_current: boolean;
}
export interface RadarTarget {
id: string;
name: string;
color: string;
x: number;
y: number;
strength: number;
distance: number;
party_id?: string | null;
party_name?: string | null;
is_ally: boolean;
is_enemy: boolean;
can_recruit: boolean;
can_battle: boolean;
}
export interface BotRadarResponse {
player_id: string;
current_x: number;
current_y: number;
bot_goal: string;
targets: RadarTarget[];
nearest_target?: RadarTarget | null;
recommended_direction?: string | null;
recommended_action: string;
}
export interface BattleBout {
bout_number: number;
party1_roll: number;
party1_strength: number;
party1_score: number;
party2_roll: number;
party2_strength: number;
party2_score: number;
winner_name?: string | null;
}
export interface BattleResult {
bouts: BattleBout[];
party1_name: string;
party2_name: string;
party1_bouts_won: number;
party2_bouts_won: number;
party1_total_score: number;
party2_total_score: number;
winner_party_id: string;
winner_party_name: string;
winner_leader_id: string;
winner_leader_name: string;
defeated_party_id: string;
defeated_party_name: string;
killed_leader_id: string;
killed_leader_name: string;
killed_leader_new_score: number;
killed_leader_respawn_position: { x: number; y: number };
absorbed_members: string[];
new_party_size: number;
new_party_strength: number;
}
export interface PartyDefeatResult {
party_id: string;
killed_leader_id: string;
killed_leader_name: string;
killed_leader_new_score: number;
killed_leader_respawn_position: { x: number; y: number };
new_leader_id?: string | null;
new_leader_name?: string | null;
remaining_members: string[];
party_dissolved: boolean;
}
2026-09-05 21:20:39 +00:00
export interface MoveResponse {
success: boolean;
player: Player;
direction: string;
party_moved: boolean;
affected_players: Player[];
2026-09-05 21:20:39 +00:00
previous_position: { x: number; y: number };
new_position: { x: number; y: number };
party_formed_triggered: boolean;
2026-09-05 23:20:54 +00:00
formed_party?: Party | null;
battle_triggered: boolean;
battle_result?: BattleResult | null;
2026-09-05 23:50:27 +00:00
game_concluded?: GameConclusion | null;
2026-09-05 21:20:39 +00:00
turn: TurnInfo;
}
2026-09-05 23:20:54 +00:00
export interface AiStepResponse {
action_taken: string;
2026-09-05 23:20:54 +00:00
player_id: string;
player_name: string;
bot_goal: string;
2026-09-05 23:20:54 +00:00
direction?: string | null;
move_result?: MoveResponse | null;
formed_party?: Party | null;
battle_result?: BattleResult | null;
2026-09-05 23:50:27 +00:00
game_concluded?: GameConclusion | null;
2026-09-05 23:20:54 +00:00
turn: TurnInfo;
}