UNPKG

@haelp/teto

Version:

A typescript-based controllable TETR.IO client.

210 lines (209 loc) 5.91 kB
import type { Game } from "../types"; import { EventEmitter } from "../utils/events"; import { Board, BoardInitializeParams } from "./board"; import { GarbageQueue, GarbageQueueInitializeParams, IncomingGarbage, LegacyGarbageQueue, OutgoingGarbage } from "./garbage"; import { IGEHandler, MultiplayerOptions } from "./multiplayer"; import { Queue, QueueInitializeParams } from "./queue"; import { Mino } from "./queue/types"; import { EngineSnapshot, Events, IncreasableValue, LockRes } from "./types"; import { SpinType } from "./types"; import { IncreaseTracker } from "./utils"; import { garbageData } from "./utils/damageCalc"; import { KickTable } from "./utils/kicks"; import { KickTableName, kicks } from "./utils/kicks/data"; import { Tetromino } from "./utils/tetromino"; export interface GameOptions { spinBonuses: Game.SpinBonuses; comboTable: keyof (typeof garbageData)["comboTable"] | "multiplier"; garbageTargetBonus: "none" | "normal" | string; clutch: boolean; garbageBlocking: "combo blocking" | "limited blocking" | "none"; } export type PCOptions = false | { garbage: number; b2b: number; }; export interface B2BOptions { chaining: boolean; charging: false | { at: number; base: number; }; } export interface MiscellaneousOptions { movement: { infinite: boolean; lockResets: number; lockTime: number; may20G: boolean; }; allowed: { spin180: boolean; hardDrop: boolean; hold: boolean; }; infiniteHold: boolean; username?: string; date?: Date; } export interface EngineInitializeParams { queue: QueueInitializeParams; board: BoardInitializeParams; kickTable: KickTable; options: GameOptions; gravity: IncreasableValue; garbage: GarbageQueueInitializeParams; handling: Game.Handling; pc: PCOptions; b2b: B2BOptions; multiplayer?: MultiplayerOptions; misc: MiscellaneousOptions; } export declare class Engine { #private; queue: Queue; held: Mino | null; holdLocked: boolean; falling: Tetromino; private _kickTable; board: Board; lastSpin: { piece: Mino; type: SpinType; } | null; lastWasClear: boolean; stats: { garbage: { sent: number; attack: number; receive: number; cleared: number; }; combo: number; b2b: number; pieces: number; lines: number; }; gameOptions: GameOptions; garbageQueue: GarbageQueue | LegacyGarbageQueue; frame: number; subframe: number; initializer: EngineInitializeParams; handling: Game.Handling; input: { lShift: { held: boolean; arr: number; das: number; dir: -1; }; rShift: { held: boolean; arr: number; das: number; dir: 1; }; lastShift: number; keys: { [k in "softDrop" | "rotateCCW" | "rotateCW" | "rotate180" | "hold"]: boolean; }; firstInputTime: number; time: { start: number; zero: boolean; locked: boolean; prev: number; frameoffset: number; }; lastPieceTime: number; }; pc: PCOptions; b2b: B2BOptions; dynamic: { gravity: IncreaseTracker; garbageMultiplier: IncreaseTracker; garbageCap: IncreaseTracker; }; glock: number; multiplayer?: { options: MultiplayerOptions; targets: number[]; passthrough: { network: boolean; replay: boolean; travel: boolean; }; }; igeHandler: IGEHandler; misc: MiscellaneousOptions; state: number; currentSpike: number; events: EventEmitter<Events>; private resCache; constructor(options: EngineInitializeParams); init(): void; private flushRes; reset(): void; bindAll(): void; snapshot(): EngineSnapshot; fromSnapshot(snapshot: EngineSnapshot): void; get kickTable(): (typeof kicks)[KickTableName]; get kickTableName(): KickTableName; set kickTable(value: KickTableName); get dynamicStats(): { apm: number; pps: number; vs: number; surgePower: number; }; nextPiece(ignoreBlockout?: boolean, isHold?: boolean): void; initiatePiece(piece: Mino, ignoreBlockout?: boolean, isHold?: boolean): void; /** @deprecated */ hold(_ihs?: boolean, ignoreBlockout?: boolean): void; get toppedOut(): boolean; /** @deprecated */ rotateCW(): void; /** @deprecated */ rotateCCW(): void; /** @deprecated */ rotate180(): void; /** @deprecated */ moveRight(): boolean; /** @deprecated */ moveLeft(): boolean; /** @deprecated */ dasRight(): boolean; /** @deprecated */ dasLeft(): boolean; /** @deprecated */ softDrop(): boolean; hardDrop(): LockRes; press<T extends Game.Key>(key: T): ReturnType<(typeof this)[T]>; tick(frames: Game.Replay.Frame[]): { pieces: number; garbage: { sent: number[]; received: OutgoingGarbage[]; }; keys: Game.Key[]; lastLock: number; }; receiveGarbage(...garbage: IncomingGarbage[]): void; getPreview(piece: Mino): { w: number; h: number; data: [number, number, number][]; }; /** @deprecated */ onQueuePieces(_listener: (pieces: Mino[]) => void): void; private static colorMap; get text(): string; /** Return an engine with the same config. Does not preserve state. */ clone(): Engine; } export * from "./queue"; export * from "./garbage"; export * from "./utils"; export * from "./board"; export * from "./types"; export * from "./multiplayer";