UNPKG

goban

Version:

[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/online-go/goban)

252 lines (251 loc) 11.7 kB
import { GobanEngine, GobanEnginePhase, ReviewMessage, PuzzlePlacementSetting, Score, ConditionalMoveTree } from "../engine"; import { NumberMatrix } from "../engine/util"; import { MoveTree, MarkInterface } from "../engine/MoveTree"; import { ScoreEstimator } from "../engine/ScoreEstimator"; import { niceInterval } from "../engine/util"; import { JGOFIntersection, JGOFPlayerClock, JGOFNumericPlayerColor } from "../engine/formats/JGOF"; import { AdHocClock, AdHocPauseControl } from "../engine/formats/AdHocFormat"; import { StallingScoreEstimate } from "../engine/protocol"; import { GobanBase, AnalysisTool, AnalysisSubTool, GobanModes, GobanChatLog, GobanBounds, GobanConfig, JGOFClockWithTransmitting } from "../GobanBase"; export declare const SCORE_ESTIMATION_TRIALS = 1000; export declare const SCORE_ESTIMATION_TOLERANCE = 0.3; export declare const MARK_TYPES: Array<keyof MarkInterface>; export interface ColoredCircle { move: JGOFIntersection; color: string; border_width?: number; border_color?: string; } export interface MoveCommand { game_id: number; move: string; blur?: number; clock?: JGOFPlayerClock; } /** * This class serves as a functionality layer encapsulating core interactions * we do with a Goban, we have it as a separate base class simply to help with * code organization and to keep our Goban class size down. */ export declare abstract class GobanInteractive extends GobanBase { abstract sendTimedOut(): void; abstract sent_timed_out_message: boolean; protected abstract sendMove(mv: MoveCommand, cb?: () => void): boolean; conditional_starting_color: "black" | "white" | "invalid"; conditional_tree: ConditionalMoveTree; double_click_submit: boolean; variation_stone_opacity: number; draw_bottom_labels: boolean; draw_left_labels: boolean; draw_right_labels: boolean; draw_top_labels: boolean; height: number; last_clock?: AdHocClock; last_emitted_clock?: JGOFClockWithTransmitting; clock_should_be_paused_for_move_submission: boolean; previous_mode: string; one_click_submit: boolean; pen_marks: Array<any>; readonly game_id: number; readonly review_id: number; showing_scores: boolean; stalling_score_estimate?: StallingScoreEstimate; width: number; pause_control?: AdHocPauseControl; paused_since?: number; chat_log: GobanChatLog; protected last_paused_state: boolean | null; protected last_paused_by_player_state: boolean | null; protected analysis_removal_state?: boolean; protected analysis_removal_last_position: { i: number; j: number; }; protected marked_analysis_score?: boolean[][]; private _mode; get mode(): GobanModes; set mode(mode: GobanModes); private _title; get title(): string; set title(title: string); private _submit_move?; get submit_move(): (() => void) | undefined; set submit_move(submit_move: (() => void) | undefined); private _analyze_tool; get analyze_tool(): AnalysisTool; set analyze_tool(analyze_tool: AnalysisTool); private _analyze_subtool; get analyze_subtool(): AnalysisSubTool; set analyze_subtool(analyze_subtool: AnalysisSubTool); private _score_estimator; get score_estimator(): ScoreEstimator | null; set score_estimator(score_estimate: ScoreEstimator | null); private _review_owner_id?; get review_owner_id(): number | undefined; set review_owner_id(review_owner_id: number | undefined); private _review_controller_id?; get review_controller_id(): number | undefined; set review_controller_id(review_controller_id: number | undefined); config: GobanConfig; last_move_radius: number; circle_radius: number; square_size: number; stone_font_scale: number; protected __board_redraw_pen_layer_timer: any; protected __clock_timer?: ReturnType<typeof setTimeout>; protected __draw_state: string[][]; protected __last_pt: { i: number; j: number; valid: boolean; }; protected __update_move_tree: any; protected analysis_move_counter: number; protected stone_removal_auto_scoring_done?: boolean; protected bounded_height: number; protected bounded_width: number; protected bounds: GobanBounds; protected conditional_path: string; protected current_cmove?: ConditionalMoveTree; protected currently_my_cmove: boolean; protected dirty_redraw: any; protected disconnectedFromGame: boolean; protected display_width?: number; protected done_loading_review: boolean; protected dont_draw_last_move: boolean; protected edit_color?: "black" | "white"; protected errorHandler: (e: Error) => void; protected heatmap?: NumberMatrix; protected colored_circles?: Array<Array<ColoredCircle | undefined>>; protected game_type: string; protected getPuzzlePlacementSetting?: () => PuzzlePlacementSetting; protected highlight_movetree_moves: boolean; protected interactive: boolean; protected isInPushedAnalysis: () => boolean; protected leavePushedAnalysis: () => void; protected isPlayerController: () => boolean; protected isPlayerOwner: () => boolean; protected label_character: string; protected label_mark: string; protected last_hover_square?: JGOFIntersection; protected last_move?: MoveTree; protected last_phase?: GobanEnginePhase; protected last_review_message: ReviewMessage; protected last_sound_played_for_a_stone_placement?: string; protected last_stone_sound: number; protected move_selected?: JGOFIntersection; protected no_display: boolean; protected onError?: (error: Error) => void; protected on_game_screen: boolean; protected original_square_size: number | ((goban: GobanBase) => number) | "auto"; protected player_id: number; protected puzzle_autoplace_delay: number; protected restrict_moves_to_movetree: boolean; protected review_had_gamedata: boolean; protected scoring_mode: boolean | "stalling-scoring-mode"; protected shift_key_is_down: boolean; protected show_variation_move_numbers: boolean; protected stone_placement_enabled: boolean; protected sendLatencyTimer?: ReturnType<typeof niceInterval>; protected abstract setTitle(title: string): void; protected abstract enableDrawing(): void; protected abstract disableDrawing(): void; protected preloaded_data?: GobanConfig; constructor(config: GobanConfig, preloaded_data?: GobanConfig); /** Goban calls some abstract methods as part of the construction * process. Because our subclasses might (and do) need to do some of their * own config before these are called, we set this function to be called * by our subclass after it's done it's own internal config stuff. */ protected post_config_constructor(): GobanEngine; protected getCoordinateDisplaySystem(): "A1" | "1-1"; protected getShowUndoRequestIndicator(): boolean; protected getShowVariationMoveNumbers(): boolean; protected getStoneFontScale(): number; static getMoveTreeNumbering(): string; static getCDNReleaseBase(): string; static getSoundEnabled(): boolean; static getSoundVolume(): number; protected defaultConfig(): any; isAnalysisDisabled(perGameSettingAppliesToNonPlayers?: boolean): boolean; protected getLocation(): string; destroy(): void; protected scheduleRedrawPenLayer(): void; protected getWidthForSquareSize(square_size: number): number; protected xy2ij(x: number, y: number, anti_slip?: boolean): { i: number; j: number; valid: boolean; }; setAnalyzeTool(tool: AnalysisTool, subtool: AnalysisSubTool | undefined | null): void; protected setSubmit(fn?: () => void): void; markDirty(): void; set(x: number, y: number, player: JGOFNumericPlayerColor): void; protected updateMoveTree(): void; protected updateOrRedrawMoveTree(): void; setBounds(bounds: GobanBounds): void; load(config: GobanConfig): GobanEngine; setForRemoval(x: number, y: number, removed: boolean, emit_stone_removal_updated?: boolean): void; showScores(score: Score, only_show_territory?: boolean): void; hideScores(): void; showStallingScoreEstimate(sse: StallingScoreEstimate): void; updatePlayerToMoveTitle(): void; disableStonePlacement(): void; enableStonePlacement(): void; showFirst(dont_update_display?: boolean): void; showPrevious(dont_update_display?: boolean): void; showNext(dont_update_display?: boolean): void; prevSibling(): void; nextSibling(): void; jumpToLastOfficialMove(): void; protected setLastOfficialMove(): void; protected isLastOfficialMove(): boolean; updateTitleAndStonePlacement(): void; setConditionalTree(conditional_tree?: ConditionalMoveTree): void; followConditionalPath(move_path: string): void; protected followConditionalSegment(x: number, y: number): void; private deleteConditionalSegment; deleteConditionalPath(move_path: string): void; getCurrentConditionalPath(): string; setToPreviousMode(dont_jump_to_official_move?: boolean): boolean; setModeDeferred(mode: GobanModes): void; setMode(mode: GobanModes, dont_jump_to_official_move?: boolean): boolean; setEditColor(color: "black" | "white"): void; protected playMovementSound(): void; /** This is a callback that gets called by GobanEngine.getState to save and * board state as it pushes and pops state. Our renderers can override this * to save state they need. */ setMarks(marks: { [mark: string]: string; }, dont_draw?: boolean): void; setHeatmap(heatmap?: NumberMatrix, dont_draw?: boolean): void; setColoredCircles(circles?: Array<ColoredCircle>, dont_draw?: boolean): void; setColoredMarks(colored_marks: { [key: string]: { move: string; color: string; }; }): void; protected setMarkColor(x: number, y: number, color: string): void; protected setLetterMark(x: number, y: number, mark: string, drawSquare?: boolean): void; setSubscriptMark(x: number, y: number, mark: string, drawSquare?: boolean): void; setCustomMark(x: number, y: number, mark: string, drawSquare?: boolean): void; deleteCustomMark(x: number, y: number, mark: string, drawSquare?: boolean): void; editPlaceByPrettyCoordinates(coordinates: string, color: JGOFNumericPlayerColor, isTrunkMove?: boolean): void; placeByPrettyCoordinates(coordinates: string): void; setMarkByPrettyCoordinates(coordinates: string, mark: number | string, dont_draw?: boolean): void; setMark(x: number, y: number, mark: number | string, dont_draw?: boolean): void; protected setTransientMark(x: number, y: number, mark: number | string, dont_draw?: boolean): void; getMarks(x: number, y: number): MarkInterface; protected toggleMark(x: number, y: number, mark: number | string, force_label?: boolean, force_put?: boolean): boolean; protected incrementLabelCharacter(): void; protected setLabelCharacterFromMarks(set_override?: "numbers" | "letters"): void; setLabelCharacter(ch: string): void; clearMark(x: number, y: number, mark: string | number): void; protected clearTransientMark(x: number, y: number, mark: string | number): void; updateScoreEstimation(): void; isCurrentUserAPlayer(): boolean; setScoringMode(tf: boolean, prefer_remote?: boolean): MoveTree; private last_emitted_captured_stones; debouncedEmitCapturedStones(removed_stones: Array<JGOFIntersection>): void; }