bump-ts
Version:
  
106 lines (105 loc) • 3.89 kB
TypeScript
import { rect_containsPoint, rect_detectCollision, rect_getDiff, rect_getNearestCorner, rect_getSegmentIntersectionIndices, rect_getSquareDistance, rect_isIntersecting } from './rect';
import { bounce, cross, Response, slide, touch } from './helpers/world/responses';
declare type ResponseType = 'bounce' | 'slide' | 'cross' | 'touch';
declare type Filter = (item: string, other: string) => ResponseType;
interface IItemInfo {
item: string;
ti1: number;
ti2: number;
weight: number;
}
export interface IRect {
x: number;
y: number;
w: number;
h: number;
}
export interface ICoords {
x: number;
y: number;
}
export interface Collision {
other: any | null | undefined;
item: string | null | undefined;
type?: ResponseType;
overlaps: boolean;
ti: number;
move: ICoords;
normal: ICoords;
touch: ICoords;
itemRect: IRect;
otherRect: IRect;
slide?: ICoords;
bounce?: ICoords;
}
export declare type Cell = {
ID: string;
x: number;
y: number;
items: Record<string, boolean>;
};
export declare class World {
responses: Record<ResponseType, Response>;
cellSize: number;
rows: Cell[][];
rects: Map<string, IRect>;
nonEmptyCells: Record<string, boolean>;
constructor(input: {
cellSize: number;
rects: {};
rows: [];
nonEmptyCells: {};
responses: Record<ResponseType, Response>;
});
addResponse(name: ResponseType, response: Response): void;
getResponseByName(name: ResponseType): Response;
project(itemID: string | null, rect: IRect, goalX?: number, goalY?: number, filter?: (item: string, other: string) => ResponseType | false): Collision[];
countCells(): number;
hasItem(item: string): boolean;
getItems(): IRect[];
countItems(): number;
private addItemToCell;
getRect(itemID: string): IRect;
private getItemsInCellRect;
getItemsInCellPoint(x: number, y: number): IItemInfo['item'][];
private removeItemFromCell;
toWorld(cx: number, cy: number): [number, number];
toCell(x: number, y: number): [number, number];
queryRect(x: number, y: number, w: number, h: number, filter?: (other?: string) => boolean): string[];
queryPoint(x: number, y: number, filter?: (other?: string) => boolean): string[];
querySegment(x1: number, y1: number, x2: number, y2: number, filter?: (other?: string) => boolean): string[];
querySegmentWithCoords(x1: number, y1: number, x2: number, y2: number, filter?: (other?: string) => boolean): {
item: string;
ti1: number;
ti2: number;
weight: number | null;
x1: number;
x2: number;
y1: number;
y2: number;
}[];
add(itemID: string, x: number, y: number, w: number, h: number): string;
remove(itemID: string): void;
update(itemID: string, x2: number, y2: number, w2?: number, h2?: number): void;
move(itemID: string, goalX: number, goalY: number, filter?: Filter): ReturnType<Response>;
check(itemID: string, goalX: number, goalY: number, filter?: Filter): ReturnType<Response>;
}
declare const _default: Readonly<{
newWorld: (cellSize: number) => World;
rect: {
getNearestCorner: typeof rect_getNearestCorner;
getSegmentIntersectionIndices: typeof rect_getSegmentIntersectionIndices;
getDiff: typeof rect_getDiff;
containsPoint: typeof rect_containsPoint;
isIntersecting: typeof rect_isIntersecting;
getSquareDistance: typeof rect_getSquareDistance;
detectCollision: typeof rect_detectCollision;
};
responses: {
touch: typeof touch;
cross: typeof cross;
slide: typeof slide;
bounce: typeof bounce;
};
}>;
export default _default;