/// import { Physics, Types } from "phaser"; import { CollidingObject } from "./valid-collision-object"; declare type CO = CollidingObject; /** Helper to construct variants of the types where specific properties are optional. */ export declare type SelectivePartial = Omit & Partial; /** Alias to Matter type. */ export declare type MatterCollisionData = Types.Physics.Matter.MatterCollisionData; /** Extended matter collision event data with game objects. */ export interface ExtendedMatterCollisionData extends MatterCollisionData { gameObjectA?: CO; gameObjectB?: CO; } export declare type CollisionEvent = Physics.Matter.Events.CollisionStartEvent | Physics.Matter.Events.CollisionActiveEvent | Physics.Matter.Events.CollisionEndEvent; export interface EventData { bodyA: MatterJS.Body; bodyB: MatterJS.Body; gameObjectA?: T; gameObjectB?: K; isReversed: boolean; pair: ExtendedMatterCollisionData; } /** * This generic type represents a start/active/end callback. It is used internally, but it can also * be used when you need to type a "callback" property manually, for example: * ```ts * const sprite = this.matter.add.sprite(350, 100, "emoji", "1f62c"); * const image = this.matter.add.image(350, 200, "emoji", "1f62c"); * const callback: CollideCallback = (e) => { * console.log("Hit!"); * }; * this.matterCollision.addOnCollideStart({ * objectA: sprite, * objectB: image, * callback: callback, * }); * ``` */ export interface CollideCallback { (event: EventData): void; } /** Config for specified A object(s) vs anything else collision listeners. */ export interface CollideAConfig { objectA: T | T[]; callback: CollideCallback; context?: CollideContext; } /** Config for specified A object(s) vs specified B object(s). */ export interface CollideABConfig { objectA: T | T[]; objectB: K | K[]; callback: CollideCallback; context?: CollideContext; } export interface InternalCollideConfig { objectA: CO | CO[]; objectB?: CO | CO[]; callback: CollideCallback; context?: CollideContext; } export declare type CollideContext = any; /** Variant of CollideAConfig to be used when removing listeners (where callback is optional). */ export declare type RemoveCollideConfigA = SelectivePartial, "callback">; /** Variant of CollideABConfig to be used when removing listeners (where callback is optional). */ export declare type RemoveCollideConfigAB = SelectivePartial, "callback">; export declare type InternalCollideRemoveConfig = SelectivePartial; export interface ListenerInfo { target?: CO; callback: CollideCallback; context?: CollideContext; } export declare type ListenerMap = Map[]>; export interface Unsubscribe { (): void; } export {};