import { BasePlugin } from '@tinoe/glb'; import { Scene2D, Sprite } from '@tinoe/glc'; import { CollisionListenerSystem } from '../physics'; import { Box2DRigidBodyOptions, Box2DWorldOptions, Box2DDistanceJointOptions, Box2DGearJointOptions, Box2DMotorJointOptions, Box2DMouseJointOptions, Box2DPrismaticJointOptions, Box2DPulleyJointOptions, Box2DRevoluteJointOptions, Box2DWeldJointOptions, Box2DWheelJointOptions, Box2DMouseJoint } from './interface'; import { Box2DJoint } from './Joint'; import { Box2DRigidBody } from './RigidBody'; import { Box2DWorld } from './World'; /** * 只支持刚体的物理引擎 */ export declare abstract class Box2DPhysicsPlugin extends BasePlugin { /** * 物理世界 */ protected _world: Box2DWorld; /** * 物理引擎所应用的场景 */ protected _scene: Scene2D; /** * 物理世界的刚体和Mesh的关系对应 */ protected _rigidBodyMap: Map; private _updateScript; get world(): Box2DWorld; abstract initWorld(options?: Box2DWorldOptions): Promise; private _guessDefaultRigidBodyShapeOptions; /** * 添加刚体 * @param mesh * @param options */ addRigidBody(sprite: Sprite, options?: Box2DRigidBodyOptions): Box2DRigidBody; getRigidBodyBySprite(sprite: Sprite): Box2DRigidBody; getSpriteByBody(body: any): Sprite; private _collisionEnabled; private _contactListener; enableCollisionDetection(): void; protected _bodyId: number; protected _collisionSystem: CollisionListenerSystem; addCollider(sprite: Sprite, options?: Box2DRigidBodyOptions): Box2DRigidBody; /** * 移除刚体 * @param body */ removeRigidBody(body: Box2DRigidBody): void; /** * 添加限制 * @param options */ addJoint(options: Box2DDistanceJointOptions): Box2DJoint; addJoint(options: Box2DGearJointOptions): Box2DJoint; addJoint(options: Box2DMouseJointOptions): Box2DMouseJoint; addJoint(options: Box2DMotorJointOptions): Box2DJoint; addJoint(options: Box2DRevoluteJointOptions): Box2DJoint; addJoint(options: Box2DWeldJointOptions): Box2DJoint; addJoint(options: Box2DWheelJointOptions): Box2DJoint; addJoint(options: Box2DPrismaticJointOptions): Box2DJoint; addJoint(options: Box2DPulleyJointOptions): Box2DJoint; /** * 移除限制 * @param joint */ removeJoint(joint: Box2DJoint): void; /** * 单步更新刚体 */ private _updateRigidBody; /** * 更新世界 */ protected _update: (deltaTime: number) => void; apply({ scene }: { scene: Scene2D; }): void; destroy(): void; private _detectCollision; }