205 lines
4.5 KiB
TypeScript
205 lines
4.5 KiB
TypeScript
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' | 'forest' | 'valley';
|
|
}
|
|
|
|
export interface Player {
|
|
id: string;
|
|
name: string;
|
|
color: string;
|
|
x: number;
|
|
y: number;
|
|
strength: number;
|
|
score: number;
|
|
piece_type?: 'knight' | 'warrior';
|
|
party_id?: string | null;
|
|
is_party_leader: boolean;
|
|
visited_locations?: { x: number; y: number }[];
|
|
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;
|
|
}
|
|
|
|
export interface TurnInfo {
|
|
game_started?: boolean;
|
|
current_player_id: string | null;
|
|
current_player_name: string | null;
|
|
round_number: number;
|
|
turn_number: number;
|
|
turn_order: string[];
|
|
}
|
|
|
|
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 {
|
|
config: GridConfig;
|
|
player_count: number;
|
|
players: Player[];
|
|
parties: Party[];
|
|
obstacles: Obstacle[];
|
|
turn: TurnInfo;
|
|
game_started?: boolean;
|
|
conclusion?: GameConclusion | null;
|
|
}
|
|
|
|
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;
|
|
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;
|
|
}
|
|
|
|
export interface MoveResponse {
|
|
success: boolean;
|
|
player: Player;
|
|
direction: string;
|
|
party_moved: boolean;
|
|
affected_players: Player[];
|
|
previous_position: { x: number; y: number };
|
|
new_position: { x: number; y: number };
|
|
party_formed_triggered: boolean;
|
|
formed_party?: Party | null;
|
|
battle_triggered: boolean;
|
|
battle_result?: BattleResult | null;
|
|
game_concluded?: GameConclusion | null;
|
|
turn: TurnInfo;
|
|
}
|
|
|
|
export interface AiStepResponse {
|
|
action_taken: string;
|
|
player_id: string;
|
|
player_name: string;
|
|
bot_goal: string;
|
|
direction?: string | null;
|
|
move_result?: MoveResponse | null;
|
|
formed_party?: Party | null;
|
|
battle_result?: BattleResult | null;
|
|
game_concluded?: GameConclusion | null;
|
|
turn: TurnInfo;
|
|
}
|