import { BufferGeometry, Mesh } from '@tinoe/glc'; import { AmmoRigidBody } from './RigidBody'; import { AmmoWorld } from './World'; import { AmmoSoftBody } from './SoftBody'; import { AmmoRigidBodyOptions, AmmoWorldOptions, AmmoBallAndSocketJointOptions, AmmoDistanceJointOptions, AmmoHingeJointOptions, AmmoSoftBodyOptionsAll, AmmoSoftBodyOptions } from './interface'; import { AmmoJoint } from './Joint'; import { PhysicsPlugin } from '../physics'; /** * 只支持刚体的物理引擎 */ export declare abstract class AmmoPhysicsPlugin extends PhysicsPlugin { /** * 物理世界 */ protected _world: AmmoWorld; /** * 物理世界的刚体和Mesh的关系对应 */ protected _rigidBodyMap: Map, { body: AmmoRigidBody; }>; /** * 物理世界的软体和mesh的关系对应 */ protected _softBodyMap: Map, { body: AmmoSoftBody; association: { [x: string]: number; }; }>; get world(): AmmoWorld; abstract initWorld(options?: AmmoWorldOptions): Promise; /** * 添加刚体 * @param mesh * @param options */ R: any; addRigidBody(mesh: Mesh, options?: AmmoRigidBodyOptions): AmmoRigidBody; getRigidBodyByMesh(mesh: Mesh): AmmoRigidBody; getMeshByBody(body: AmmoSoftBody | AmmoRigidBody): Mesh; /** * 移除刚体 * @param body */ removeRigidBody(body: AmmoRigidBody): void; /** * 讲transform应用到position上 * @param mesh */ private _processSoftTransform; /** * 从geometry中获取一些默认参数 * @param geometry * @returns */ private _guessDefaultSoftBodyOptions; private _isEqual; private _mapIndice; addSoftBody(mesh: Mesh, options?: AmmoSoftBodyOptionsAll | AmmoSoftBodyOptions): AmmoSoftBody; /** * 移除软体 * @param body */ removeSoftBody(body: AmmoSoftBody): void; /** * 添加限制 * @param options */ addJoint(options: AmmoDistanceJointOptions): AmmoJoint; addJoint(options: AmmoHingeJointOptions): AmmoJoint; addJoint(options: AmmoBallAndSocketJointOptions): AmmoJoint; /** * 移除限制 * @param joint */ removeJoint(joint: AmmoJoint): void; /** * 单步更新软体 */ private _tempArray; private _updateSoftBody; /** * 更新世界 */ protected _update: (deltaTime: number) => void; addCollider(mesh: Mesh, options?: AmmoRigidBodyOptions): AmmoRigidBody; private _detectCollision; }