/// <reference types="./phaser" />
export declare class BubbleUtils {
    initialBubble: Phaser.GameObjects.Image | null;
    arrow: Phaser.GameObjects.Image | null;
    nextBubble: Phaser.GameObjects.Image | null;
    bubblesGroup: Phaser.Physics.Arcade.Group | null;
    leftWall: Phaser.GameObjects.Rectangle | null;
    rightWall: Phaser.GameObjects.Rectangle | null;
    topWall: Phaser.GameObjects.Rectangle | null;
    grid: BubbleGridSquare[][];
    bubbleSize: number;
    canvasHeight: number;
    canvasWidth: number;
    colors: string[];
    rows: number;
    columns: number;
    filledRows: number;
    marginX: number;
    marginY: number;
    currentBubbleColor: string;
    nextBubbleColor: string;
    extraBubbles: Phaser.GameObjects.Image[];
    extraBubbleCount: number;
    lifeCount: number;
    isGameOver: boolean;
    score: number;
    scoreIncrement: number;
    scoreTarget: number;
    scoreText: Phaser.GameObjects.Text | null;
    bubbleSound: Phaser.Sound.BaseSound | null;
    bubbleshoot: Phaser.Sound.BaseSound | null;
    projectionLine: Phaser.GameObjects.Line | null;
    protractorGraphics: Phaser.GameObjects.Graphics | null;
    angleText: Phaser.GameObjects.Text | null;
    shouldYouGoBeenShown: boolean;
    constructor();
    findClosestEmptySquare(x: number, y: number): BubbleGridSquare | null;
    private isRowShiftedRight;
    updateGridWithBubble(x: number, y: number, color: string, bubble: Phaser.Physics.Arcade.Image): void;
    findConnectedBalls(x: number, y: number, color: string): ConnectedBall[];
    createNewRowColors(): string[];
    removeFloatingIslands(): Promise<void>;
    removeConnectedBalls(connectedBalls: ConnectedBall[], sound: Phaser.Sound.BaseSound, scene: Phaser.Scene): Promise<void>;
    setCanvasStyle(): void;
    createBackground(scene: Phaser.Scene): void;
    createWalls(scene: Phaser.Scene & {
        createWall?: (x: number, y: number, displayWidth: number, displayHeight: number) => Phaser.GameObjects.Rectangle;
    }): void;
    createRestartButton(scene: Phaser.Scene): void;
    createBubbleElements(scene: Phaser.Scene): void;
    setupInputHandlers(scene: Phaser.Scene): void;
    updateProjectionLine(angle: number): void;
    updateProtractorArc(angle: number): void;
    loadSounds(scene: Phaser.Scene): void;
    createScoreText(scene: Phaser.Scene): void;
    createBubbles(scene: Phaser.Scene): void;
    shootBubble(scene: Phaser.Scene): void;
    createMovingBubble(scene: Phaser.Scene, angle: number): Phaser.Physics.Arcade.Image;
    updateNextBubbleTextures(): void;
    handleBubbleCollision(scene: Phaser.Scene, movingBubble: Phaser.Physics.Arcade.Image, stationaryObject: Phaser.Physics.Arcade.Image): Promise<void>;
    updateAvailableColors(): void;
    addNewRowToTop(newRowColors: string[], scene: Phaser.Scene): void;
    createNewRowColorsWrapper(): string[];
    shiftRowsDown(): void;
    shiftBubble(row: number, col: number): void;
    createNewTopRow(newRowColors: string[], scene: Phaser.Scene): void;
    createBubble(scene: Phaser.Scene, x: number, y: number, color: string): Phaser.Physics.Arcade.Image;
    fillExtraBubbles(length: number, scene: Phaser.Scene): void;
    updateBubblesTextures(length: number): void;
    checkForEndgame(): Promise<boolean>;
    showFinalScore(scene: Phaser.Scene): void;
}
export interface BubbleGridSquare {
    centerX: number;
    centerY: number;
    color: string;
    bubble: Phaser.Physics.Arcade.Image | null;
}
export interface ConnectedBall extends BubbleGridSquare {
    row: number;
    col: number;
}
