@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
208 lines • 6.2 kB
TypeScript
import type { Game } from "../types/game";
import { EventEmitter } from "../utils/events";
import { Board, type BoardInitializeParams, ConnectedBoard } from "./board";
import { GarbageQueue, type GarbageQueueInitializeParams, type IncomingGarbage, LegacyGarbageQueue, type OutgoingGarbage } from "./garbage";
import { IGEHandler, type MultiplayerOptions } from "./multiplayer";
import { Queue, type QueueInitializeParams } from "./queue";
import { Mino } from "./queue/types";
import type { EngineSnapshot, Events, IncreasableValue, LockRes, SpinType } from "./types";
import { IncreaseTracker } from "./utils";
import { garbageData } from "./utils/damageCalc";
import { type KickTable } from "./utils/kicks";
import { type 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;
connectedBoard: ConnectedBoard;
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;
hold(_ihs?: boolean, ignoreBlockout?: boolean): boolean;
get toppedOut(): boolean;
rotateCW(): boolean;
rotateCCW(): boolean;
rotate180(): boolean;
moveRight(): boolean;
moveLeft(): boolean;
dasRight(): boolean;
dasLeft(): boolean;
softDrop(): boolean;
/** */
hardDrop(): LockRes;
press<T extends Game.Key | "dasLeft" | "dasRight">(key: T): boolean | LockRes;
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][];
};
connect(blocks: [x: number, y: number][]): (readonly [number, number, number])[];
getConnectedPreview(piece: Mino): {
data: (readonly [number, number, number])[];
w: number;
h: number;
};
/** @deprecated Engine.onQueuePieces is deprecated and no longer functional. Switch to Engine.events.on("queue.add", (pieces) => {}) instead. */
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";
//# sourceMappingURL=index.d.ts.map