import type { HandArray } from "./core/hand.js"; import type { TileId } from "./core/tile.js"; import type { UkeireOptions, UkeireResult } from "./types.js"; import type { EVOptions, EVResult } from "./ev/types.js"; import type { MCOptions, MCResult } from "./mc/simulator.js"; import type { EvalOptions, EvalResult } from "./models/evaluation.js"; export interface WorkerClientOptionsSingle { /** Worker スクリプトの URL または Worker インスタンス */ worker: Worker | string; numWorkers?: never; createWorker?: never; /** 数牌テーブルの URL */ suitTableUrl: string; /** 字牌テーブルの URL */ honorTableUrl: string; /** WASM バイナリの URL */ wasmUrl: string; } export interface WorkerClientOptionsMulti { worker?: never; /** Worker を生成するファクトリ関数 */ createWorker: () => Worker; /** Worker 数(デフォルト 1) */ numWorkers?: number; /** 数牌テーブルの URL */ suitTableUrl: string; /** 字牌テーブルの URL */ honorTableUrl: string; /** WASM バイナリの URL */ wasmUrl: string; } export type WorkerClientOptions = WorkerClientOptionsSingle | WorkerClientOptionsMulti; export declare class WorkerClient { private workers; private pending; private initPromise; constructor(options: WorkerClientOptions); /** Worker 数を返す */ get workerCount(): number; /** 初期化完了を待つ */ ready(): Promise; /** シャンテン数計算 */ shanten(hand: HandArray): Promise; /** 13枚手牌の受入解析 */ ukeire13(hand: HandArray, remaining?: HandArray, options?: UkeireOptions): Promise<{ acceptTiles: TileId[]; acceptCount: number; }>; /** 14枚手牌の打牌別受入解析 */ ukeire14(hand: HandArray, remaining?: HandArray, options?: UkeireOptions): Promise; /** 14枚手牌の各打牌候補の期待値計算 */ ev14(hand: HandArray, options: EVOptions): Promise; /** MCシミュレーション(マルチWorker時はsims分散+マージ) */ simulate(hand: HandArray, options: MCOptions): Promise; /** MC + 総合評価(マルチWorker時は並列MC→マージ→Worker[0]で評価) */ evaluate(hand: HandArray, mcOptions: MCOptions, evalOptions: EvalOptions): Promise<{ mcResults: MCResult[]; evalResults: EvalResult[]; }>; /** Worker 終了 */ terminate(): void; /** 指定 Worker にリクエスト送信 */ private requestTo; /** Worker[0] にリクエスト送信(既存APIの委譲先) */ private request; /** * 複数 Worker の MC 結果をマージ * - winRate / ev: 単純平均 * - avgPoints: winRate 重み付け平均 * - shantenAfter / acceptCount: 確定値(最初の結果から取得) */ static mergeMCResults(allResults: MCResult[][]): MCResult[]; }