///
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 {};