@ahmafi/pixi-viewport
Version:
A highly configurable viewport/2D camera designed to work with pixi.js. Features include dragging, pinch-to-zoom, mouse wheel zooming, decelerated dragging, follow target, snap to point, snap to zoom, clamping, bouncing on edges, and move on mouse edges.
131 lines (130 loc) • 5.15 kB
TypeScript
import { Container } from '@pixi/display';
import { IPointData, Point, Rectangle, Ticker } from '@pixi/core';
import { InputManager } from './InputManager';
import { PluginManager } from './PluginManager';
import { IAnimateOptions, IBounceOptions, IClampOptions, IClampZoomOptions, IDecelerateOptions, IDragOptions, IFollowOptions, IMouseEdgesOptions, IPinchOptions, ISnapOptions, ISnapZoomOptions, IWheelOptions } from './plugins';
import type { DisplayObject, IDestroyOptions } from '@pixi/display';
import type { IHitArea, EventSystem } from '@pixi/events';
export interface IViewportOptions {
screenWidth?: number;
screenHeight?: number;
worldWidth?: number | null;
worldHeight?: number | null;
threshold?: number;
passiveWheel?: boolean;
stopPropagation?: boolean;
allowPreserveDragOutside?: boolean;
forceHitArea?: Rectangle | null;
noTicker?: boolean;
events: EventSystem;
disableOnContextMenu?: boolean;
ticker?: Ticker;
}
export interface ICompleteViewportOptions extends IViewportOptions {
screenWidth: number;
screenHeight: number;
threshold: number;
passiveWheel: boolean;
stopPropagation: boolean;
noTicker: boolean;
ticker: Ticker;
}
export interface IViewportTransformState {
x: number;
y: number;
scaleX: number;
scaleY: number;
}
export declare class Viewport extends Container {
moving?: boolean;
screenWidth: number;
screenHeight: number;
threshold: number;
readonly input: InputManager;
readonly plugins: PluginManager;
zooming?: boolean;
lastViewport?: IViewportTransformState | null;
readonly options: ICompleteViewportOptions;
private _dirty?;
private _forceHitArea?;
private _hitAreaDefault?;
private _pause?;
private readonly tickerFunction?;
private _worldWidth?;
private _worldHeight?;
private _disableOnContextMenu;
constructor(options: IViewportOptions);
destroy(options?: IDestroyOptions): void;
update(elapsed: number): void;
resize(screenWidth: 400, screenHeight: 400, worldWidth?: number, worldHeight?: number): void;
get worldWidth(): number;
set worldWidth(value: number);
get worldHeight(): number;
set worldHeight(value: number);
getVisibleBounds(): Rectangle;
toWorld<P extends IPointData = Point>(x: number, y: number): P;
toWorld<P extends IPointData = Point>(screenPoint: IPointData): P;
toScreen<P extends IPointData = Point>(x: number, y: number): P;
toScreen<P extends IPointData = Point>(worldPoint: IPointData): P;
get worldScreenWidth(): number;
get worldScreenHeight(): number;
get screenWorldWidth(): number;
get screenWorldHeight(): number;
get center(): Point;
set center(value: Point);
moveCenter(x: number, y: number): Viewport;
moveCenter(center: IPointData): Viewport;
get corner(): Point;
set corner(value: Point);
moveCorner(x: number, y: number): Viewport;
moveCorner(center: Point): Viewport;
get screenWidthInWorldPixels(): number;
get screenHeightInWorldPixels(): number;
findFitWidth(width: number): number;
findFitHeight(height: number): number;
findFit(width: number, height: number): number;
findCover(width: number, height: number): number;
fitWidth(width?: number, center?: boolean, scaleY?: boolean, noClamp?: boolean): Viewport;
fitHeight(height?: number, center?: boolean, scaleX?: boolean, noClamp?: boolean): Viewport;
fitWorld(center?: boolean): Viewport;
fit(center?: boolean, width?: number, height?: number): Viewport;
setZoom(scale: number, center?: boolean): Viewport;
zoomPercent(percent: number, center?: boolean): Viewport;
zoom(change: number, center?: boolean): Viewport;
get scaled(): number;
set scaled(scale: number);
snapZoom(options?: ISnapZoomOptions): Viewport;
OOB(): {
left: boolean;
right: boolean;
top: boolean;
bottom: boolean;
cornerPoint: Point;
};
get right(): number;
set right(value: number);
get left(): number;
set left(value: number);
get top(): number;
set top(value: number);
get bottom(): number;
set bottom(value: number);
get dirty(): boolean;
set dirty(value: boolean);
get forceHitArea(): IHitArea | null | undefined;
set forceHitArea(value: IHitArea | null | undefined);
drag(options?: IDragOptions): Viewport;
clamp(options?: IClampOptions): Viewport;
decelerate(options?: IDecelerateOptions): Viewport;
bounce(options?: IBounceOptions): Viewport;
pinch(options?: IPinchOptions): Viewport;
snap(x: number, y: number, options?: ISnapOptions): Viewport;
follow(target: DisplayObject, options?: IFollowOptions): Viewport;
wheel(options?: IWheelOptions): Viewport;
animate(options: IAnimateOptions): Viewport;
clampZoom(options: IClampZoomOptions): Viewport;
mouseEdges(options: IMouseEdgesOptions): Viewport;
get pause(): boolean;
set pause(value: boolean);
ensureVisible(x: number, y: number, width: number, height: number, resizeToFit?: boolean): void;
}