import { ChibiEvent, Component, Container, FixedUpdatable, IVec2 } from "chibiengine"; import PhysicsBody from "../body/PhysicsBody"; import { Box2DModule } from "../Box2D"; import Contact from "../contact/Contact"; import Manifold from "../contact/Manifold"; import ContactImpulse from "../contact/ContactImpulse"; interface PhysicsWorldOptions { gravity?: number; updateRate?: number; debugDraw?: boolean; } export default class PhysicsWorld extends Component<"world", Container> implements FixedUpdatable { readonly componentName: "world"; static readonly PIXELS_PER_METER = 32; immediateApply: boolean; private _box2D; private _box2DPromise; b2World: Box2D.b2World; target: Container; private b2DebugDraw; private debugGraphics; readonly bodies: PhysicsBody[]; private readonly gravity; readonly updateRate: number; private readonly debugDraw; onBeginContact: ChibiEvent<[Contact]>; onEndContact: ChibiEvent<[Contact]>; onPreSolve: ChibiEvent<[Contact, Manifold]>; onPostSolve: ChibiEvent<[Contact, ContactImpulse]>; constructor(options?: PhysicsWorldOptions); initialize(target: Container): Promise; preApply(target: Container): Promise; BeginContact(b2Contact: Box2D.b2Contact | number): void; EndContact(b2Contact: Box2D.b2Contact | number): void; PreSolve(b2Contact: Box2D.b2Contact | number, b2OldManifold: Box2D.b2Manifold | number): void; PostSolve(b2Contact: Box2D.b2Contact | number, b2Impulse: Box2D.b2ContactImpulse | number): void; box2D(): Promise; get instantiatedBox2D(): Box2DModule; update(): void; createBody(body: PhysicsBody, bodyDef: Box2D.b2BodyDef): Box2D.b2Body; pixelsToMeters(pixels: number): number; metersToPixels(meters: number): number; /** * @param vec Vector in pixels * @returns Vector in Box2D meters */ vec2ToBox2D(vec: IVec2): Box2D.b2Vec2; } export {};