@combos-fun/plugin-cannon 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -918,11 +918,11 @@ var Physics3DConstraintSystem = Physics3DConstraintSystem$1;
918
918
  /** Auto-generated by scripts/build-package.mjs — do not edit. */
919
919
  Object.assign(Physics3DConstraintSystem, {
920
920
  packageName: "@combos-fun/plugin-cannon",
921
- packageVersion: "0.1.0",
921
+ packageVersion: "0.1.1",
922
922
  });
923
923
  Object.assign(Physics3DSystem, {
924
924
  packageName: "@combos-fun/plugin-cannon",
925
- packageVersion: "0.1.0",
925
+ packageVersion: "0.1.1",
926
926
  });
927
927
 
928
928
  class Physics3DConstraint extends engine.Component {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-cannon.cjs.js","sources":["../lib/Physics3D.ts","../lib/createShape.ts","../lib/modelCollider.ts","../lib/resolve.ts","../lib/BodiesFactory.ts","../lib/Physics3DEngine.ts","../lib/Physics3DSystem.ts","../lib/Physics3DConstraintSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/Physics3DConstraint.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Euler, Quaternion, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport * as CANNON from 'cannon-es';\n\nexport enum Physics3DType {\n BOX = 'box',\n SPHERE = 'sphere',\n CYLINDER = 'cylinder',\n PLANE = 'plane',\n CONE = 'cone',\n TORUS = 'torus',\n CAPSULE = 'capsule',\n COMPOUND = 'compound',\n}\n\nexport type Physics3DCollider = 'manual' | 'aabb' | 'hull' | 'trimesh';\n\nexport interface Physics3DPartParams {\n type?: Physics3DType | string\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n finite?: boolean\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n}\n\nexport interface Physics3DParams {\n type?: Physics3DType | string\n mass?: number\n bodyOptions?: {\n friction?: number\n restitution?: number\n linearDamping?: number\n angularDamping?: number\n fixedRotation?: boolean\n [propName: string]: any\n }\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n stopRotation?: boolean\n finite?: boolean\n collider?: Physics3DCollider\n parts?: Physics3DPartParams[]\n}\n\nexport class Physics3D extends Component<Physics3DParams> {\n static componentName: string = 'Physics3D';\n public bodyParams: Physics3DParams;\n public body: CANNON.Body;\n private world: CANNON.World;\n /** Last mesh-collider fingerprint; used to rebuild after model load / scale. */\n public meshColliderKey?: string;\n\n // Readable position/rotation synced from body each frame\n public positionX: number = 0;\n public positionY: number = 0;\n public positionZ: number = 0;\n public rotationX: number = 0;\n public rotationY: number = 0;\n public rotationZ: number = 0;\n\n private _euler: CANNON.Vec3 = new CANNON.Vec3();\n private _worldPos = new Vector3();\n private _worldQuat = new Quaternion();\n private _bodyQuat = new Quaternion();\n private _localEuler = new Euler();\n\n init(params: Physics3DParams) {\n this.bodyParams = params || {};\n }\n\n update() {\n if (this.body && this.gameObject) {\n // Sync position from Cannon body\n this.positionX = this.body.position.x;\n this.positionY = this.body.position.y;\n this.positionZ = this.body.position.z;\n\n // Convert quaternion to Euler and sync rotation\n if (!this.bodyParams.stopRotation) {\n this.body.quaternion.toEuler(this._euler);\n this.rotationX = this._euler.x;\n this.rotationY = this._euler.y;\n this.rotationZ = this._euler.z;\n }\n\n this._worldPoseToLocalIfParented();\n\n // Auto-sync to sibling Transform3D / visual components on the same GameObject\n this._syncToSiblings();\n }\n }\n\n onDestroy() {\n if (this.world && this.body) {\n this.world.removeBody(this.body);\n }\n }\n\n private _worldPoseToLocalIfParented() {\n const renderer = this.game?.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const node = renderer?.threeContext?.object3DFor(this.gameObject.id);\n const scene = renderer?.threeContext?.scene;\n if (!node?.parent || node.parent === scene) return;\n\n node.parent.updateWorldMatrix(true, false);\n this._worldPos.set(this.positionX, this.positionY, this.positionZ);\n node.parent.worldToLocal(this._worldPos);\n this.positionX = this._worldPos.x;\n this.positionY = this._worldPos.y;\n this.positionZ = this._worldPos.z;\n\n if (!this.bodyParams.stopRotation) {\n node.parent.getWorldQuaternion(this._worldQuat).invert();\n this._bodyQuat.set(\n this.body.quaternion.x,\n this.body.quaternion.y,\n this.body.quaternion.z,\n this.body.quaternion.w,\n );\n this._bodyQuat.premultiply(this._worldQuat);\n this._localEuler.setFromQuaternion(this._bodyQuat);\n this.rotationX = this._localEuler.x;\n this.rotationY = this._localEuler.y;\n this.rotationZ = this._localEuler.z;\n }\n }\n\n private _syncToSiblings() {\n const components = this.gameObject.components;\n if (!components) return;\n for (let i = 0; i < components.length; i++) {\n const comp = components[i] as any;\n if (comp === this) continue;\n if ('positionX' in comp && 'positionY' in comp && 'positionZ' in comp) {\n comp.positionX = this.positionX;\n comp.positionY = this.positionY;\n comp.positionZ = this.positionZ;\n }\n if (!this.bodyParams.stopRotation && 'rotationX' in comp && 'rotationY' in comp && 'rotationZ' in comp) {\n comp.rotationX = this.rotationX;\n comp.rotationY = this.rotationY;\n comp.rotationZ = this.rotationZ;\n }\n }\n }\n}\n","import * as CANNON from 'cannon-es';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3DPartParams } from './Physics3D';\n\nexport interface ShapeDims {\n width: number\n height: number\n depth: number\n radius: number\n radiusTop: number\n radiusBottom: number\n segments: number\n tube: number\n finite?: boolean\n}\n\nexport interface PlacedShape {\n shape: CANNON.Shape\n offset?: CANNON.Vec3\n quaternion?: CANNON.Quaternion\n}\n\nexport const TYPE_BY_SHAPE: Record<string, Physics3DType> = {\n box: Physics3DType.BOX,\n sphere: Physics3DType.SPHERE,\n cylinder: Physics3DType.CYLINDER,\n plane: Physics3DType.PLANE,\n cone: Physics3DType.CONE,\n torus: Physics3DType.TORUS,\n capsule: Physics3DType.CAPSULE,\n compound: Physics3DType.COMPOUND,\n};\n\nexport function normalizeType(type?: string): Physics3DType {\n if (!type) return Physics3DType.BOX;\n return TYPE_BY_SHAPE[type] ?? (type as Physics3DType);\n}\n\nexport function torusTube(radius: number, tube?: number): number {\n return tube && tube > 0 ? tube : radius * 0.4;\n}\n\nexport function dimsFromParams(params: Physics3DPartParams, fallback?: Partial<ShapeDims>): ShapeDims {\n const radius = params.radius ?? fallback?.radius ?? 0.5;\n return {\n width: params.width ?? fallback?.width ?? 1,\n height: params.height ?? fallback?.height ?? 1,\n depth: params.depth ?? fallback?.depth ?? 1,\n radius,\n radiusTop: params.radiusTop ?? radius,\n radiusBottom: params.radiusBottom ?? radius,\n segments: Math.max(6, Math.round(params.segments ?? fallback?.segments ?? 12)),\n tube: torusTube(radius, params.tube ?? fallback?.tube),\n finite: params.finite ?? fallback?.finite,\n };\n}\n\nexport function offsetFromPart(part: Physics3DPartParams): CANNON.Vec3 {\n return new CANNON.Vec3(\n part.positionX ?? part.position?.x ?? 0,\n part.positionY ?? part.position?.y ?? 0,\n part.positionZ ?? part.position?.z ?? 0,\n );\n}\n\nexport function quaternionFromPart(part: Physics3DPartParams): CANNON.Quaternion | undefined {\n const x = part.rotationX ?? part.rotation?.x ?? 0;\n const y = part.rotationY ?? part.rotation?.y ?? 0;\n const z = part.rotationZ ?? part.rotation?.z ?? 0;\n if (!x && !y && !z) return undefined;\n const q = new CANNON.Quaternion();\n q.setFromEuler(x, y, z);\n return q;\n}\n\nexport function placedShapesForType(type: Physics3DType | string, dims: ShapeDims): PlacedShape[] {\n const kind = normalizeType(type as string);\n switch (kind) {\n case Physics3DType.SPHERE:\n return [{ shape: new CANNON.Sphere(dims.radius) }];\n case Physics3DType.CYLINDER:\n return [{\n shape: new CANNON.Cylinder(\n dims.radiusTop, dims.radiusBottom, dims.height, dims.segments,\n ),\n }];\n case Physics3DType.CONE:\n return [{\n shape: new CANNON.Cylinder(0.001, dims.radius, dims.height, dims.segments),\n }];\n case Physics3DType.PLANE:\n if (dims.finite) {\n return [{ shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, 0.01)) }];\n }\n return [{ shape: new CANNON.Plane() }];\n case Physics3DType.TORUS:\n return torusShapes(dims);\n case Physics3DType.CAPSULE:\n return capsuleShapes(dims);\n case Physics3DType.BOX:\n default:\n return [{\n shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, dims.depth / 2)),\n }];\n }\n}\n\nfunction torusShapes(dims: ShapeDims): PlacedShape[] {\n const n = Math.max(8, Math.min(12, dims.segments));\n const placed: PlacedShape[] = [];\n for (let i = 0; i < n; i++) {\n const angle = (i / n) * Math.PI * 2;\n placed.push({\n shape: new CANNON.Sphere(dims.tube),\n offset: new CANNON.Vec3(\n Math.cos(angle) * dims.radius,\n 0,\n Math.sin(angle) * dims.radius,\n ),\n });\n }\n return placed;\n}\n\nfunction capsuleShapes(dims: ShapeDims): PlacedShape[] {\n const cyl = Math.max(0, dims.height - 2 * dims.radius);\n const placed: PlacedShape[] = [];\n if (cyl > 0.001) {\n placed.push({\n shape: new CANNON.Cylinder(dims.radius, dims.radius, cyl, dims.segments),\n });\n }\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, cyl / 2, 0),\n });\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, -cyl / 2, 0),\n });\n return placed;\n}\n","import * as CANNON from 'cannon-es';\nimport {\n Box3,\n BufferGeometry,\n Mesh,\n Object3D,\n Vector3,\n} from 'three';\nimport { ConvexGeometry } from 'three/addons/geometries/ConvexGeometry.js';\nimport type { Physics3DCollider } from './Physics3D';\n\nconst _box = new Box3();\nconst _size = new Vector3();\nconst _center = new Vector3();\nconst _vertex = new Vector3();\n\nexport function withIdentityPose<T>(root: Object3D, fn: () => T): T {\n const px = root.position.x;\n const py = root.position.y;\n const pz = root.position.z;\n const rx = root.rotation.x;\n const ry = root.rotation.y;\n const rz = root.rotation.z;\n root.position.set(0, 0, 0);\n root.rotation.set(0, 0, 0);\n root.updateMatrixWorld(true);\n try {\n return fn();\n } finally {\n root.position.set(px, py, pz);\n root.rotation.set(rx, ry, rz);\n root.updateMatrixWorld(true);\n }\n}\n\nexport function addModelCollider(\n body: CANNON.Body,\n root: Object3D,\n collider: Physics3DCollider,\n): boolean {\n return withIdentityPose(root, () => {\n if (collider === 'trimesh') {\n return addTrimesh(body, root);\n }\n if (collider === 'hull') {\n return addHull(body, root);\n }\n return addAabb(body, root);\n });\n}\n\nfunction addAabb(body: CANNON.Body, root: Object3D): boolean {\n _box.setFromObject(root);\n if (_box.isEmpty()) return false;\n _box.getSize(_size);\n _box.getCenter(_center);\n if (_size.x <= 0 && _size.y <= 0 && _size.z <= 0) return false;\n body.addShape(\n new CANNON.Box(new CANNON.Vec3(\n Math.max(_size.x / 2, 0.01),\n Math.max(_size.y / 2, 0.01),\n Math.max(_size.z / 2, 0.01),\n )),\n new CANNON.Vec3(_center.x, _center.y, _center.z),\n );\n return true;\n}\n\nfunction addTrimesh(body: CANNON.Body, root: Object3D): boolean {\n let added = false;\n root.traverse((child) => {\n const mesh = child as Mesh;\n const geometry = mesh.geometry as BufferGeometry | undefined;\n const position = geometry?.attributes?.position;\n if (!position) return;\n const vertices: number[] = [];\n for (let i = 0; i < position.count; i++) {\n _vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld);\n vertices.push(_vertex.x, _vertex.y, _vertex.z);\n }\n const indices: number[] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i < array.length; i++) {\n indices.push(array[i]);\n }\n } else {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n }\n if (indices.length < 3) return;\n body.addShape(new CANNON.Trimesh(vertices, indices));\n added = true;\n });\n return added;\n}\n\nfunction addHull(body: CANNON.Body, root: Object3D): boolean {\n const points: Vector3[] = [];\n root.traverse((child) => {\n const mesh = child as Mesh;\n const position = mesh.geometry?.attributes?.position;\n if (!position) return;\n const stride = position.count > 128 ? Math.ceil(position.count / 128) : 1;\n for (let i = 0; i < position.count; i += stride) {\n points.push(_vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld).clone());\n }\n });\n if (points.length < 4) {\n return addAabb(body, root);\n }\n try {\n const geometry = new ConvexGeometry(points);\n const pos = geometry.attributes.position;\n const vertices: CANNON.Vec3[] = [];\n const indexOf = new Map<string, number>();\n const add = (x: number, y: number, z: number) => {\n const key = `${x.toFixed(5)},${y.toFixed(5)},${z.toFixed(5)}`;\n const existing = indexOf.get(key);\n if (existing != null) return existing;\n const i = vertices.length;\n vertices.push(new CANNON.Vec3(x, y, z));\n indexOf.set(key, i);\n return i;\n };\n const faces: number[][] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i + 2 < array.length; i += 3) {\n faces.push([\n add(pos.getX(array[i]), pos.getY(array[i]), pos.getZ(array[i])),\n add(pos.getX(array[i + 1]), pos.getY(array[i + 1]), pos.getZ(array[i + 1])),\n add(pos.getX(array[i + 2]), pos.getY(array[i + 2]), pos.getZ(array[i + 2])),\n ]);\n }\n } else {\n for (let i = 0; i + 2 < pos.count; i += 3) {\n faces.push([\n add(pos.getX(i), pos.getY(i), pos.getZ(i)),\n add(pos.getX(i + 1), pos.getY(i + 1), pos.getZ(i + 1)),\n add(pos.getX(i + 2), pos.getY(i + 2), pos.getZ(i + 2)),\n ]);\n }\n }\n geometry.dispose();\n if (vertices.length < 4 || faces.length < 4) {\n return addAabb(body, root);\n }\n body.addShape(new CANNON.ConvexPolyhedron({ vertices, faces }));\n return true;\n } catch {\n return addAabb(body, root);\n }\n}\n","import { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DCollider, Physics3DPartParams } from './Physics3D';\nimport { normalizeType } from './createShape';\n\nexport interface Graphics3DLike {\n shape?: string\n width?: number\n height?: number\n depth?: number\n radius?: number\n segments?: number\n tube?: number\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n parts?: Physics3DPartParams[]\n}\n\nexport interface Model3DLike {\n resource?: string\n scaleX?: number\n scaleY?: number\n scaleZ?: number\n}\n\nexport function resolveCollider(\n params: Physics3D['bodyParams'],\n model?: Model3DLike,\n): Physics3DCollider {\n if (params.collider) return params.collider;\n if (params.type || (params.parts && params.parts.length > 0)) return 'manual';\n return model ? 'aabb' : 'manual';\n}\n\nexport function resolveType(\n params: Physics3D['bodyParams'],\n graphics?: Graphics3DLike,\n): Physics3DType {\n if (params.type) return normalizeType(params.type as string);\n if ((params.parts && params.parts.length > 0) || (graphics?.parts && graphics.parts.length > 0)) {\n return Physics3DType.COMPOUND;\n }\n if (graphics?.shape) return normalizeType(graphics.shape);\n return Physics3DType.BOX;\n}\n\nexport function meshColliderFingerprint(\n collider: Physics3DCollider,\n model?: Model3DLike,\n): string | undefined {\n if (!model || collider === 'manual') return undefined;\n return `${collider}:${model.resource}:${model.scaleX}:${model.scaleY}:${model.scaleZ}`;\n}\n","import * as CANNON from 'cannon-es';\nimport type { Object3D } from 'three';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DPartParams } from './Physics3D';\nimport {\n dimsFromParams,\n normalizeType,\n offsetFromPart,\n placedShapesForType,\n quaternionFromPart,\n} from './createShape';\nimport type { ShapeDims } from './createShape';\nimport { addModelCollider } from './modelCollider';\nimport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\n\nexport type { Graphics3DLike, Model3DLike } from './resolve';\nexport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\n\nexport interface BodiesFactoryContext {\n graphics?: Graphics3DLike\n model?: Model3DLike\n modelGroup?: Object3D\n pose?: Graphics3DLike\n}\n\nfunction applyBodyOptions(body: CANNON.Body, options: Record<string, any> | undefined) {\n if (!options) return;\n if (options.friction !== undefined) {\n body.material = new CANNON.Material({\n friction: options.friction,\n restitution: options.restitution ?? 0.3,\n });\n }\n if (options.restitution !== undefined && !body.material) {\n body.material = new CANNON.Material({ friction: 0.3, restitution: options.restitution });\n }\n if (options.linearDamping !== undefined) body.linearDamping = options.linearDamping;\n if (options.angularDamping !== undefined) body.angularDamping = options.angularDamping;\n if (options.fixedRotation !== undefined) body.fixedRotation = options.fixedRotation;\n body.updateMassProperties();\n}\n\nfunction addPlaced(body: CANNON.Body, type: string, dims: ShapeDims, part?: Physics3DPartParams) {\n const placed = placedShapesForType(type, dims);\n const extraOffset = part ? offsetFromPart(part) : new CANNON.Vec3();\n const extraQuat = part ? quaternionFromPart(part) : undefined;\n for (const item of placed) {\n const local = (item.offset ? item.offset.clone() : new CANNON.Vec3());\n if (extraQuat) extraQuat.vmult(local, local);\n const offset = extraOffset.vadd(local);\n const quat = extraQuat && item.quaternion\n ? extraQuat.mult(item.quaternion)\n : (extraQuat || item.quaternion);\n body.addShape(item.shape, offset, quat);\n }\n}\n\nexport default class BodiesFactory {\n public create(component: Physics3D, context: BodiesFactoryContext = {}): CANNON.Body | null {\n const { bodyParams } = component;\n const graphics = context.graphics;\n const model = context.model;\n const collider = resolveCollider(bodyParams, model);\n\n if (collider !== 'manual') {\n if (!context.modelGroup) return null;\n let mass = bodyParams.mass ?? 1;\n if (collider === 'trimesh' && mass !== 0) {\n mass = 0;\n }\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n const ok = addModelCollider(body, context.modelGroup, collider);\n if (!ok) return null;\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = meshColliderFingerprint(collider, model);\n return body;\n }\n\n const type = resolveType(bodyParams, graphics);\n const dims = dimsFromParams(bodyParams, {\n width: graphics?.width,\n height: graphics?.height,\n depth: graphics?.depth,\n radius: graphics?.radius,\n segments: graphics?.segments,\n tube: graphics?.tube,\n finite: bodyParams.finite,\n });\n\n const infinitePlane = type === Physics3DType.PLANE && !dims.finite;\n const mass = infinitePlane ? 0 : (bodyParams.mass ?? 1);\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n\n if (type === Physics3DType.COMPOUND) {\n const parts = bodyParams.parts?.length ? bodyParams.parts : (graphics?.parts || []);\n if (!parts.length) {\n addPlaced(body, Physics3DType.BOX, dims);\n } else {\n for (const part of parts) {\n const partType = part.type || (part as { shape?: string }).shape || Physics3DType.BOX;\n if (normalizeType(partType as string) === Physics3DType.COMPOUND) continue;\n const partDims = dimsFromParams(part, dims);\n addPlaced(body, partType as string, partDims, part);\n }\n }\n } else {\n addPlaced(body, type, dims);\n }\n\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = undefined;\n return body;\n }\n\n private createBodyShell(\n component: Physics3D,\n mass: number,\n graphics?: Graphics3DLike,\n ): CANNON.Body {\n const body = new CANNON.Body({ mass });\n const pos = component.bodyParams.position;\n body.position.set(\n pos?.x ?? graphics?.positionX ?? 0,\n pos?.y ?? graphics?.positionY ?? 0,\n pos?.z ?? graphics?.positionZ ?? 0,\n );\n const rot = component.bodyParams.rotation;\n const rx = rot?.x ?? graphics?.rotationX ?? 0;\n const ry = rot?.y ?? graphics?.rotationY ?? 0;\n const rz = rot?.z ?? graphics?.rotationZ ?? 0;\n if (rx || ry || rz) {\n body.quaternion.setFromEuler(rx, ry, rz);\n }\n return body;\n }\n}\n","import * as CANNON from 'cannon-es';\nimport type { Component, Game, GameObject } from '@combos-fun/engine';\nimport { Euler, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport BodiesFactory from './BodiesFactory';\nimport type { BodiesFactoryContext } from './BodiesFactory';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\nimport { meshColliderFingerprint, resolveCollider } from './resolve';\nimport type { Physics3DSystemParams } from './Physics3DSystem';\nimport type { Physics3D } from './Physics3D';\nimport type { Physics3DConstraint } from './Physics3DConstraint';\n\ninterface PhysicsLinkedBody extends CANNON.Body {\n component?: Physics3D;\n}\n\nexport default class Physics3DEngine {\n private world: CANNON.World;\n private bodiesFactory: BodiesFactory;\n private options: Physics3DSystemParams;\n private game: Game;\n private pending = new Set<Physics3D>();\n private pendingConstraints = new Set<Physics3DConstraint>();\n private constraints = new Set<Physics3DConstraint>();\n private contactPairs = new Map<string, [Physics3D, Physics3D]>();\n public enabled: boolean = false;\n\n constructor(game: Game, options: Physics3DSystemParams) {\n this.game = game;\n this.options = options ?? {};\n this.bodiesFactory = new BodiesFactory();\n }\n\n public start() {\n this.world = new CANNON.World();\n\n const gravity = this.options.gravity ?? { x: 0, y: -9.82, z: 0 };\n this.world.gravity.set(gravity.x, gravity.y, gravity.z);\n\n if (this.options.solver) {\n const solver = this.world.solver as CANNON.GSSolver;\n if (this.options.solver.iterations !== undefined) {\n solver.iterations = this.options.solver.iterations;\n }\n if (this.options.solver.tolerance !== undefined) {\n solver.tolerance = this.options.solver.tolerance;\n }\n }\n\n this.world.broadphase = new CANNON.NaiveBroadphase();\n this.world.allowSleep = this.options.allowSleep ?? false;\n\n this.enabled = true;\n this.initCollisionEvents();\n }\n\n public update(e) {\n if (!this.world || !this.enabled) return;\n this.flushPending();\n this.rebuildStaleMeshColliders();\n const fixedTimeStep = this.options.fixedTimeStep ?? 1 / 60;\n const maxSubSteps = this.options.maxSubSteps ?? 3;\n const dt = (e.deltaTime || 16.67) / 1000;\n this.flushConstraints();\n this.world.step(fixedTimeStep, dt, maxSubSteps);\n this.emitCollisionActive();\n }\n\n public stop() {\n this.enabled = false;\n }\n\n public awake() {\n this.enabled = true;\n }\n\n public destroy() {\n this.pending.clear();\n this.pendingConstraints.clear();\n this.contactPairs.clear();\n if (this.world) {\n for (const constraint of this.constraints) {\n if (constraint.constraint) this.world.removeConstraint(constraint.constraint);\n constraint.constraint = undefined;\n }\n this.constraints.clear();\n while (this.world.bodies.length > 0) {\n this.world.removeBody(this.world.bodies[0]);\n }\n this.world = null;\n }\n }\n\n public add(component: Physics3D) {\n const body = this.tryCreate(component);\n if (!body) {\n this.pending.add(component);\n return;\n }\n this.attach(component, body);\n }\n\n public change(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n this.pending.delete(component);\n this.add(component);\n }\n\n public remove(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n this.pending.delete(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n component.meshColliderKey = undefined;\n }\n\n public addConstraint(component: Physics3DConstraint) {\n this.removeConstraint(component);\n this.pendingConstraints.add(component);\n this.flushConstraints();\n }\n\n public removeConstraint(component: Physics3DConstraint) {\n this.pendingConstraints.delete(component);\n this.constraints.delete(component);\n if (component.constraint && this.world) {\n this.world.removeConstraint(component.constraint);\n }\n component.constraint = undefined;\n }\n\n public flushConstraints() {\n if (!this.world) return;\n for (const component of [...this.pendingConstraints]) {\n if (!component.gameObject) {\n this.pendingConstraints.delete(component);\n continue;\n }\n if (this.tryAttachConstraint(component)) {\n this.pendingConstraints.delete(component);\n }\n }\n }\n\n private tryCreate(component: Physics3D): PhysicsLinkedBody | null {\n const context = this.contextFor(component);\n return this.bodiesFactory.create(component, context) as PhysicsLinkedBody | null;\n }\n\n private attach(component: Physics3D, body: PhysicsLinkedBody) {\n this.world.addBody(body);\n component.body = body;\n (component as any).world = this.world;\n body.component = component;\n }\n\n private contextFor(component: Physics3D): BodiesFactoryContext {\n const gameObject = component.gameObject as GameObject | undefined;\n const graphics = gameObject?.getComponent('Graphics3D') as Graphics3DLike | undefined;\n const model = gameObject?.getComponent('Model3D') as Model3DLike | undefined;\n const transform3d = gameObject?.getComponent('Transform3D') as Graphics3DLike | undefined;\n const renderer = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const modelGroup = gameObject ? renderer?.threeContext?.models.get(gameObject.id) : undefined;\n const node = gameObject ? renderer?.threeContext?.object3DFor(gameObject.id) : undefined;\n const scene = renderer?.threeContext?.scene;\n let worldPose: Graphics3DLike | undefined;\n if (node?.parent && node.parent !== scene) {\n node.updateWorldMatrix(true, false);\n const position = new Vector3();\n const euler = new Euler();\n node.getWorldPosition(position);\n euler.setFromRotationMatrix(node.matrixWorld);\n worldPose = {\n positionX: position.x,\n positionY: position.y,\n positionZ: position.z,\n rotationX: euler.x,\n rotationY: euler.y,\n rotationZ: euler.z,\n };\n }\n return { graphics, model, modelGroup, pose: worldPose || transform3d || graphics };\n }\n\n private flushPending() {\n if (!this.pending.size) return;\n for (const component of [...this.pending]) {\n if (!component.gameObject) {\n this.pending.delete(component);\n continue;\n }\n const body = this.tryCreate(component);\n if (body) {\n this.attach(component, body);\n this.pending.delete(component);\n }\n }\n }\n\n private rebuildStaleMeshColliders() {\n if (!this.world) return;\n const stale: Physics3D[] = [];\n for (const body of this.world.bodies) {\n const component = (body as PhysicsLinkedBody).component;\n if (!component?.gameObject) continue;\n const model = component.gameObject.getComponent('Model3D') as Model3DLike | undefined;\n const collider = resolveCollider(component.bodyParams, model);\n const key = meshColliderFingerprint(collider, model);\n if (!key || key === component.meshColliderKey) continue;\n stale.push(component);\n }\n for (const component of stale) {\n this.change(component);\n }\n }\n\n private initCollisionEvents() {\n this.world.addEventListener('beginContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionStart', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionStart', componentA.gameObject, componentB.gameObject);\n const pair = this.pairKey(bodyA, bodyB);\n this.contactPairs.set(pair, [bodyA.component, bodyB.component]);\n }\n });\n\n this.world.addEventListener('endContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionEnd', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionEnd', componentA.gameObject, componentB.gameObject);\n }\n this.contactPairs.delete(this.pairKey(bodyA, bodyB));\n });\n }\n\n private emitCollisionActive() {\n for (const [componentA, componentB] of this.contactPairs.values()) {\n if (!componentA?.gameObject || !componentB?.gameObject) continue;\n componentA.emit('collisionActive', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionActive', componentA.gameObject, componentB.gameObject);\n }\n }\n\n private pairKey(bodyA: CANNON.Body, bodyB: CANNON.Body) {\n return bodyA.id < bodyB.id ? `${bodyA.id}:${bodyB.id}` : `${bodyB.id}:${bodyA.id}`;\n }\n\n private clearContactsFor(component: Physics3D) {\n for (const [key, pair] of this.contactPairs) {\n if (pair[0] === component || pair[1] === component) {\n this.contactPairs.delete(key);\n }\n }\n }\n\n private tryAttachConstraint(component: Physics3DConstraint): boolean {\n const physicsA = component.gameObject?.getComponent('Physics3D') as Physics3D | undefined;\n const target = this.game.gameObjects.find((go) => go.name === component.target);\n const physicsB = target?.getComponent('Physics3D') as Physics3D | undefined;\n if (!physicsA?.body || !physicsB?.body || physicsA.body === physicsB.body) return false;\n const constraint = this.createConstraint(component, physicsA.body, physicsB.body);\n constraint.collideConnected = component.collideConnected;\n this.world.addConstraint(constraint);\n component.constraint = constraint;\n this.constraints.add(component);\n return true;\n }\n\n private createConstraint(\n component: Physics3DConstraint,\n bodyA: CANNON.Body,\n bodyB: CANNON.Body,\n ): CANNON.Constraint {\n const maxForce = component.maxForce;\n const pivotA = new CANNON.Vec3(component.pivotAX, component.pivotAY, component.pivotAZ);\n const pivotB = new CANNON.Vec3(component.pivotBX, component.pivotBY, component.pivotBZ);\n const axisA = new CANNON.Vec3(component.axisAX, component.axisAY, component.axisAZ);\n const axisB = new CANNON.Vec3(component.axisBX, component.axisBY, component.axisBZ);\n switch (component.type) {\n case 'point':\n return new CANNON.PointToPointConstraint(bodyA, pivotA, bodyB, pivotB, maxForce);\n case 'lock':\n return new CANNON.LockConstraint(bodyA, bodyB, { maxForce });\n case 'distance':\n return new CANNON.DistanceConstraint(bodyA, bodyB, component.distance, maxForce);\n case 'hinge':\n default: {\n const hinge = new CANNON.HingeConstraint(bodyA, bodyB, {\n pivotA,\n pivotB,\n axisA,\n axisB,\n maxForce,\n collideConnected: component.collideConnected,\n });\n if (component.motor) {\n hinge.enableMotor();\n hinge.setMotorSpeed(component.motorSpeed);\n }\n return hinge;\n }\n }\n }\n\n private detachConstraintsFor(physics: Physics3D) {\n for (const constraint of [...this.constraints]) {\n const physicsA = constraint.gameObject?.getComponent('Physics3D');\n const target = this.game.gameObjects.find((go) => go.name === constraint.target);\n const physicsB = target?.getComponent('Physics3D');\n if (physicsA === physics || physicsB === physics) {\n this.removeConstraint(constraint);\n this.pendingConstraints.add(constraint);\n }\n }\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DEngine from './Physics3DEngine';\nimport { Physics3D } from './Physics3D';\n\nexport interface Physics3DSystemParams {\n gravity?: {\n x: number\n y: number\n z: number\n }\n fixedTimeStep?: number\n maxSubSteps?: number\n allowSleep?: boolean\n solver?: {\n iterations?: number\n tolerance?: number\n }\n}\n\n@decorators.componentObserver({\n Physics3D: [{ prop: ['bodyParams'], deep: true }],\n GameObject: ['parent'],\n})\nexport default class Physics3DSystem extends System<Physics3DSystemParams> {\n static systemName = 'Physics3DSystem';\n public engine: Physics3DEngine;\n\n init(param?: Physics3DSystemParams) {\n this.engine = new Physics3DEngine(this.game, param);\n }\n\n awake() { }\n\n start() {\n this.engine.start();\n }\n\n update(e) {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n if (changed) {\n this.componentChanged(changed);\n }\n }\n this.engine.update(e);\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.component instanceof Physics3D) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.parent && !changed.gameObject.getComponent(Physics3D).body) {\n this.engine.add(changed.component);\n }\n break;\n }\n case OBSERVER_TYPE.CHANGE: {\n this.engine.change(changed.component);\n break;\n }\n case OBSERVER_TYPE.REMOVE: {\n this.engine.remove(changed.component);\n break;\n }\n }\n } else {\n // GameObject.parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if (changed.gameObject.parent) {\n let physics = changed.gameObject.getComponent(Physics3D);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics3D);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n\n lateUpdate() { }\n\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n\n onPause() {\n this.engine.stop();\n }\n\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DSystem from './Physics3DSystem';\nimport { Physics3DConstraint } from './Physics3DConstraint';\n\n@decorators.componentObserver({\n Physics3DConstraint: [\n 'type', 'target',\n 'pivotAX', 'pivotAY', 'pivotAZ',\n 'pivotBX', 'pivotBY', 'pivotBZ',\n 'axisAX', 'axisAY', 'axisAZ',\n 'axisBX', 'axisBY', 'axisBZ',\n 'distance', 'maxForce', 'collideConnected',\n 'motor', 'motorSpeed',\n ],\n})\nexport default class Physics3DConstraintSystem extends System {\n static systemName = 'Physics3DConstraintSystem';\n name: string = 'Physics3DConstraintSystem';\n\n init() {\n const physics = this.game.getSystem(Physics3DSystem) as Physics3DSystem;\n if (!physics) {\n console.warn('Physics3DConstraintSystem requires Physics3DSystem');\n }\n }\n\n update() {\n const engine = this.engine();\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n engine?.flushConstraints();\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Physics3DConstraint') return;\n const engine = this.engine();\n if (!engine) return;\n const component = changed.component as Physics3DConstraint;\n if (changed.type === OBSERVER_TYPE.REMOVE) {\n engine.removeConstraint(component);\n return;\n }\n engine.addConstraint(component);\n }\n\n private engine() {\n return (this.game.getSystem(Physics3DSystem) as Physics3DSystem | undefined)?.engine;\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport Physics3DConstraintSystem from './Physics3DConstraintSystem';\nimport Physics3DSystem from './Physics3DSystem';\n\nObject.assign(Physics3DConstraintSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.0\",\n});\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.0\",\n});\n","import { Component } from '@combos-fun/engine';\nimport type { Constraint } from 'cannon-es';\n\nexport type Physics3DConstraintKind = 'hinge' | 'point' | 'lock' | 'distance';\n\nexport interface Physics3DConstraintParams {\n type?: Physics3DConstraintKind | string;\n target?: string;\n pivotAX?: number;\n pivotAY?: number;\n pivotAZ?: number;\n pivotBX?: number;\n pivotBY?: number;\n pivotBZ?: number;\n axisAX?: number;\n axisAY?: number;\n axisAZ?: number;\n axisBX?: number;\n axisBY?: number;\n axisBZ?: number;\n distance?: number;\n maxForce?: number;\n collideConnected?: boolean;\n motor?: boolean;\n motorSpeed?: number;\n}\n\nexport class Physics3DConstraint extends Component<Physics3DConstraintParams> {\n static componentName: string = 'Physics3DConstraint';\n\n type: string = 'hinge';\n target: string = '';\n pivotAX: number = 0;\n pivotAY: number = 0;\n pivotAZ: number = 0;\n pivotBX: number = 0;\n pivotBY: number = 0;\n pivotBZ: number = 0;\n axisAX: number = 0;\n axisAY: number = 1;\n axisAZ: number = 0;\n axisBX: number = 0;\n axisBY: number = 1;\n axisBZ: number = 0;\n distance: number = 1;\n maxForce: number = 1e6;\n collideConnected: boolean = true;\n motor: boolean = false;\n motorSpeed: number = 0;\n constraint?: Constraint;\n\n init(obj?: Physics3DConstraintParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n"],"names":["Physics3DType","Component","CANNON","Vector3","Quaternion","Euler","Renderer3DSystem","Box3","ConvexGeometry","Physics3DSystem","System","OBSERVER_TYPE","__decorate","decorators","Physics3DConstraintSystem","engine"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-cannon.cjs.js","sources":["../lib/Physics3D.ts","../lib/createShape.ts","../lib/modelCollider.ts","../lib/resolve.ts","../lib/BodiesFactory.ts","../lib/Physics3DEngine.ts","../lib/Physics3DSystem.ts","../lib/Physics3DConstraintSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/Physics3DConstraint.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Euler, Quaternion, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport * as CANNON from 'cannon-es';\n\nexport enum Physics3DType {\n BOX = 'box',\n SPHERE = 'sphere',\n CYLINDER = 'cylinder',\n PLANE = 'plane',\n CONE = 'cone',\n TORUS = 'torus',\n CAPSULE = 'capsule',\n COMPOUND = 'compound',\n}\n\nexport type Physics3DCollider = 'manual' | 'aabb' | 'hull' | 'trimesh';\n\nexport interface Physics3DPartParams {\n type?: Physics3DType | string\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n finite?: boolean\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n}\n\nexport interface Physics3DParams {\n type?: Physics3DType | string\n mass?: number\n bodyOptions?: {\n friction?: number\n restitution?: number\n linearDamping?: number\n angularDamping?: number\n fixedRotation?: boolean\n [propName: string]: any\n }\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n stopRotation?: boolean\n finite?: boolean\n collider?: Physics3DCollider\n parts?: Physics3DPartParams[]\n}\n\nexport class Physics3D extends Component<Physics3DParams> {\n static componentName: string = 'Physics3D';\n public bodyParams: Physics3DParams;\n public body: CANNON.Body;\n private world: CANNON.World;\n /** Last mesh-collider fingerprint; used to rebuild after model load / scale. */\n public meshColliderKey?: string;\n\n // Readable position/rotation synced from body each frame\n public positionX: number = 0;\n public positionY: number = 0;\n public positionZ: number = 0;\n public rotationX: number = 0;\n public rotationY: number = 0;\n public rotationZ: number = 0;\n\n private _euler: CANNON.Vec3 = new CANNON.Vec3();\n private _worldPos = new Vector3();\n private _worldQuat = new Quaternion();\n private _bodyQuat = new Quaternion();\n private _localEuler = new Euler();\n\n init(params: Physics3DParams) {\n this.bodyParams = params || {};\n }\n\n update() {\n if (this.body && this.gameObject) {\n // Sync position from Cannon body\n this.positionX = this.body.position.x;\n this.positionY = this.body.position.y;\n this.positionZ = this.body.position.z;\n\n // Convert quaternion to Euler and sync rotation\n if (!this.bodyParams.stopRotation) {\n this.body.quaternion.toEuler(this._euler);\n this.rotationX = this._euler.x;\n this.rotationY = this._euler.y;\n this.rotationZ = this._euler.z;\n }\n\n this._worldPoseToLocalIfParented();\n\n // Auto-sync to sibling Transform3D / visual components on the same GameObject\n this._syncToSiblings();\n }\n }\n\n onDestroy() {\n if (this.world && this.body) {\n this.world.removeBody(this.body);\n }\n }\n\n private _worldPoseToLocalIfParented() {\n const renderer = this.game?.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const node = renderer?.threeContext?.object3DFor(this.gameObject.id);\n const scene = renderer?.threeContext?.scene;\n if (!node?.parent || node.parent === scene) return;\n\n node.parent.updateWorldMatrix(true, false);\n this._worldPos.set(this.positionX, this.positionY, this.positionZ);\n node.parent.worldToLocal(this._worldPos);\n this.positionX = this._worldPos.x;\n this.positionY = this._worldPos.y;\n this.positionZ = this._worldPos.z;\n\n if (!this.bodyParams.stopRotation) {\n node.parent.getWorldQuaternion(this._worldQuat).invert();\n this._bodyQuat.set(\n this.body.quaternion.x,\n this.body.quaternion.y,\n this.body.quaternion.z,\n this.body.quaternion.w,\n );\n this._bodyQuat.premultiply(this._worldQuat);\n this._localEuler.setFromQuaternion(this._bodyQuat);\n this.rotationX = this._localEuler.x;\n this.rotationY = this._localEuler.y;\n this.rotationZ = this._localEuler.z;\n }\n }\n\n private _syncToSiblings() {\n const components = this.gameObject.components;\n if (!components) return;\n for (let i = 0; i < components.length; i++) {\n const comp = components[i] as any;\n if (comp === this) continue;\n if ('positionX' in comp && 'positionY' in comp && 'positionZ' in comp) {\n comp.positionX = this.positionX;\n comp.positionY = this.positionY;\n comp.positionZ = this.positionZ;\n }\n if (!this.bodyParams.stopRotation && 'rotationX' in comp && 'rotationY' in comp && 'rotationZ' in comp) {\n comp.rotationX = this.rotationX;\n comp.rotationY = this.rotationY;\n comp.rotationZ = this.rotationZ;\n }\n }\n }\n}\n","import * as CANNON from 'cannon-es';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3DPartParams } from './Physics3D';\n\nexport interface ShapeDims {\n width: number\n height: number\n depth: number\n radius: number\n radiusTop: number\n radiusBottom: number\n segments: number\n tube: number\n finite?: boolean\n}\n\nexport interface PlacedShape {\n shape: CANNON.Shape\n offset?: CANNON.Vec3\n quaternion?: CANNON.Quaternion\n}\n\nexport const TYPE_BY_SHAPE: Record<string, Physics3DType> = {\n box: Physics3DType.BOX,\n sphere: Physics3DType.SPHERE,\n cylinder: Physics3DType.CYLINDER,\n plane: Physics3DType.PLANE,\n cone: Physics3DType.CONE,\n torus: Physics3DType.TORUS,\n capsule: Physics3DType.CAPSULE,\n compound: Physics3DType.COMPOUND,\n};\n\nexport function normalizeType(type?: string): Physics3DType {\n if (!type) return Physics3DType.BOX;\n return TYPE_BY_SHAPE[type] ?? (type as Physics3DType);\n}\n\nexport function torusTube(radius: number, tube?: number): number {\n return tube && tube > 0 ? tube : radius * 0.4;\n}\n\nexport function dimsFromParams(params: Physics3DPartParams, fallback?: Partial<ShapeDims>): ShapeDims {\n const radius = params.radius ?? fallback?.radius ?? 0.5;\n return {\n width: params.width ?? fallback?.width ?? 1,\n height: params.height ?? fallback?.height ?? 1,\n depth: params.depth ?? fallback?.depth ?? 1,\n radius,\n radiusTop: params.radiusTop ?? radius,\n radiusBottom: params.radiusBottom ?? radius,\n segments: Math.max(6, Math.round(params.segments ?? fallback?.segments ?? 12)),\n tube: torusTube(radius, params.tube ?? fallback?.tube),\n finite: params.finite ?? fallback?.finite,\n };\n}\n\nexport function offsetFromPart(part: Physics3DPartParams): CANNON.Vec3 {\n return new CANNON.Vec3(\n part.positionX ?? part.position?.x ?? 0,\n part.positionY ?? part.position?.y ?? 0,\n part.positionZ ?? part.position?.z ?? 0,\n );\n}\n\nexport function quaternionFromPart(part: Physics3DPartParams): CANNON.Quaternion | undefined {\n const x = part.rotationX ?? part.rotation?.x ?? 0;\n const y = part.rotationY ?? part.rotation?.y ?? 0;\n const z = part.rotationZ ?? part.rotation?.z ?? 0;\n if (!x && !y && !z) return undefined;\n const q = new CANNON.Quaternion();\n q.setFromEuler(x, y, z);\n return q;\n}\n\nexport function placedShapesForType(type: Physics3DType | string, dims: ShapeDims): PlacedShape[] {\n const kind = normalizeType(type as string);\n switch (kind) {\n case Physics3DType.SPHERE:\n return [{ shape: new CANNON.Sphere(dims.radius) }];\n case Physics3DType.CYLINDER:\n return [{\n shape: new CANNON.Cylinder(\n dims.radiusTop, dims.radiusBottom, dims.height, dims.segments,\n ),\n }];\n case Physics3DType.CONE:\n return [{\n shape: new CANNON.Cylinder(0.001, dims.radius, dims.height, dims.segments),\n }];\n case Physics3DType.PLANE:\n if (dims.finite) {\n return [{ shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, 0.01)) }];\n }\n return [{ shape: new CANNON.Plane() }];\n case Physics3DType.TORUS:\n return torusShapes(dims);\n case Physics3DType.CAPSULE:\n return capsuleShapes(dims);\n case Physics3DType.BOX:\n default:\n return [{\n shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, dims.depth / 2)),\n }];\n }\n}\n\nfunction torusShapes(dims: ShapeDims): PlacedShape[] {\n const n = Math.max(8, Math.min(12, dims.segments));\n const placed: PlacedShape[] = [];\n for (let i = 0; i < n; i++) {\n const angle = (i / n) * Math.PI * 2;\n placed.push({\n shape: new CANNON.Sphere(dims.tube),\n offset: new CANNON.Vec3(\n Math.cos(angle) * dims.radius,\n 0,\n Math.sin(angle) * dims.radius,\n ),\n });\n }\n return placed;\n}\n\nfunction capsuleShapes(dims: ShapeDims): PlacedShape[] {\n const cyl = Math.max(0, dims.height - 2 * dims.radius);\n const placed: PlacedShape[] = [];\n if (cyl > 0.001) {\n placed.push({\n shape: new CANNON.Cylinder(dims.radius, dims.radius, cyl, dims.segments),\n });\n }\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, cyl / 2, 0),\n });\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, -cyl / 2, 0),\n });\n return placed;\n}\n","import * as CANNON from 'cannon-es';\nimport {\n Box3,\n BufferGeometry,\n Mesh,\n Object3D,\n Vector3,\n} from 'three';\nimport { ConvexGeometry } from 'three/addons/geometries/ConvexGeometry.js';\nimport type { Physics3DCollider } from './Physics3D';\n\nconst _box = new Box3();\nconst _size = new Vector3();\nconst _center = new Vector3();\nconst _vertex = new Vector3();\n\nexport function withIdentityPose<T>(root: Object3D, fn: () => T): T {\n const px = root.position.x;\n const py = root.position.y;\n const pz = root.position.z;\n const rx = root.rotation.x;\n const ry = root.rotation.y;\n const rz = root.rotation.z;\n root.position.set(0, 0, 0);\n root.rotation.set(0, 0, 0);\n root.updateMatrixWorld(true);\n try {\n return fn();\n } finally {\n root.position.set(px, py, pz);\n root.rotation.set(rx, ry, rz);\n root.updateMatrixWorld(true);\n }\n}\n\nexport function addModelCollider(\n body: CANNON.Body,\n root: Object3D,\n collider: Physics3DCollider,\n): boolean {\n return withIdentityPose(root, () => {\n if (collider === 'trimesh') {\n return addTrimesh(body, root);\n }\n if (collider === 'hull') {\n return addHull(body, root);\n }\n return addAabb(body, root);\n });\n}\n\nfunction addAabb(body: CANNON.Body, root: Object3D): boolean {\n _box.setFromObject(root);\n if (_box.isEmpty()) return false;\n _box.getSize(_size);\n _box.getCenter(_center);\n if (_size.x <= 0 && _size.y <= 0 && _size.z <= 0) return false;\n body.addShape(\n new CANNON.Box(new CANNON.Vec3(\n Math.max(_size.x / 2, 0.01),\n Math.max(_size.y / 2, 0.01),\n Math.max(_size.z / 2, 0.01),\n )),\n new CANNON.Vec3(_center.x, _center.y, _center.z),\n );\n return true;\n}\n\nfunction addTrimesh(body: CANNON.Body, root: Object3D): boolean {\n let added = false;\n root.traverse((child) => {\n const mesh = child as Mesh;\n const geometry = mesh.geometry as BufferGeometry | undefined;\n const position = geometry?.attributes?.position;\n if (!position) return;\n const vertices: number[] = [];\n for (let i = 0; i < position.count; i++) {\n _vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld);\n vertices.push(_vertex.x, _vertex.y, _vertex.z);\n }\n const indices: number[] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i < array.length; i++) {\n indices.push(array[i]);\n }\n } else {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n }\n if (indices.length < 3) return;\n body.addShape(new CANNON.Trimesh(vertices, indices));\n added = true;\n });\n return added;\n}\n\nfunction addHull(body: CANNON.Body, root: Object3D): boolean {\n const points: Vector3[] = [];\n root.traverse((child) => {\n const mesh = child as Mesh;\n const position = mesh.geometry?.attributes?.position;\n if (!position) return;\n const stride = position.count > 128 ? Math.ceil(position.count / 128) : 1;\n for (let i = 0; i < position.count; i += stride) {\n points.push(_vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld).clone());\n }\n });\n if (points.length < 4) {\n return addAabb(body, root);\n }\n try {\n const geometry = new ConvexGeometry(points);\n const pos = geometry.attributes.position;\n const vertices: CANNON.Vec3[] = [];\n const indexOf = new Map<string, number>();\n const add = (x: number, y: number, z: number) => {\n const key = `${x.toFixed(5)},${y.toFixed(5)},${z.toFixed(5)}`;\n const existing = indexOf.get(key);\n if (existing != null) return existing;\n const i = vertices.length;\n vertices.push(new CANNON.Vec3(x, y, z));\n indexOf.set(key, i);\n return i;\n };\n const faces: number[][] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i + 2 < array.length; i += 3) {\n faces.push([\n add(pos.getX(array[i]), pos.getY(array[i]), pos.getZ(array[i])),\n add(pos.getX(array[i + 1]), pos.getY(array[i + 1]), pos.getZ(array[i + 1])),\n add(pos.getX(array[i + 2]), pos.getY(array[i + 2]), pos.getZ(array[i + 2])),\n ]);\n }\n } else {\n for (let i = 0; i + 2 < pos.count; i += 3) {\n faces.push([\n add(pos.getX(i), pos.getY(i), pos.getZ(i)),\n add(pos.getX(i + 1), pos.getY(i + 1), pos.getZ(i + 1)),\n add(pos.getX(i + 2), pos.getY(i + 2), pos.getZ(i + 2)),\n ]);\n }\n }\n geometry.dispose();\n if (vertices.length < 4 || faces.length < 4) {\n return addAabb(body, root);\n }\n body.addShape(new CANNON.ConvexPolyhedron({ vertices, faces }));\n return true;\n } catch {\n return addAabb(body, root);\n }\n}\n","import { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DCollider, Physics3DPartParams } from './Physics3D';\nimport { normalizeType } from './createShape';\n\nexport interface Graphics3DLike {\n shape?: string\n width?: number\n height?: number\n depth?: number\n radius?: number\n segments?: number\n tube?: number\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n parts?: Physics3DPartParams[]\n}\n\nexport interface Model3DLike {\n resource?: string\n scaleX?: number\n scaleY?: number\n scaleZ?: number\n}\n\nexport function resolveCollider(\n params: Physics3D['bodyParams'],\n model?: Model3DLike,\n): Physics3DCollider {\n if (params.collider) return params.collider;\n if (params.type || (params.parts && params.parts.length > 0)) return 'manual';\n return model ? 'aabb' : 'manual';\n}\n\nexport function resolveType(\n params: Physics3D['bodyParams'],\n graphics?: Graphics3DLike,\n): Physics3DType {\n if (params.type) return normalizeType(params.type as string);\n if ((params.parts && params.parts.length > 0) || (graphics?.parts && graphics.parts.length > 0)) {\n return Physics3DType.COMPOUND;\n }\n if (graphics?.shape) return normalizeType(graphics.shape);\n return Physics3DType.BOX;\n}\n\nexport function meshColliderFingerprint(\n collider: Physics3DCollider,\n model?: Model3DLike,\n): string | undefined {\n if (!model || collider === 'manual') return undefined;\n return `${collider}:${model.resource}:${model.scaleX}:${model.scaleY}:${model.scaleZ}`;\n}\n","import * as CANNON from 'cannon-es';\nimport type { Object3D } from 'three';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DPartParams } from './Physics3D';\nimport {\n dimsFromParams,\n normalizeType,\n offsetFromPart,\n placedShapesForType,\n quaternionFromPart,\n} from './createShape';\nimport type { ShapeDims } from './createShape';\nimport { addModelCollider } from './modelCollider';\nimport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\n\nexport type { Graphics3DLike, Model3DLike } from './resolve';\nexport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\n\nexport interface BodiesFactoryContext {\n graphics?: Graphics3DLike\n model?: Model3DLike\n modelGroup?: Object3D\n pose?: Graphics3DLike\n}\n\nfunction applyBodyOptions(body: CANNON.Body, options: Record<string, any> | undefined) {\n if (!options) return;\n if (options.friction !== undefined) {\n body.material = new CANNON.Material({\n friction: options.friction,\n restitution: options.restitution ?? 0.3,\n });\n }\n if (options.restitution !== undefined && !body.material) {\n body.material = new CANNON.Material({ friction: 0.3, restitution: options.restitution });\n }\n if (options.linearDamping !== undefined) body.linearDamping = options.linearDamping;\n if (options.angularDamping !== undefined) body.angularDamping = options.angularDamping;\n if (options.fixedRotation !== undefined) body.fixedRotation = options.fixedRotation;\n body.updateMassProperties();\n}\n\nfunction addPlaced(body: CANNON.Body, type: string, dims: ShapeDims, part?: Physics3DPartParams) {\n const placed = placedShapesForType(type, dims);\n const extraOffset = part ? offsetFromPart(part) : new CANNON.Vec3();\n const extraQuat = part ? quaternionFromPart(part) : undefined;\n for (const item of placed) {\n const local = (item.offset ? item.offset.clone() : new CANNON.Vec3());\n if (extraQuat) extraQuat.vmult(local, local);\n const offset = extraOffset.vadd(local);\n const quat = extraQuat && item.quaternion\n ? extraQuat.mult(item.quaternion)\n : (extraQuat || item.quaternion);\n body.addShape(item.shape, offset, quat);\n }\n}\n\nexport default class BodiesFactory {\n public create(component: Physics3D, context: BodiesFactoryContext = {}): CANNON.Body | null {\n const { bodyParams } = component;\n const graphics = context.graphics;\n const model = context.model;\n const collider = resolveCollider(bodyParams, model);\n\n if (collider !== 'manual') {\n if (!context.modelGroup) return null;\n let mass = bodyParams.mass ?? 1;\n if (collider === 'trimesh' && mass !== 0) {\n mass = 0;\n }\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n const ok = addModelCollider(body, context.modelGroup, collider);\n if (!ok) return null;\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = meshColliderFingerprint(collider, model);\n return body;\n }\n\n const type = resolveType(bodyParams, graphics);\n const dims = dimsFromParams(bodyParams, {\n width: graphics?.width,\n height: graphics?.height,\n depth: graphics?.depth,\n radius: graphics?.radius,\n segments: graphics?.segments,\n tube: graphics?.tube,\n finite: bodyParams.finite,\n });\n\n const infinitePlane = type === Physics3DType.PLANE && !dims.finite;\n const mass = infinitePlane ? 0 : (bodyParams.mass ?? 1);\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n\n if (type === Physics3DType.COMPOUND) {\n const parts = bodyParams.parts?.length ? bodyParams.parts : (graphics?.parts || []);\n if (!parts.length) {\n addPlaced(body, Physics3DType.BOX, dims);\n } else {\n for (const part of parts) {\n const partType = part.type || (part as { shape?: string }).shape || Physics3DType.BOX;\n if (normalizeType(partType as string) === Physics3DType.COMPOUND) continue;\n const partDims = dimsFromParams(part, dims);\n addPlaced(body, partType as string, partDims, part);\n }\n }\n } else {\n addPlaced(body, type, dims);\n }\n\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = undefined;\n return body;\n }\n\n private createBodyShell(\n component: Physics3D,\n mass: number,\n graphics?: Graphics3DLike,\n ): CANNON.Body {\n const body = new CANNON.Body({ mass });\n const pos = component.bodyParams.position;\n body.position.set(\n pos?.x ?? graphics?.positionX ?? 0,\n pos?.y ?? graphics?.positionY ?? 0,\n pos?.z ?? graphics?.positionZ ?? 0,\n );\n const rot = component.bodyParams.rotation;\n const rx = rot?.x ?? graphics?.rotationX ?? 0;\n const ry = rot?.y ?? graphics?.rotationY ?? 0;\n const rz = rot?.z ?? graphics?.rotationZ ?? 0;\n if (rx || ry || rz) {\n body.quaternion.setFromEuler(rx, ry, rz);\n }\n return body;\n }\n}\n","import * as CANNON from 'cannon-es';\nimport type { Component, Game, GameObject } from '@combos-fun/engine';\nimport { Euler, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport BodiesFactory from './BodiesFactory';\nimport type { BodiesFactoryContext } from './BodiesFactory';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\nimport { meshColliderFingerprint, resolveCollider } from './resolve';\nimport type { Physics3DSystemParams } from './Physics3DSystem';\nimport type { Physics3D } from './Physics3D';\nimport type { Physics3DConstraint } from './Physics3DConstraint';\n\ninterface PhysicsLinkedBody extends CANNON.Body {\n component?: Physics3D;\n}\n\nexport default class Physics3DEngine {\n private world: CANNON.World;\n private bodiesFactory: BodiesFactory;\n private options: Physics3DSystemParams;\n private game: Game;\n private pending = new Set<Physics3D>();\n private pendingConstraints = new Set<Physics3DConstraint>();\n private constraints = new Set<Physics3DConstraint>();\n private contactPairs = new Map<string, [Physics3D, Physics3D]>();\n public enabled: boolean = false;\n\n constructor(game: Game, options: Physics3DSystemParams) {\n this.game = game;\n this.options = options ?? {};\n this.bodiesFactory = new BodiesFactory();\n }\n\n public start() {\n this.world = new CANNON.World();\n\n const gravity = this.options.gravity ?? { x: 0, y: -9.82, z: 0 };\n this.world.gravity.set(gravity.x, gravity.y, gravity.z);\n\n if (this.options.solver) {\n const solver = this.world.solver as CANNON.GSSolver;\n if (this.options.solver.iterations !== undefined) {\n solver.iterations = this.options.solver.iterations;\n }\n if (this.options.solver.tolerance !== undefined) {\n solver.tolerance = this.options.solver.tolerance;\n }\n }\n\n this.world.broadphase = new CANNON.NaiveBroadphase();\n this.world.allowSleep = this.options.allowSleep ?? false;\n\n this.enabled = true;\n this.initCollisionEvents();\n }\n\n public update(e) {\n if (!this.world || !this.enabled) return;\n this.flushPending();\n this.rebuildStaleMeshColliders();\n const fixedTimeStep = this.options.fixedTimeStep ?? 1 / 60;\n const maxSubSteps = this.options.maxSubSteps ?? 3;\n const dt = (e.deltaTime || 16.67) / 1000;\n this.flushConstraints();\n this.world.step(fixedTimeStep, dt, maxSubSteps);\n this.emitCollisionActive();\n }\n\n public stop() {\n this.enabled = false;\n }\n\n public awake() {\n this.enabled = true;\n }\n\n public destroy() {\n this.pending.clear();\n this.pendingConstraints.clear();\n this.contactPairs.clear();\n if (this.world) {\n for (const constraint of this.constraints) {\n if (constraint.constraint) this.world.removeConstraint(constraint.constraint);\n constraint.constraint = undefined;\n }\n this.constraints.clear();\n while (this.world.bodies.length > 0) {\n this.world.removeBody(this.world.bodies[0]);\n }\n this.world = null;\n }\n }\n\n public add(component: Physics3D) {\n const body = this.tryCreate(component);\n if (!body) {\n this.pending.add(component);\n return;\n }\n this.attach(component, body);\n }\n\n public change(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n this.pending.delete(component);\n this.add(component);\n }\n\n public remove(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n this.pending.delete(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n component.meshColliderKey = undefined;\n }\n\n public addConstraint(component: Physics3DConstraint) {\n this.removeConstraint(component);\n this.pendingConstraints.add(component);\n this.flushConstraints();\n }\n\n public removeConstraint(component: Physics3DConstraint) {\n this.pendingConstraints.delete(component);\n this.constraints.delete(component);\n if (component.constraint && this.world) {\n this.world.removeConstraint(component.constraint);\n }\n component.constraint = undefined;\n }\n\n public flushConstraints() {\n if (!this.world) return;\n for (const component of [...this.pendingConstraints]) {\n if (!component.gameObject) {\n this.pendingConstraints.delete(component);\n continue;\n }\n if (this.tryAttachConstraint(component)) {\n this.pendingConstraints.delete(component);\n }\n }\n }\n\n private tryCreate(component: Physics3D): PhysicsLinkedBody | null {\n const context = this.contextFor(component);\n return this.bodiesFactory.create(component, context) as PhysicsLinkedBody | null;\n }\n\n private attach(component: Physics3D, body: PhysicsLinkedBody) {\n this.world.addBody(body);\n component.body = body;\n (component as any).world = this.world;\n body.component = component;\n }\n\n private contextFor(component: Physics3D): BodiesFactoryContext {\n const gameObject = component.gameObject as GameObject | undefined;\n const graphics = gameObject?.getComponent('Graphics3D') as Graphics3DLike | undefined;\n const model = gameObject?.getComponent('Model3D') as Model3DLike | undefined;\n const transform3d = gameObject?.getComponent('Transform3D') as Graphics3DLike | undefined;\n const renderer = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const modelGroup = gameObject ? renderer?.threeContext?.models.get(gameObject.id) : undefined;\n const node = gameObject ? renderer?.threeContext?.object3DFor(gameObject.id) : undefined;\n const scene = renderer?.threeContext?.scene;\n let worldPose: Graphics3DLike | undefined;\n if (node?.parent && node.parent !== scene) {\n node.updateWorldMatrix(true, false);\n const position = new Vector3();\n const euler = new Euler();\n node.getWorldPosition(position);\n euler.setFromRotationMatrix(node.matrixWorld);\n worldPose = {\n positionX: position.x,\n positionY: position.y,\n positionZ: position.z,\n rotationX: euler.x,\n rotationY: euler.y,\n rotationZ: euler.z,\n };\n }\n return { graphics, model, modelGroup, pose: worldPose || transform3d || graphics };\n }\n\n private flushPending() {\n if (!this.pending.size) return;\n for (const component of [...this.pending]) {\n if (!component.gameObject) {\n this.pending.delete(component);\n continue;\n }\n const body = this.tryCreate(component);\n if (body) {\n this.attach(component, body);\n this.pending.delete(component);\n }\n }\n }\n\n private rebuildStaleMeshColliders() {\n if (!this.world) return;\n const stale: Physics3D[] = [];\n for (const body of this.world.bodies) {\n const component = (body as PhysicsLinkedBody).component;\n if (!component?.gameObject) continue;\n const model = component.gameObject.getComponent('Model3D') as Model3DLike | undefined;\n const collider = resolveCollider(component.bodyParams, model);\n const key = meshColliderFingerprint(collider, model);\n if (!key || key === component.meshColliderKey) continue;\n stale.push(component);\n }\n for (const component of stale) {\n this.change(component);\n }\n }\n\n private initCollisionEvents() {\n this.world.addEventListener('beginContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionStart', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionStart', componentA.gameObject, componentB.gameObject);\n const pair = this.pairKey(bodyA, bodyB);\n this.contactPairs.set(pair, [bodyA.component, bodyB.component]);\n }\n });\n\n this.world.addEventListener('endContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionEnd', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionEnd', componentA.gameObject, componentB.gameObject);\n }\n this.contactPairs.delete(this.pairKey(bodyA, bodyB));\n });\n }\n\n private emitCollisionActive() {\n for (const [componentA, componentB] of this.contactPairs.values()) {\n if (!componentA?.gameObject || !componentB?.gameObject) continue;\n componentA.emit('collisionActive', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionActive', componentA.gameObject, componentB.gameObject);\n }\n }\n\n private pairKey(bodyA: CANNON.Body, bodyB: CANNON.Body) {\n return bodyA.id < bodyB.id ? `${bodyA.id}:${bodyB.id}` : `${bodyB.id}:${bodyA.id}`;\n }\n\n private clearContactsFor(component: Physics3D) {\n for (const [key, pair] of this.contactPairs) {\n if (pair[0] === component || pair[1] === component) {\n this.contactPairs.delete(key);\n }\n }\n }\n\n private tryAttachConstraint(component: Physics3DConstraint): boolean {\n const physicsA = component.gameObject?.getComponent('Physics3D') as Physics3D | undefined;\n const target = this.game.gameObjects.find((go) => go.name === component.target);\n const physicsB = target?.getComponent('Physics3D') as Physics3D | undefined;\n if (!physicsA?.body || !physicsB?.body || physicsA.body === physicsB.body) return false;\n const constraint = this.createConstraint(component, physicsA.body, physicsB.body);\n constraint.collideConnected = component.collideConnected;\n this.world.addConstraint(constraint);\n component.constraint = constraint;\n this.constraints.add(component);\n return true;\n }\n\n private createConstraint(\n component: Physics3DConstraint,\n bodyA: CANNON.Body,\n bodyB: CANNON.Body,\n ): CANNON.Constraint {\n const maxForce = component.maxForce;\n const pivotA = new CANNON.Vec3(component.pivotAX, component.pivotAY, component.pivotAZ);\n const pivotB = new CANNON.Vec3(component.pivotBX, component.pivotBY, component.pivotBZ);\n const axisA = new CANNON.Vec3(component.axisAX, component.axisAY, component.axisAZ);\n const axisB = new CANNON.Vec3(component.axisBX, component.axisBY, component.axisBZ);\n switch (component.type) {\n case 'point':\n return new CANNON.PointToPointConstraint(bodyA, pivotA, bodyB, pivotB, maxForce);\n case 'lock':\n return new CANNON.LockConstraint(bodyA, bodyB, { maxForce });\n case 'distance':\n return new CANNON.DistanceConstraint(bodyA, bodyB, component.distance, maxForce);\n case 'hinge':\n default: {\n const hinge = new CANNON.HingeConstraint(bodyA, bodyB, {\n pivotA,\n pivotB,\n axisA,\n axisB,\n maxForce,\n collideConnected: component.collideConnected,\n });\n if (component.motor) {\n hinge.enableMotor();\n hinge.setMotorSpeed(component.motorSpeed);\n }\n return hinge;\n }\n }\n }\n\n private detachConstraintsFor(physics: Physics3D) {\n for (const constraint of [...this.constraints]) {\n const physicsA = constraint.gameObject?.getComponent('Physics3D');\n const target = this.game.gameObjects.find((go) => go.name === constraint.target);\n const physicsB = target?.getComponent('Physics3D');\n if (physicsA === physics || physicsB === physics) {\n this.removeConstraint(constraint);\n this.pendingConstraints.add(constraint);\n }\n }\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DEngine from './Physics3DEngine';\nimport { Physics3D } from './Physics3D';\n\nexport interface Physics3DSystemParams {\n gravity?: {\n x: number\n y: number\n z: number\n }\n fixedTimeStep?: number\n maxSubSteps?: number\n allowSleep?: boolean\n solver?: {\n iterations?: number\n tolerance?: number\n }\n}\n\n@decorators.componentObserver({\n Physics3D: [{ prop: ['bodyParams'], deep: true }],\n GameObject: ['parent'],\n})\nexport default class Physics3DSystem extends System<Physics3DSystemParams> {\n static systemName = 'Physics3DSystem';\n public engine: Physics3DEngine;\n\n init(param?: Physics3DSystemParams) {\n this.engine = new Physics3DEngine(this.game, param);\n }\n\n awake() { }\n\n start() {\n this.engine.start();\n }\n\n update(e) {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n if (changed) {\n this.componentChanged(changed);\n }\n }\n this.engine.update(e);\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.component instanceof Physics3D) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.parent && !changed.gameObject.getComponent(Physics3D).body) {\n this.engine.add(changed.component);\n }\n break;\n }\n case OBSERVER_TYPE.CHANGE: {\n this.engine.change(changed.component);\n break;\n }\n case OBSERVER_TYPE.REMOVE: {\n this.engine.remove(changed.component);\n break;\n }\n }\n } else {\n // GameObject.parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if (changed.gameObject.parent) {\n let physics = changed.gameObject.getComponent(Physics3D);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics3D);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n\n lateUpdate() { }\n\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n\n onPause() {\n this.engine.stop();\n }\n\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DSystem from './Physics3DSystem';\nimport { Physics3DConstraint } from './Physics3DConstraint';\n\n@decorators.componentObserver({\n Physics3DConstraint: [\n 'type', 'target',\n 'pivotAX', 'pivotAY', 'pivotAZ',\n 'pivotBX', 'pivotBY', 'pivotBZ',\n 'axisAX', 'axisAY', 'axisAZ',\n 'axisBX', 'axisBY', 'axisBZ',\n 'distance', 'maxForce', 'collideConnected',\n 'motor', 'motorSpeed',\n ],\n})\nexport default class Physics3DConstraintSystem extends System {\n static systemName = 'Physics3DConstraintSystem';\n name: string = 'Physics3DConstraintSystem';\n\n init() {\n const physics = this.game.getSystem(Physics3DSystem) as Physics3DSystem;\n if (!physics) {\n console.warn('Physics3DConstraintSystem requires Physics3DSystem');\n }\n }\n\n update() {\n const engine = this.engine();\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n engine?.flushConstraints();\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Physics3DConstraint') return;\n const engine = this.engine();\n if (!engine) return;\n const component = changed.component as Physics3DConstraint;\n if (changed.type === OBSERVER_TYPE.REMOVE) {\n engine.removeConstraint(component);\n return;\n }\n engine.addConstraint(component);\n }\n\n private engine() {\n return (this.game.getSystem(Physics3DSystem) as Physics3DSystem | undefined)?.engine;\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport Physics3DConstraintSystem from './Physics3DConstraintSystem';\nimport Physics3DSystem from './Physics3DSystem';\n\nObject.assign(Physics3DConstraintSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.1\",\n});\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.1\",\n});\n","import { Component } from '@combos-fun/engine';\nimport type { Constraint } from 'cannon-es';\n\nexport type Physics3DConstraintKind = 'hinge' | 'point' | 'lock' | 'distance';\n\nexport interface Physics3DConstraintParams {\n type?: Physics3DConstraintKind | string;\n target?: string;\n pivotAX?: number;\n pivotAY?: number;\n pivotAZ?: number;\n pivotBX?: number;\n pivotBY?: number;\n pivotBZ?: number;\n axisAX?: number;\n axisAY?: number;\n axisAZ?: number;\n axisBX?: number;\n axisBY?: number;\n axisBZ?: number;\n distance?: number;\n maxForce?: number;\n collideConnected?: boolean;\n motor?: boolean;\n motorSpeed?: number;\n}\n\nexport class Physics3DConstraint extends Component<Physics3DConstraintParams> {\n static componentName: string = 'Physics3DConstraint';\n\n type: string = 'hinge';\n target: string = '';\n pivotAX: number = 0;\n pivotAY: number = 0;\n pivotAZ: number = 0;\n pivotBX: number = 0;\n pivotBY: number = 0;\n pivotBZ: number = 0;\n axisAX: number = 0;\n axisAY: number = 1;\n axisAZ: number = 0;\n axisBX: number = 0;\n axisBY: number = 1;\n axisBZ: number = 0;\n distance: number = 1;\n maxForce: number = 1e6;\n collideConnected: boolean = true;\n motor: boolean = false;\n motorSpeed: number = 0;\n constraint?: Constraint;\n\n init(obj?: Physics3DConstraintParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n"],"names":["Physics3DType","Component","CANNON","Vector3","Quaternion","Euler","Renderer3DSystem","Box3","ConvexGeometry","Physics3DSystem","System","OBSERVER_TYPE","__decorate","decorators","Physics3DConstraintSystem","engine"],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";var t=require("tslib"),e=require("@combos-fun/engine"),o=require("cannon-es"),i=require("three"),s=require("@combos-fun/plugin-renderer-3d"),n=require("three/addons/geometries/ConvexGeometry.js");function r(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(o){if("default"!==o){var i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:function(){return t[o]}})}}),e.default=t,Object.freeze(e)}var a,c=r(o);exports.Physics3DType=void 0,(a=exports.Physics3DType||(exports.Physics3DType={})).BOX="box",a.SPHERE="sphere",a.CYLINDER="cylinder",a.PLANE="plane",a.CONE="cone",a.TORUS="torus",a.CAPSULE="capsule",a.COMPOUND="compound";class h extends e.Component{constructor(){super(...arguments),this.positionX=0,this.positionY=0,this.positionZ=0,this.rotationX=0,this.rotationY=0,this.rotationZ=0,this._euler=new c.Vec3,this._worldPos=new i.Vector3,this._worldQuat=new i.Quaternion,this._bodyQuat=new i.Quaternion,this._localEuler=new i.Euler}static{this.componentName="Physics3D"}init(t){this.bodyParams=t||{}}update(){this.body&&this.gameObject&&(this.positionX=this.body.position.x,this.positionY=this.body.position.y,this.positionZ=this.body.position.z,this.bodyParams.stopRotation||(this.body.quaternion.toEuler(this._euler),this.rotationX=this._euler.x,this.rotationY=this._euler.y,this.rotationZ=this._euler.z),this._worldPoseToLocalIfParented(),this._syncToSiblings())}onDestroy(){this.world&&this.body&&this.world.removeBody(this.body)}_worldPoseToLocalIfParented(){const t=this.game?.getSystem(s.Renderer3DSystem),e=t?.threeContext?.object3DFor(this.gameObject.id),o=t?.threeContext?.scene;e?.parent&&e.parent!==o&&(e.parent.updateWorldMatrix(!0,!1),this._worldPos.set(this.positionX,this.positionY,this.positionZ),e.parent.worldToLocal(this._worldPos),this.positionX=this._worldPos.x,this.positionY=this._worldPos.y,this.positionZ=this._worldPos.z,this.bodyParams.stopRotation||(e.parent.getWorldQuaternion(this._worldQuat).invert(),this._bodyQuat.set(this.body.quaternion.x,this.body.quaternion.y,this.body.quaternion.z,this.body.quaternion.w),this._bodyQuat.premultiply(this._worldQuat),this._localEuler.setFromQuaternion(this._bodyQuat),this.rotationX=this._localEuler.x,this.rotationY=this._localEuler.y,this.rotationZ=this._localEuler.z))}_syncToSiblings(){const t=this.gameObject.components;if(t)for(let e=0;e<t.length;e++){const o=t[e];o!==this&&("positionX"in o&&"positionY"in o&&"positionZ"in o&&(o.positionX=this.positionX,o.positionY=this.positionY,o.positionZ=this.positionZ),!this.bodyParams.stopRotation&&"rotationX"in o&&"rotationY"in o&&"rotationZ"in o&&(o.rotationX=this.rotationX,o.rotationY=this.rotationY,o.rotationZ=this.rotationZ))}}}const d={box:exports.Physics3DType.BOX,sphere:exports.Physics3DType.SPHERE,cylinder:exports.Physics3DType.CYLINDER,plane:exports.Physics3DType.PLANE,cone:exports.Physics3DType.CONE,torus:exports.Physics3DType.TORUS,capsule:exports.Physics3DType.CAPSULE,compound:exports.Physics3DType.COMPOUND};function p(t){return t?d[t]??t:exports.Physics3DType.BOX}function l(t,e){return e&&e>0?e:.4*t}function u(t,e){const o=t.radius??e?.radius??.5;return{width:t.width??e?.width??1,height:t.height??e?.height??1,depth:t.depth??e?.depth??1,radius:o,radiusTop:t.radiusTop??o,radiusBottom:t.radiusBottom??o,segments:Math.max(6,Math.round(t.segments??e?.segments??12)),tube:l(o,t.tube??e?.tube),finite:t.finite??e?.finite}}function m(t,e){switch(p(t)){case exports.Physics3DType.SPHERE:return[{shape:new c.Sphere(e.radius)}];case exports.Physics3DType.CYLINDER:return[{shape:new c.Cylinder(e.radiusTop,e.radiusBottom,e.height,e.segments)}];case exports.Physics3DType.CONE:return[{shape:new c.Cylinder(.001,e.radius,e.height,e.segments)}];case exports.Physics3DType.PLANE:return e.finite?[{shape:new c.Box(new c.Vec3(e.width/2,e.height/2,.01))}]:[{shape:new c.Plane}];case exports.Physics3DType.TORUS:return function(t){const e=Math.max(8,Math.min(12,t.segments)),o=[];for(let i=0;i<e;i++){const s=i/e*Math.PI*2;o.push({shape:new c.Sphere(t.tube),offset:new c.Vec3(Math.cos(s)*t.radius,0,Math.sin(s)*t.radius)})}return o}(e);case exports.Physics3DType.CAPSULE:return function(t){const e=Math.max(0,t.height-2*t.radius),o=[];e>.001&&o.push({shape:new c.Cylinder(t.radius,t.radius,e,t.segments)});return o.push({shape:new c.Sphere(t.radius),offset:new c.Vec3(0,e/2,0)}),o.push({shape:new c.Sphere(t.radius),offset:new c.Vec3(0,-e/2,0)}),o}(e);case exports.Physics3DType.BOX:default:return[{shape:new c.Box(new c.Vec3(e.width/2,e.height/2,e.depth/2))}]}}const y=new i.Box3,g=new i.Vector3,f=new i.Vector3,b=new i.Vector3;function x(t,e,o){return function(t,e){const o=t.position.x,i=t.position.y,s=t.position.z,n=t.rotation.x,r=t.rotation.y,a=t.rotation.z;t.position.set(0,0,0),t.rotation.set(0,0,0),t.updateMatrixWorld(!0);try{return e()}finally{t.position.set(o,i,s),t.rotation.set(n,r,a),t.updateMatrixWorld(!0)}}(e,()=>"trimesh"===o?function(t,e){let o=!1;return e.traverse(e=>{const i=e,s=i.geometry,n=s?.attributes?.position;if(!n)return;const r=[];for(let t=0;t<n.count;t++)b.fromBufferAttribute(n,t).applyMatrix4(i.matrixWorld),r.push(b.x,b.y,b.z);const a=[];if(s.index){const t=s.index.array;for(let e=0;e<t.length;e++)a.push(t[e])}else for(let t=0;t<n.count;t++)a.push(t);a.length<3||(t.addShape(new c.Trimesh(r,a)),o=!0)}),o}(t,e):"hull"===o?function(t,e){const o=[];if(e.traverse(t=>{const e=t,i=e.geometry?.attributes?.position;if(!i)return;const s=i.count>128?Math.ceil(i.count/128):1;for(let t=0;t<i.count;t+=s)o.push(b.fromBufferAttribute(i,t).applyMatrix4(e.matrixWorld).clone())}),o.length<4)return w(t,e);try{const i=new n.ConvexGeometry(o),s=i.attributes.position,r=[],a=new Map,h=(t,e,o)=>{const i=`${t.toFixed(5)},${e.toFixed(5)},${o.toFixed(5)}`,s=a.get(i);if(null!=s)return s;const n=r.length;return r.push(new c.Vec3(t,e,o)),a.set(i,n),n},d=[];if(i.index){const t=i.index.array;for(let e=0;e+2<t.length;e+=3)d.push([h(s.getX(t[e]),s.getY(t[e]),s.getZ(t[e])),h(s.getX(t[e+1]),s.getY(t[e+1]),s.getZ(t[e+1])),h(s.getX(t[e+2]),s.getY(t[e+2]),s.getZ(t[e+2]))])}else for(let t=0;t+2<s.count;t+=3)d.push([h(s.getX(t),s.getY(t),s.getZ(t)),h(s.getX(t+1),s.getY(t+1),s.getZ(t+1)),h(s.getX(t+2),s.getY(t+2),s.getZ(t+2))]);return i.dispose(),r.length<4||d.length<4?w(t,e):(t.addShape(new c.ConvexPolyhedron({vertices:r,faces:d})),!0)}catch{return w(t,e)}}(t,e):w(t,e))}function w(t,e){return y.setFromObject(e),!y.isEmpty()&&(y.getSize(g),y.getCenter(f),!(g.x<=0&&g.y<=0&&g.z<=0)&&(t.addShape(new c.Box(new c.Vec3(Math.max(g.x/2,.01),Math.max(g.y/2,.01),Math.max(g.z/2,.01))),new c.Vec3(f.x,f.y,f.z)),!0))}function C(t,e){return t.collider?t.collider:t.type||t.parts&&t.parts.length>0?"manual":e?"aabb":"manual"}function P(t,e){if(e&&"manual"!==t)return`${t}:${e.resource}:${e.scaleX}:${e.scaleY}:${e.scaleZ}`}function v(t,e){e&&(void 0!==e.friction&&(t.material=new c.Material({friction:e.friction,restitution:e.restitution??.3})),void 0===e.restitution||t.material||(t.material=new c.Material({friction:.3,restitution:e.restitution})),void 0!==e.linearDamping&&(t.linearDamping=e.linearDamping),void 0!==e.angularDamping&&(t.angularDamping=e.angularDamping),void 0!==e.fixedRotation&&(t.fixedRotation=e.fixedRotation),t.updateMassProperties())}function O(t,e,o,i){const s=m(e,o),n=i?function(t){return new c.Vec3(t.positionX??t.position?.x??0,t.positionY??t.position?.y??0,t.positionZ??t.position?.z??0)}(i):new c.Vec3,r=i?function(t){const e=t.rotationX??t.rotation?.x??0,o=t.rotationY??t.rotation?.y??0,i=t.rotationZ??t.rotation?.z??0;if(!e&&!o&&!i)return;const s=new c.Quaternion;return s.setFromEuler(e,o,i),s}(i):void 0;for(const e of s){const o=e.offset?e.offset.clone():new c.Vec3;r&&r.vmult(o,o);const i=n.vadd(o),s=r&&e.quaternion?r.mult(e.quaternion):r||e.quaternion;t.addShape(e.shape,i,s)}}class D{create(t,e={}){const{bodyParams:o}=t,i=e.graphics,s=e.model,n=C(o,s);if("manual"!==n){if(!e.modelGroup)return null;let r=o.mass??1;"trimesh"===n&&0!==r&&(r=0);const a=this.createBodyShell(t,r,e.pose||i);return x(a,e.modelGroup,n)?(v(a,o.bodyOptions),t.meshColliderKey=P(n,s),a):null}const r=function(t,e){return t.type?p(t.type):t.parts&&t.parts.length>0||e?.parts&&e.parts.length>0?exports.Physics3DType.COMPOUND:e?.shape?p(e.shape):exports.Physics3DType.BOX}(o,i),a=u(o,{width:i?.width,height:i?.height,depth:i?.depth,radius:i?.radius,segments:i?.segments,tube:i?.tube,finite:o.finite}),c=r===exports.Physics3DType.PLANE&&!a.finite?0:o.mass??1,h=this.createBodyShell(t,c,e.pose||i);if(r===exports.Physics3DType.COMPOUND){const t=o.parts?.length?o.parts:i?.parts||[];if(t.length)for(const e of t){const t=e.type||e.shape||exports.Physics3DType.BOX;if(p(t)===exports.Physics3DType.COMPOUND)continue;O(h,t,u(e,a),e)}else O(h,exports.Physics3DType.BOX,a)}else O(h,r,a);return v(h,o.bodyOptions),t.meshColliderKey=void 0,h}createBodyShell(t,e,o){const i=new c.Body({mass:e}),s=t.bodyParams.position;i.position.set(s?.x??o?.positionX??0,s?.y??o?.positionY??0,s?.z??o?.positionZ??0);const n=t.bodyParams.rotation,r=n?.x??o?.rotationX??0,a=n?.y??o?.rotationY??0,h=n?.z??o?.rotationZ??0;return(r||a||h)&&i.quaternion.setFromEuler(r,a,h),i}}class S{constructor(t,e){this.pending=new Set,this.pendingConstraints=new Set,this.constraints=new Set,this.contactPairs=new Map,this.enabled=!1,this.game=t,this.options=e??{},this.bodiesFactory=new D}start(){this.world=new c.World;const t=this.options.gravity??{x:0,y:-9.82,z:0};if(this.world.gravity.set(t.x,t.y,t.z),this.options.solver){const t=this.world.solver;void 0!==this.options.solver.iterations&&(t.iterations=this.options.solver.iterations),void 0!==this.options.solver.tolerance&&(t.tolerance=this.options.solver.tolerance)}this.world.broadphase=new c.NaiveBroadphase,this.world.allowSleep=this.options.allowSleep??!1,this.enabled=!0,this.initCollisionEvents()}update(t){if(!this.world||!this.enabled)return;this.flushPending(),this.rebuildStaleMeshColliders();const e=this.options.fixedTimeStep??1/60,o=this.options.maxSubSteps??3,i=(t.deltaTime||16.67)/1e3;this.flushConstraints(),this.world.step(e,i,o),this.emitCollisionActive()}stop(){this.enabled=!1}awake(){this.enabled=!0}destroy(){if(this.pending.clear(),this.pendingConstraints.clear(),this.contactPairs.clear(),this.world){for(const t of this.constraints)t.constraint&&this.world.removeConstraint(t.constraint),t.constraint=void 0;for(this.constraints.clear();this.world.bodies.length>0;)this.world.removeBody(this.world.bodies[0]);this.world=null}}add(t){const e=this.tryCreate(t);e?this.attach(t,e):this.pending.add(t)}change(t){this.detachConstraintsFor(t),this.clearContactsFor(t),t.body&&(this.world.removeBody(t.body),t.body=void 0),this.pending.delete(t),this.add(t)}remove(t){this.detachConstraintsFor(t),this.clearContactsFor(t),this.pending.delete(t),t.body&&(this.world.removeBody(t.body),t.body=void 0),t.meshColliderKey=void 0}addConstraint(t){this.removeConstraint(t),this.pendingConstraints.add(t),this.flushConstraints()}removeConstraint(t){this.pendingConstraints.delete(t),this.constraints.delete(t),t.constraint&&this.world&&this.world.removeConstraint(t.constraint),t.constraint=void 0}flushConstraints(){if(this.world)for(const t of[...this.pendingConstraints])t.gameObject?this.tryAttachConstraint(t)&&this.pendingConstraints.delete(t):this.pendingConstraints.delete(t)}tryCreate(t){const e=this.contextFor(t);return this.bodiesFactory.create(t,e)}attach(t,e){this.world.addBody(e),t.body=e,t.world=this.world,e.component=t}contextFor(t){const e=t.gameObject,o=e?.getComponent("Graphics3D"),n=e?.getComponent("Model3D"),r=e?.getComponent("Transform3D"),a=this.game.getSystem(s.Renderer3DSystem),c=e?a?.threeContext?.models.get(e.id):void 0,h=e?a?.threeContext?.object3DFor(e.id):void 0,d=a?.threeContext?.scene;let p;if(h?.parent&&h.parent!==d){h.updateWorldMatrix(!0,!1);const t=new i.Vector3,e=new i.Euler;h.getWorldPosition(t),e.setFromRotationMatrix(h.matrixWorld),p={positionX:t.x,positionY:t.y,positionZ:t.z,rotationX:e.x,rotationY:e.y,rotationZ:e.z}}return{graphics:o,model:n,modelGroup:c,pose:p||r||o}}flushPending(){if(this.pending.size)for(const t of[...this.pending]){if(!t.gameObject){this.pending.delete(t);continue}const e=this.tryCreate(t);e&&(this.attach(t,e),this.pending.delete(t))}}rebuildStaleMeshColliders(){if(!this.world)return;const t=[];for(const e of this.world.bodies){const o=e.component;if(!o?.gameObject)continue;const i=o.gameObject.getComponent("Model3D"),s=P(C(o.bodyParams,i),i);s&&s!==o.meshColliderKey&&t.push(o)}for(const e of t)this.change(e)}initCollisionEvents(){this.world.addEventListener("beginContact",t=>{const e=t.bodyA,o=t.bodyB,i=e.component,s=o.component;if(i&&s){i.emit("collisionStart",s.gameObject,i.gameObject),s.emit("collisionStart",i.gameObject,s.gameObject);const t=this.pairKey(e,o);this.contactPairs.set(t,[e.component,o.component])}}),this.world.addEventListener("endContact",t=>{const e=t.bodyA,o=t.bodyB,i=e.component,s=o.component;i&&s&&(i.emit("collisionEnd",s.gameObject,i.gameObject),s.emit("collisionEnd",i.gameObject,s.gameObject)),this.contactPairs.delete(this.pairKey(e,o))})}emitCollisionActive(){for(const[t,e]of this.contactPairs.values())t?.gameObject&&e?.gameObject&&(t.emit("collisionActive",e.gameObject,t.gameObject),e.emit("collisionActive",t.gameObject,e.gameObject))}pairKey(t,e){return t.id<e.id?`${t.id}:${e.id}`:`${e.id}:${t.id}`}clearContactsFor(t){for(const[e,o]of this.contactPairs)o[0]!==t&&o[1]!==t||this.contactPairs.delete(e)}tryAttachConstraint(t){const e=t.gameObject?.getComponent("Physics3D"),o=this.game.gameObjects.find(e=>e.name===t.target),i=o?.getComponent("Physics3D");if(!e?.body||!i?.body||e.body===i.body)return!1;const s=this.createConstraint(t,e.body,i.body);return s.collideConnected=t.collideConnected,this.world.addConstraint(s),t.constraint=s,this.constraints.add(t),!0}createConstraint(t,e,o){const i=t.maxForce,s=new c.Vec3(t.pivotAX,t.pivotAY,t.pivotAZ),n=new c.Vec3(t.pivotBX,t.pivotBY,t.pivotBZ),r=new c.Vec3(t.axisAX,t.axisAY,t.axisAZ),a=new c.Vec3(t.axisBX,t.axisBY,t.axisBZ);switch(t.type){case"point":return new c.PointToPointConstraint(e,s,o,n,i);case"lock":return new c.LockConstraint(e,o,{maxForce:i});case"distance":return new c.DistanceConstraint(e,o,t.distance,i);default:{const h=new c.HingeConstraint(e,o,{pivotA:s,pivotB:n,axisA:r,axisB:a,maxForce:i,collideConnected:t.collideConnected});return t.motor&&(h.enableMotor(),h.setMotorSpeed(t.motorSpeed)),h}}}detachConstraintsFor(t){for(const e of[...this.constraints]){const o=e.gameObject?.getComponent("Physics3D"),i=this.game.gameObjects.find(t=>t.name===e.target),s=i?.getComponent("Physics3D");o!==t&&s!==t||(this.removeConstraint(e),this.pendingConstraints.add(e))}}}let E=class extends e.System{static{this.systemName="Physics3DSystem"}init(t){this.engine=new S(this.game,t)}awake(){}start(){this.engine.start()}update(t){const e=this.componentObserver.clear();for(const t of e)t&&this.componentChanged(t);this.engine.update(t)}componentChanged(t){if(t.component instanceof h)switch(t.type){case e.OBSERVER_TYPE.ADD:t.gameObject.parent&&!t.gameObject.getComponent(h).body&&this.engine.add(t.component);break;case e.OBSERVER_TYPE.CHANGE:this.engine.change(t.component);break;case e.OBSERVER_TYPE.REMOVE:this.engine.remove(t.component)}else if(t.type===e.OBSERVER_TYPE.CHANGE)if(t.gameObject.parent){let e=t.gameObject.getComponent(h);e&&!e.body&&this.engine.add(e)}else{let e=t.gameObject.getComponent(h);e&&this.engine.remove(e)}}lateUpdate(){}onResume(){this.engine.enabled||this.engine.awake()}onPause(){this.engine.stop()}onDestroy(){this.engine?.destroy()}};E=t.__decorate([e.decorators.componentObserver({Physics3D:[{prop:["bodyParams"],deep:!0}],GameObject:["parent"]})],E);var B=E;let T=class extends e.System{constructor(){super(...arguments),this.name="Physics3DConstraintSystem"}static{this.systemName="Physics3DConstraintSystem"}init(){this.game.getSystem(B)||console.warn("Physics3DConstraintSystem requires Physics3DSystem")}update(){const t=this.engine(),e=this.componentObserver.clear();for(const t of e)this.componentChanged(t);t?.flushConstraints()}componentChanged(t){if("Physics3DConstraint"!==t.componentName)return;const o=this.engine();if(!o)return;const i=t.component;t.type!==e.OBSERVER_TYPE.REMOVE?o.addConstraint(i):o.removeConstraint(i)}engine(){return this.game.getSystem(B)?.engine}};T=t.__decorate([e.decorators.componentObserver({Physics3DConstraint:["type","target","pivotAX","pivotAY","pivotAZ","pivotBX","pivotBY","pivotBZ","axisAX","axisAY","axisAZ","axisBX","axisBY","axisBZ","distance","maxForce","collideConnected","motor","motorSpeed"]})],T);var Y=T;Object.assign(Y,{packageName:"@combos-fun/plugin-cannon",packageVersion:"0.1.0"}),Object.assign(B,{packageName:"@combos-fun/plugin-cannon",packageVersion:"0.1.0"});class X extends e.Component{constructor(){super(...arguments),this.type="hinge",this.target="",this.pivotAX=0,this.pivotAY=0,this.pivotAZ=0,this.pivotBX=0,this.pivotBY=0,this.pivotBZ=0,this.axisAX=0,this.axisAY=1,this.axisAZ=0,this.axisBX=0,this.axisBY=1,this.axisBZ=0,this.distance=1,this.maxForce=1e6,this.collideConnected=!0,this.motor=!1,this.motorSpeed=0}static{this.componentName="Physics3DConstraint"}init(t){t&&Object.assign(this,t)}}exports.Physics3D=h,exports.Physics3DConstraint=X,exports.Physics3DConstraintSystem=Y,exports.Physics3DSystem=B;
1
+ "use strict";var t=require("tslib"),e=require("@combos-fun/engine"),o=require("cannon-es"),i=require("three"),s=require("@combos-fun/plugin-renderer-3d"),n=require("three/addons/geometries/ConvexGeometry.js");function r(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(o){if("default"!==o){var i=Object.getOwnPropertyDescriptor(t,o);Object.defineProperty(e,o,i.get?i:{enumerable:!0,get:function(){return t[o]}})}}),e.default=t,Object.freeze(e)}var a,c=r(o);exports.Physics3DType=void 0,(a=exports.Physics3DType||(exports.Physics3DType={})).BOX="box",a.SPHERE="sphere",a.CYLINDER="cylinder",a.PLANE="plane",a.CONE="cone",a.TORUS="torus",a.CAPSULE="capsule",a.COMPOUND="compound";class h extends e.Component{constructor(){super(...arguments),this.positionX=0,this.positionY=0,this.positionZ=0,this.rotationX=0,this.rotationY=0,this.rotationZ=0,this._euler=new c.Vec3,this._worldPos=new i.Vector3,this._worldQuat=new i.Quaternion,this._bodyQuat=new i.Quaternion,this._localEuler=new i.Euler}static{this.componentName="Physics3D"}init(t){this.bodyParams=t||{}}update(){this.body&&this.gameObject&&(this.positionX=this.body.position.x,this.positionY=this.body.position.y,this.positionZ=this.body.position.z,this.bodyParams.stopRotation||(this.body.quaternion.toEuler(this._euler),this.rotationX=this._euler.x,this.rotationY=this._euler.y,this.rotationZ=this._euler.z),this._worldPoseToLocalIfParented(),this._syncToSiblings())}onDestroy(){this.world&&this.body&&this.world.removeBody(this.body)}_worldPoseToLocalIfParented(){const t=this.game?.getSystem(s.Renderer3DSystem),e=t?.threeContext?.object3DFor(this.gameObject.id),o=t?.threeContext?.scene;e?.parent&&e.parent!==o&&(e.parent.updateWorldMatrix(!0,!1),this._worldPos.set(this.positionX,this.positionY,this.positionZ),e.parent.worldToLocal(this._worldPos),this.positionX=this._worldPos.x,this.positionY=this._worldPos.y,this.positionZ=this._worldPos.z,this.bodyParams.stopRotation||(e.parent.getWorldQuaternion(this._worldQuat).invert(),this._bodyQuat.set(this.body.quaternion.x,this.body.quaternion.y,this.body.quaternion.z,this.body.quaternion.w),this._bodyQuat.premultiply(this._worldQuat),this._localEuler.setFromQuaternion(this._bodyQuat),this.rotationX=this._localEuler.x,this.rotationY=this._localEuler.y,this.rotationZ=this._localEuler.z))}_syncToSiblings(){const t=this.gameObject.components;if(t)for(let e=0;e<t.length;e++){const o=t[e];o!==this&&("positionX"in o&&"positionY"in o&&"positionZ"in o&&(o.positionX=this.positionX,o.positionY=this.positionY,o.positionZ=this.positionZ),!this.bodyParams.stopRotation&&"rotationX"in o&&"rotationY"in o&&"rotationZ"in o&&(o.rotationX=this.rotationX,o.rotationY=this.rotationY,o.rotationZ=this.rotationZ))}}}const d={box:exports.Physics3DType.BOX,sphere:exports.Physics3DType.SPHERE,cylinder:exports.Physics3DType.CYLINDER,plane:exports.Physics3DType.PLANE,cone:exports.Physics3DType.CONE,torus:exports.Physics3DType.TORUS,capsule:exports.Physics3DType.CAPSULE,compound:exports.Physics3DType.COMPOUND};function p(t){return t?d[t]??t:exports.Physics3DType.BOX}function l(t,e){return e&&e>0?e:.4*t}function u(t,e){const o=t.radius??e?.radius??.5;return{width:t.width??e?.width??1,height:t.height??e?.height??1,depth:t.depth??e?.depth??1,radius:o,radiusTop:t.radiusTop??o,radiusBottom:t.radiusBottom??o,segments:Math.max(6,Math.round(t.segments??e?.segments??12)),tube:l(o,t.tube??e?.tube),finite:t.finite??e?.finite}}function m(t,e){switch(p(t)){case exports.Physics3DType.SPHERE:return[{shape:new c.Sphere(e.radius)}];case exports.Physics3DType.CYLINDER:return[{shape:new c.Cylinder(e.radiusTop,e.radiusBottom,e.height,e.segments)}];case exports.Physics3DType.CONE:return[{shape:new c.Cylinder(.001,e.radius,e.height,e.segments)}];case exports.Physics3DType.PLANE:return e.finite?[{shape:new c.Box(new c.Vec3(e.width/2,e.height/2,.01))}]:[{shape:new c.Plane}];case exports.Physics3DType.TORUS:return function(t){const e=Math.max(8,Math.min(12,t.segments)),o=[];for(let i=0;i<e;i++){const s=i/e*Math.PI*2;o.push({shape:new c.Sphere(t.tube),offset:new c.Vec3(Math.cos(s)*t.radius,0,Math.sin(s)*t.radius)})}return o}(e);case exports.Physics3DType.CAPSULE:return function(t){const e=Math.max(0,t.height-2*t.radius),o=[];e>.001&&o.push({shape:new c.Cylinder(t.radius,t.radius,e,t.segments)});return o.push({shape:new c.Sphere(t.radius),offset:new c.Vec3(0,e/2,0)}),o.push({shape:new c.Sphere(t.radius),offset:new c.Vec3(0,-e/2,0)}),o}(e);case exports.Physics3DType.BOX:default:return[{shape:new c.Box(new c.Vec3(e.width/2,e.height/2,e.depth/2))}]}}const y=new i.Box3,g=new i.Vector3,f=new i.Vector3,b=new i.Vector3;function x(t,e,o){return function(t,e){const o=t.position.x,i=t.position.y,s=t.position.z,n=t.rotation.x,r=t.rotation.y,a=t.rotation.z;t.position.set(0,0,0),t.rotation.set(0,0,0),t.updateMatrixWorld(!0);try{return e()}finally{t.position.set(o,i,s),t.rotation.set(n,r,a),t.updateMatrixWorld(!0)}}(e,()=>"trimesh"===o?function(t,e){let o=!1;return e.traverse(e=>{const i=e,s=i.geometry,n=s?.attributes?.position;if(!n)return;const r=[];for(let t=0;t<n.count;t++)b.fromBufferAttribute(n,t).applyMatrix4(i.matrixWorld),r.push(b.x,b.y,b.z);const a=[];if(s.index){const t=s.index.array;for(let e=0;e<t.length;e++)a.push(t[e])}else for(let t=0;t<n.count;t++)a.push(t);a.length<3||(t.addShape(new c.Trimesh(r,a)),o=!0)}),o}(t,e):"hull"===o?function(t,e){const o=[];if(e.traverse(t=>{const e=t,i=e.geometry?.attributes?.position;if(!i)return;const s=i.count>128?Math.ceil(i.count/128):1;for(let t=0;t<i.count;t+=s)o.push(b.fromBufferAttribute(i,t).applyMatrix4(e.matrixWorld).clone())}),o.length<4)return w(t,e);try{const i=new n.ConvexGeometry(o),s=i.attributes.position,r=[],a=new Map,h=(t,e,o)=>{const i=`${t.toFixed(5)},${e.toFixed(5)},${o.toFixed(5)}`,s=a.get(i);if(null!=s)return s;const n=r.length;return r.push(new c.Vec3(t,e,o)),a.set(i,n),n},d=[];if(i.index){const t=i.index.array;for(let e=0;e+2<t.length;e+=3)d.push([h(s.getX(t[e]),s.getY(t[e]),s.getZ(t[e])),h(s.getX(t[e+1]),s.getY(t[e+1]),s.getZ(t[e+1])),h(s.getX(t[e+2]),s.getY(t[e+2]),s.getZ(t[e+2]))])}else for(let t=0;t+2<s.count;t+=3)d.push([h(s.getX(t),s.getY(t),s.getZ(t)),h(s.getX(t+1),s.getY(t+1),s.getZ(t+1)),h(s.getX(t+2),s.getY(t+2),s.getZ(t+2))]);return i.dispose(),r.length<4||d.length<4?w(t,e):(t.addShape(new c.ConvexPolyhedron({vertices:r,faces:d})),!0)}catch{return w(t,e)}}(t,e):w(t,e))}function w(t,e){return y.setFromObject(e),!y.isEmpty()&&(y.getSize(g),y.getCenter(f),!(g.x<=0&&g.y<=0&&g.z<=0)&&(t.addShape(new c.Box(new c.Vec3(Math.max(g.x/2,.01),Math.max(g.y/2,.01),Math.max(g.z/2,.01))),new c.Vec3(f.x,f.y,f.z)),!0))}function C(t,e){return t.collider?t.collider:t.type||t.parts&&t.parts.length>0?"manual":e?"aabb":"manual"}function P(t,e){if(e&&"manual"!==t)return`${t}:${e.resource}:${e.scaleX}:${e.scaleY}:${e.scaleZ}`}function v(t,e){e&&(void 0!==e.friction&&(t.material=new c.Material({friction:e.friction,restitution:e.restitution??.3})),void 0===e.restitution||t.material||(t.material=new c.Material({friction:.3,restitution:e.restitution})),void 0!==e.linearDamping&&(t.linearDamping=e.linearDamping),void 0!==e.angularDamping&&(t.angularDamping=e.angularDamping),void 0!==e.fixedRotation&&(t.fixedRotation=e.fixedRotation),t.updateMassProperties())}function O(t,e,o,i){const s=m(e,o),n=i?function(t){return new c.Vec3(t.positionX??t.position?.x??0,t.positionY??t.position?.y??0,t.positionZ??t.position?.z??0)}(i):new c.Vec3,r=i?function(t){const e=t.rotationX??t.rotation?.x??0,o=t.rotationY??t.rotation?.y??0,i=t.rotationZ??t.rotation?.z??0;if(!e&&!o&&!i)return;const s=new c.Quaternion;return s.setFromEuler(e,o,i),s}(i):void 0;for(const e of s){const o=e.offset?e.offset.clone():new c.Vec3;r&&r.vmult(o,o);const i=n.vadd(o),s=r&&e.quaternion?r.mult(e.quaternion):r||e.quaternion;t.addShape(e.shape,i,s)}}class D{create(t,e={}){const{bodyParams:o}=t,i=e.graphics,s=e.model,n=C(o,s);if("manual"!==n){if(!e.modelGroup)return null;let r=o.mass??1;"trimesh"===n&&0!==r&&(r=0);const a=this.createBodyShell(t,r,e.pose||i);return x(a,e.modelGroup,n)?(v(a,o.bodyOptions),t.meshColliderKey=P(n,s),a):null}const r=function(t,e){return t.type?p(t.type):t.parts&&t.parts.length>0||e?.parts&&e.parts.length>0?exports.Physics3DType.COMPOUND:e?.shape?p(e.shape):exports.Physics3DType.BOX}(o,i),a=u(o,{width:i?.width,height:i?.height,depth:i?.depth,radius:i?.radius,segments:i?.segments,tube:i?.tube,finite:o.finite}),c=r===exports.Physics3DType.PLANE&&!a.finite?0:o.mass??1,h=this.createBodyShell(t,c,e.pose||i);if(r===exports.Physics3DType.COMPOUND){const t=o.parts?.length?o.parts:i?.parts||[];if(t.length)for(const e of t){const t=e.type||e.shape||exports.Physics3DType.BOX;if(p(t)===exports.Physics3DType.COMPOUND)continue;O(h,t,u(e,a),e)}else O(h,exports.Physics3DType.BOX,a)}else O(h,r,a);return v(h,o.bodyOptions),t.meshColliderKey=void 0,h}createBodyShell(t,e,o){const i=new c.Body({mass:e}),s=t.bodyParams.position;i.position.set(s?.x??o?.positionX??0,s?.y??o?.positionY??0,s?.z??o?.positionZ??0);const n=t.bodyParams.rotation,r=n?.x??o?.rotationX??0,a=n?.y??o?.rotationY??0,h=n?.z??o?.rotationZ??0;return(r||a||h)&&i.quaternion.setFromEuler(r,a,h),i}}class S{constructor(t,e){this.pending=new Set,this.pendingConstraints=new Set,this.constraints=new Set,this.contactPairs=new Map,this.enabled=!1,this.game=t,this.options=e??{},this.bodiesFactory=new D}start(){this.world=new c.World;const t=this.options.gravity??{x:0,y:-9.82,z:0};if(this.world.gravity.set(t.x,t.y,t.z),this.options.solver){const t=this.world.solver;void 0!==this.options.solver.iterations&&(t.iterations=this.options.solver.iterations),void 0!==this.options.solver.tolerance&&(t.tolerance=this.options.solver.tolerance)}this.world.broadphase=new c.NaiveBroadphase,this.world.allowSleep=this.options.allowSleep??!1,this.enabled=!0,this.initCollisionEvents()}update(t){if(!this.world||!this.enabled)return;this.flushPending(),this.rebuildStaleMeshColliders();const e=this.options.fixedTimeStep??1/60,o=this.options.maxSubSteps??3,i=(t.deltaTime||16.67)/1e3;this.flushConstraints(),this.world.step(e,i,o),this.emitCollisionActive()}stop(){this.enabled=!1}awake(){this.enabled=!0}destroy(){if(this.pending.clear(),this.pendingConstraints.clear(),this.contactPairs.clear(),this.world){for(const t of this.constraints)t.constraint&&this.world.removeConstraint(t.constraint),t.constraint=void 0;for(this.constraints.clear();this.world.bodies.length>0;)this.world.removeBody(this.world.bodies[0]);this.world=null}}add(t){const e=this.tryCreate(t);e?this.attach(t,e):this.pending.add(t)}change(t){this.detachConstraintsFor(t),this.clearContactsFor(t),t.body&&(this.world.removeBody(t.body),t.body=void 0),this.pending.delete(t),this.add(t)}remove(t){this.detachConstraintsFor(t),this.clearContactsFor(t),this.pending.delete(t),t.body&&(this.world.removeBody(t.body),t.body=void 0),t.meshColliderKey=void 0}addConstraint(t){this.removeConstraint(t),this.pendingConstraints.add(t),this.flushConstraints()}removeConstraint(t){this.pendingConstraints.delete(t),this.constraints.delete(t),t.constraint&&this.world&&this.world.removeConstraint(t.constraint),t.constraint=void 0}flushConstraints(){if(this.world)for(const t of[...this.pendingConstraints])t.gameObject?this.tryAttachConstraint(t)&&this.pendingConstraints.delete(t):this.pendingConstraints.delete(t)}tryCreate(t){const e=this.contextFor(t);return this.bodiesFactory.create(t,e)}attach(t,e){this.world.addBody(e),t.body=e,t.world=this.world,e.component=t}contextFor(t){const e=t.gameObject,o=e?.getComponent("Graphics3D"),n=e?.getComponent("Model3D"),r=e?.getComponent("Transform3D"),a=this.game.getSystem(s.Renderer3DSystem),c=e?a?.threeContext?.models.get(e.id):void 0,h=e?a?.threeContext?.object3DFor(e.id):void 0,d=a?.threeContext?.scene;let p;if(h?.parent&&h.parent!==d){h.updateWorldMatrix(!0,!1);const t=new i.Vector3,e=new i.Euler;h.getWorldPosition(t),e.setFromRotationMatrix(h.matrixWorld),p={positionX:t.x,positionY:t.y,positionZ:t.z,rotationX:e.x,rotationY:e.y,rotationZ:e.z}}return{graphics:o,model:n,modelGroup:c,pose:p||r||o}}flushPending(){if(this.pending.size)for(const t of[...this.pending]){if(!t.gameObject){this.pending.delete(t);continue}const e=this.tryCreate(t);e&&(this.attach(t,e),this.pending.delete(t))}}rebuildStaleMeshColliders(){if(!this.world)return;const t=[];for(const e of this.world.bodies){const o=e.component;if(!o?.gameObject)continue;const i=o.gameObject.getComponent("Model3D"),s=P(C(o.bodyParams,i),i);s&&s!==o.meshColliderKey&&t.push(o)}for(const e of t)this.change(e)}initCollisionEvents(){this.world.addEventListener("beginContact",t=>{const e=t.bodyA,o=t.bodyB,i=e.component,s=o.component;if(i&&s){i.emit("collisionStart",s.gameObject,i.gameObject),s.emit("collisionStart",i.gameObject,s.gameObject);const t=this.pairKey(e,o);this.contactPairs.set(t,[e.component,o.component])}}),this.world.addEventListener("endContact",t=>{const e=t.bodyA,o=t.bodyB,i=e.component,s=o.component;i&&s&&(i.emit("collisionEnd",s.gameObject,i.gameObject),s.emit("collisionEnd",i.gameObject,s.gameObject)),this.contactPairs.delete(this.pairKey(e,o))})}emitCollisionActive(){for(const[t,e]of this.contactPairs.values())t?.gameObject&&e?.gameObject&&(t.emit("collisionActive",e.gameObject,t.gameObject),e.emit("collisionActive",t.gameObject,e.gameObject))}pairKey(t,e){return t.id<e.id?`${t.id}:${e.id}`:`${e.id}:${t.id}`}clearContactsFor(t){for(const[e,o]of this.contactPairs)o[0]!==t&&o[1]!==t||this.contactPairs.delete(e)}tryAttachConstraint(t){const e=t.gameObject?.getComponent("Physics3D"),o=this.game.gameObjects.find(e=>e.name===t.target),i=o?.getComponent("Physics3D");if(!e?.body||!i?.body||e.body===i.body)return!1;const s=this.createConstraint(t,e.body,i.body);return s.collideConnected=t.collideConnected,this.world.addConstraint(s),t.constraint=s,this.constraints.add(t),!0}createConstraint(t,e,o){const i=t.maxForce,s=new c.Vec3(t.pivotAX,t.pivotAY,t.pivotAZ),n=new c.Vec3(t.pivotBX,t.pivotBY,t.pivotBZ),r=new c.Vec3(t.axisAX,t.axisAY,t.axisAZ),a=new c.Vec3(t.axisBX,t.axisBY,t.axisBZ);switch(t.type){case"point":return new c.PointToPointConstraint(e,s,o,n,i);case"lock":return new c.LockConstraint(e,o,{maxForce:i});case"distance":return new c.DistanceConstraint(e,o,t.distance,i);default:{const h=new c.HingeConstraint(e,o,{pivotA:s,pivotB:n,axisA:r,axisB:a,maxForce:i,collideConnected:t.collideConnected});return t.motor&&(h.enableMotor(),h.setMotorSpeed(t.motorSpeed)),h}}}detachConstraintsFor(t){for(const e of[...this.constraints]){const o=e.gameObject?.getComponent("Physics3D"),i=this.game.gameObjects.find(t=>t.name===e.target),s=i?.getComponent("Physics3D");o!==t&&s!==t||(this.removeConstraint(e),this.pendingConstraints.add(e))}}}let E=class extends e.System{static{this.systemName="Physics3DSystem"}init(t){this.engine=new S(this.game,t)}awake(){}start(){this.engine.start()}update(t){const e=this.componentObserver.clear();for(const t of e)t&&this.componentChanged(t);this.engine.update(t)}componentChanged(t){if(t.component instanceof h)switch(t.type){case e.OBSERVER_TYPE.ADD:t.gameObject.parent&&!t.gameObject.getComponent(h).body&&this.engine.add(t.component);break;case e.OBSERVER_TYPE.CHANGE:this.engine.change(t.component);break;case e.OBSERVER_TYPE.REMOVE:this.engine.remove(t.component)}else if(t.type===e.OBSERVER_TYPE.CHANGE)if(t.gameObject.parent){let e=t.gameObject.getComponent(h);e&&!e.body&&this.engine.add(e)}else{let e=t.gameObject.getComponent(h);e&&this.engine.remove(e)}}lateUpdate(){}onResume(){this.engine.enabled||this.engine.awake()}onPause(){this.engine.stop()}onDestroy(){this.engine?.destroy()}};E=t.__decorate([e.decorators.componentObserver({Physics3D:[{prop:["bodyParams"],deep:!0}],GameObject:["parent"]})],E);var B=E;let T=class extends e.System{constructor(){super(...arguments),this.name="Physics3DConstraintSystem"}static{this.systemName="Physics3DConstraintSystem"}init(){this.game.getSystem(B)||console.warn("Physics3DConstraintSystem requires Physics3DSystem")}update(){const t=this.engine(),e=this.componentObserver.clear();for(const t of e)this.componentChanged(t);t?.flushConstraints()}componentChanged(t){if("Physics3DConstraint"!==t.componentName)return;const o=this.engine();if(!o)return;const i=t.component;t.type!==e.OBSERVER_TYPE.REMOVE?o.addConstraint(i):o.removeConstraint(i)}engine(){return this.game.getSystem(B)?.engine}};T=t.__decorate([e.decorators.componentObserver({Physics3DConstraint:["type","target","pivotAX","pivotAY","pivotAZ","pivotBX","pivotBY","pivotBZ","axisAX","axisAY","axisAZ","axisBX","axisBY","axisBZ","distance","maxForce","collideConnected","motor","motorSpeed"]})],T);var Y=T;Object.assign(Y,{packageName:"@combos-fun/plugin-cannon",packageVersion:"0.1.1"}),Object.assign(B,{packageName:"@combos-fun/plugin-cannon",packageVersion:"0.1.1"});class X extends e.Component{constructor(){super(...arguments),this.type="hinge",this.target="",this.pivotAX=0,this.pivotAY=0,this.pivotAZ=0,this.pivotBX=0,this.pivotBY=0,this.pivotBZ=0,this.axisAX=0,this.axisAY=1,this.axisAZ=0,this.axisBX=0,this.axisBY=1,this.axisBZ=0,this.distance=1,this.maxForce=1e6,this.collideConnected=!0,this.motor=!1,this.motorSpeed=0}static{this.componentName="Physics3DConstraint"}init(t){t&&Object.assign(this,t)}}exports.Physics3D=h,exports.Physics3DConstraint=X,exports.Physics3DConstraintSystem=Y,exports.Physics3DSystem=B;
@@ -896,11 +896,11 @@ var Physics3DConstraintSystem$1 = Physics3DConstraintSystem;
896
896
  /** Auto-generated by scripts/build-package.mjs — do not edit. */
897
897
  Object.assign(Physics3DConstraintSystem$1, {
898
898
  packageName: "@combos-fun/plugin-cannon",
899
- packageVersion: "0.1.0",
899
+ packageVersion: "0.1.1",
900
900
  });
901
901
  Object.assign(Physics3DSystem$1, {
902
902
  packageName: "@combos-fun/plugin-cannon",
903
- packageVersion: "0.1.0",
903
+ packageVersion: "0.1.1",
904
904
  });
905
905
 
906
906
  class Physics3DConstraint extends Component {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-cannon.esm.js","sources":["../lib/Physics3D.ts","../lib/createShape.ts","../lib/modelCollider.ts","../lib/resolve.ts","../lib/BodiesFactory.ts","../lib/Physics3DEngine.ts","../lib/Physics3DSystem.ts","../lib/Physics3DConstraintSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/Physics3DConstraint.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Euler, Quaternion, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport * as CANNON from 'cannon-es';\n\nexport enum Physics3DType {\n BOX = 'box',\n SPHERE = 'sphere',\n CYLINDER = 'cylinder',\n PLANE = 'plane',\n CONE = 'cone',\n TORUS = 'torus',\n CAPSULE = 'capsule',\n COMPOUND = 'compound',\n}\n\nexport type Physics3DCollider = 'manual' | 'aabb' | 'hull' | 'trimesh';\n\nexport interface Physics3DPartParams {\n type?: Physics3DType | string\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n finite?: boolean\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n}\n\nexport interface Physics3DParams {\n type?: Physics3DType | string\n mass?: number\n bodyOptions?: {\n friction?: number\n restitution?: number\n linearDamping?: number\n angularDamping?: number\n fixedRotation?: boolean\n [propName: string]: any\n }\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n stopRotation?: boolean\n finite?: boolean\n collider?: Physics3DCollider\n parts?: Physics3DPartParams[]\n}\n\nexport class Physics3D extends Component<Physics3DParams> {\n static componentName: string = 'Physics3D';\n public bodyParams: Physics3DParams;\n public body: CANNON.Body;\n private world: CANNON.World;\n /** Last mesh-collider fingerprint; used to rebuild after model load / scale. */\n public meshColliderKey?: string;\n\n // Readable position/rotation synced from body each frame\n public positionX: number = 0;\n public positionY: number = 0;\n public positionZ: number = 0;\n public rotationX: number = 0;\n public rotationY: number = 0;\n public rotationZ: number = 0;\n\n private _euler: CANNON.Vec3 = new CANNON.Vec3();\n private _worldPos = new Vector3();\n private _worldQuat = new Quaternion();\n private _bodyQuat = new Quaternion();\n private _localEuler = new Euler();\n\n init(params: Physics3DParams) {\n this.bodyParams = params || {};\n }\n\n update() {\n if (this.body && this.gameObject) {\n // Sync position from Cannon body\n this.positionX = this.body.position.x;\n this.positionY = this.body.position.y;\n this.positionZ = this.body.position.z;\n\n // Convert quaternion to Euler and sync rotation\n if (!this.bodyParams.stopRotation) {\n this.body.quaternion.toEuler(this._euler);\n this.rotationX = this._euler.x;\n this.rotationY = this._euler.y;\n this.rotationZ = this._euler.z;\n }\n\n this._worldPoseToLocalIfParented();\n\n // Auto-sync to sibling Transform3D / visual components on the same GameObject\n this._syncToSiblings();\n }\n }\n\n onDestroy() {\n if (this.world && this.body) {\n this.world.removeBody(this.body);\n }\n }\n\n private _worldPoseToLocalIfParented() {\n const renderer = this.game?.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const node = renderer?.threeContext?.object3DFor(this.gameObject.id);\n const scene = renderer?.threeContext?.scene;\n if (!node?.parent || node.parent === scene) return;\n\n node.parent.updateWorldMatrix(true, false);\n this._worldPos.set(this.positionX, this.positionY, this.positionZ);\n node.parent.worldToLocal(this._worldPos);\n this.positionX = this._worldPos.x;\n this.positionY = this._worldPos.y;\n this.positionZ = this._worldPos.z;\n\n if (!this.bodyParams.stopRotation) {\n node.parent.getWorldQuaternion(this._worldQuat).invert();\n this._bodyQuat.set(\n this.body.quaternion.x,\n this.body.quaternion.y,\n this.body.quaternion.z,\n this.body.quaternion.w,\n );\n this._bodyQuat.premultiply(this._worldQuat);\n this._localEuler.setFromQuaternion(this._bodyQuat);\n this.rotationX = this._localEuler.x;\n this.rotationY = this._localEuler.y;\n this.rotationZ = this._localEuler.z;\n }\n }\n\n private _syncToSiblings() {\n const components = this.gameObject.components;\n if (!components) return;\n for (let i = 0; i < components.length; i++) {\n const comp = components[i] as any;\n if (comp === this) continue;\n if ('positionX' in comp && 'positionY' in comp && 'positionZ' in comp) {\n comp.positionX = this.positionX;\n comp.positionY = this.positionY;\n comp.positionZ = this.positionZ;\n }\n if (!this.bodyParams.stopRotation && 'rotationX' in comp && 'rotationY' in comp && 'rotationZ' in comp) {\n comp.rotationX = this.rotationX;\n comp.rotationY = this.rotationY;\n comp.rotationZ = this.rotationZ;\n }\n }\n }\n}\n","import * as CANNON from 'cannon-es';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3DPartParams } from './Physics3D';\n\nexport interface ShapeDims {\n width: number\n height: number\n depth: number\n radius: number\n radiusTop: number\n radiusBottom: number\n segments: number\n tube: number\n finite?: boolean\n}\n\nexport interface PlacedShape {\n shape: CANNON.Shape\n offset?: CANNON.Vec3\n quaternion?: CANNON.Quaternion\n}\n\nexport const TYPE_BY_SHAPE: Record<string, Physics3DType> = {\n box: Physics3DType.BOX,\n sphere: Physics3DType.SPHERE,\n cylinder: Physics3DType.CYLINDER,\n plane: Physics3DType.PLANE,\n cone: Physics3DType.CONE,\n torus: Physics3DType.TORUS,\n capsule: Physics3DType.CAPSULE,\n compound: Physics3DType.COMPOUND,\n};\n\nexport function normalizeType(type?: string): Physics3DType {\n if (!type) return Physics3DType.BOX;\n return TYPE_BY_SHAPE[type] ?? (type as Physics3DType);\n}\n\nexport function torusTube(radius: number, tube?: number): number {\n return tube && tube > 0 ? tube : radius * 0.4;\n}\n\nexport function dimsFromParams(params: Physics3DPartParams, fallback?: Partial<ShapeDims>): ShapeDims {\n const radius = params.radius ?? fallback?.radius ?? 0.5;\n return {\n width: params.width ?? fallback?.width ?? 1,\n height: params.height ?? fallback?.height ?? 1,\n depth: params.depth ?? fallback?.depth ?? 1,\n radius,\n radiusTop: params.radiusTop ?? radius,\n radiusBottom: params.radiusBottom ?? radius,\n segments: Math.max(6, Math.round(params.segments ?? fallback?.segments ?? 12)),\n tube: torusTube(radius, params.tube ?? fallback?.tube),\n finite: params.finite ?? fallback?.finite,\n };\n}\n\nexport function offsetFromPart(part: Physics3DPartParams): CANNON.Vec3 {\n return new CANNON.Vec3(\n part.positionX ?? part.position?.x ?? 0,\n part.positionY ?? part.position?.y ?? 0,\n part.positionZ ?? part.position?.z ?? 0,\n );\n}\n\nexport function quaternionFromPart(part: Physics3DPartParams): CANNON.Quaternion | undefined {\n const x = part.rotationX ?? part.rotation?.x ?? 0;\n const y = part.rotationY ?? part.rotation?.y ?? 0;\n const z = part.rotationZ ?? part.rotation?.z ?? 0;\n if (!x && !y && !z) return undefined;\n const q = new CANNON.Quaternion();\n q.setFromEuler(x, y, z);\n return q;\n}\n\nexport function placedShapesForType(type: Physics3DType | string, dims: ShapeDims): PlacedShape[] {\n const kind = normalizeType(type as string);\n switch (kind) {\n case Physics3DType.SPHERE:\n return [{ shape: new CANNON.Sphere(dims.radius) }];\n case Physics3DType.CYLINDER:\n return [{\n shape: new CANNON.Cylinder(\n dims.radiusTop, dims.radiusBottom, dims.height, dims.segments,\n ),\n }];\n case Physics3DType.CONE:\n return [{\n shape: new CANNON.Cylinder(0.001, dims.radius, dims.height, dims.segments),\n }];\n case Physics3DType.PLANE:\n if (dims.finite) {\n return [{ shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, 0.01)) }];\n }\n return [{ shape: new CANNON.Plane() }];\n case Physics3DType.TORUS:\n return torusShapes(dims);\n case Physics3DType.CAPSULE:\n return capsuleShapes(dims);\n case Physics3DType.BOX:\n default:\n return [{\n shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, dims.depth / 2)),\n }];\n }\n}\n\nfunction torusShapes(dims: ShapeDims): PlacedShape[] {\n const n = Math.max(8, Math.min(12, dims.segments));\n const placed: PlacedShape[] = [];\n for (let i = 0; i < n; i++) {\n const angle = (i / n) * Math.PI * 2;\n placed.push({\n shape: new CANNON.Sphere(dims.tube),\n offset: new CANNON.Vec3(\n Math.cos(angle) * dims.radius,\n 0,\n Math.sin(angle) * dims.radius,\n ),\n });\n }\n return placed;\n}\n\nfunction capsuleShapes(dims: ShapeDims): PlacedShape[] {\n const cyl = Math.max(0, dims.height - 2 * dims.radius);\n const placed: PlacedShape[] = [];\n if (cyl > 0.001) {\n placed.push({\n shape: new CANNON.Cylinder(dims.radius, dims.radius, cyl, dims.segments),\n });\n }\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, cyl / 2, 0),\n });\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, -cyl / 2, 0),\n });\n return placed;\n}\n","import * as CANNON from 'cannon-es';\nimport {\n Box3,\n BufferGeometry,\n Mesh,\n Object3D,\n Vector3,\n} from 'three';\nimport { ConvexGeometry } from 'three/addons/geometries/ConvexGeometry.js';\nimport type { Physics3DCollider } from './Physics3D';\n\nconst _box = new Box3();\nconst _size = new Vector3();\nconst _center = new Vector3();\nconst _vertex = new Vector3();\n\nexport function withIdentityPose<T>(root: Object3D, fn: () => T): T {\n const px = root.position.x;\n const py = root.position.y;\n const pz = root.position.z;\n const rx = root.rotation.x;\n const ry = root.rotation.y;\n const rz = root.rotation.z;\n root.position.set(0, 0, 0);\n root.rotation.set(0, 0, 0);\n root.updateMatrixWorld(true);\n try {\n return fn();\n } finally {\n root.position.set(px, py, pz);\n root.rotation.set(rx, ry, rz);\n root.updateMatrixWorld(true);\n }\n}\n\nexport function addModelCollider(\n body: CANNON.Body,\n root: Object3D,\n collider: Physics3DCollider,\n): boolean {\n return withIdentityPose(root, () => {\n if (collider === 'trimesh') {\n return addTrimesh(body, root);\n }\n if (collider === 'hull') {\n return addHull(body, root);\n }\n return addAabb(body, root);\n });\n}\n\nfunction addAabb(body: CANNON.Body, root: Object3D): boolean {\n _box.setFromObject(root);\n if (_box.isEmpty()) return false;\n _box.getSize(_size);\n _box.getCenter(_center);\n if (_size.x <= 0 && _size.y <= 0 && _size.z <= 0) return false;\n body.addShape(\n new CANNON.Box(new CANNON.Vec3(\n Math.max(_size.x / 2, 0.01),\n Math.max(_size.y / 2, 0.01),\n Math.max(_size.z / 2, 0.01),\n )),\n new CANNON.Vec3(_center.x, _center.y, _center.z),\n );\n return true;\n}\n\nfunction addTrimesh(body: CANNON.Body, root: Object3D): boolean {\n let added = false;\n root.traverse((child) => {\n const mesh = child as Mesh;\n const geometry = mesh.geometry as BufferGeometry | undefined;\n const position = geometry?.attributes?.position;\n if (!position) return;\n const vertices: number[] = [];\n for (let i = 0; i < position.count; i++) {\n _vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld);\n vertices.push(_vertex.x, _vertex.y, _vertex.z);\n }\n const indices: number[] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i < array.length; i++) {\n indices.push(array[i]);\n }\n } else {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n }\n if (indices.length < 3) return;\n body.addShape(new CANNON.Trimesh(vertices, indices));\n added = true;\n });\n return added;\n}\n\nfunction addHull(body: CANNON.Body, root: Object3D): boolean {\n const points: Vector3[] = [];\n root.traverse((child) => {\n const mesh = child as Mesh;\n const position = mesh.geometry?.attributes?.position;\n if (!position) return;\n const stride = position.count > 128 ? Math.ceil(position.count / 128) : 1;\n for (let i = 0; i < position.count; i += stride) {\n points.push(_vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld).clone());\n }\n });\n if (points.length < 4) {\n return addAabb(body, root);\n }\n try {\n const geometry = new ConvexGeometry(points);\n const pos = geometry.attributes.position;\n const vertices: CANNON.Vec3[] = [];\n const indexOf = new Map<string, number>();\n const add = (x: number, y: number, z: number) => {\n const key = `${x.toFixed(5)},${y.toFixed(5)},${z.toFixed(5)}`;\n const existing = indexOf.get(key);\n if (existing != null) return existing;\n const i = vertices.length;\n vertices.push(new CANNON.Vec3(x, y, z));\n indexOf.set(key, i);\n return i;\n };\n const faces: number[][] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i + 2 < array.length; i += 3) {\n faces.push([\n add(pos.getX(array[i]), pos.getY(array[i]), pos.getZ(array[i])),\n add(pos.getX(array[i + 1]), pos.getY(array[i + 1]), pos.getZ(array[i + 1])),\n add(pos.getX(array[i + 2]), pos.getY(array[i + 2]), pos.getZ(array[i + 2])),\n ]);\n }\n } else {\n for (let i = 0; i + 2 < pos.count; i += 3) {\n faces.push([\n add(pos.getX(i), pos.getY(i), pos.getZ(i)),\n add(pos.getX(i + 1), pos.getY(i + 1), pos.getZ(i + 1)),\n add(pos.getX(i + 2), pos.getY(i + 2), pos.getZ(i + 2)),\n ]);\n }\n }\n geometry.dispose();\n if (vertices.length < 4 || faces.length < 4) {\n return addAabb(body, root);\n }\n body.addShape(new CANNON.ConvexPolyhedron({ vertices, faces }));\n return true;\n } catch {\n return addAabb(body, root);\n }\n}\n","import { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DCollider, Physics3DPartParams } from './Physics3D';\nimport { normalizeType } from './createShape';\n\nexport interface Graphics3DLike {\n shape?: string\n width?: number\n height?: number\n depth?: number\n radius?: number\n segments?: number\n tube?: number\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n parts?: Physics3DPartParams[]\n}\n\nexport interface Model3DLike {\n resource?: string\n scaleX?: number\n scaleY?: number\n scaleZ?: number\n}\n\nexport function resolveCollider(\n params: Physics3D['bodyParams'],\n model?: Model3DLike,\n): Physics3DCollider {\n if (params.collider) return params.collider;\n if (params.type || (params.parts && params.parts.length > 0)) return 'manual';\n return model ? 'aabb' : 'manual';\n}\n\nexport function resolveType(\n params: Physics3D['bodyParams'],\n graphics?: Graphics3DLike,\n): Physics3DType {\n if (params.type) return normalizeType(params.type as string);\n if ((params.parts && params.parts.length > 0) || (graphics?.parts && graphics.parts.length > 0)) {\n return Physics3DType.COMPOUND;\n }\n if (graphics?.shape) return normalizeType(graphics.shape);\n return Physics3DType.BOX;\n}\n\nexport function meshColliderFingerprint(\n collider: Physics3DCollider,\n model?: Model3DLike,\n): string | undefined {\n if (!model || collider === 'manual') return undefined;\n return `${collider}:${model.resource}:${model.scaleX}:${model.scaleY}:${model.scaleZ}`;\n}\n","import * as CANNON from 'cannon-es';\nimport type { Object3D } from 'three';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DPartParams } from './Physics3D';\nimport {\n dimsFromParams,\n normalizeType,\n offsetFromPart,\n placedShapesForType,\n quaternionFromPart,\n} from './createShape';\nimport type { ShapeDims } from './createShape';\nimport { addModelCollider } from './modelCollider';\nimport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\n\nexport type { Graphics3DLike, Model3DLike } from './resolve';\nexport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\n\nexport interface BodiesFactoryContext {\n graphics?: Graphics3DLike\n model?: Model3DLike\n modelGroup?: Object3D\n pose?: Graphics3DLike\n}\n\nfunction applyBodyOptions(body: CANNON.Body, options: Record<string, any> | undefined) {\n if (!options) return;\n if (options.friction !== undefined) {\n body.material = new CANNON.Material({\n friction: options.friction,\n restitution: options.restitution ?? 0.3,\n });\n }\n if (options.restitution !== undefined && !body.material) {\n body.material = new CANNON.Material({ friction: 0.3, restitution: options.restitution });\n }\n if (options.linearDamping !== undefined) body.linearDamping = options.linearDamping;\n if (options.angularDamping !== undefined) body.angularDamping = options.angularDamping;\n if (options.fixedRotation !== undefined) body.fixedRotation = options.fixedRotation;\n body.updateMassProperties();\n}\n\nfunction addPlaced(body: CANNON.Body, type: string, dims: ShapeDims, part?: Physics3DPartParams) {\n const placed = placedShapesForType(type, dims);\n const extraOffset = part ? offsetFromPart(part) : new CANNON.Vec3();\n const extraQuat = part ? quaternionFromPart(part) : undefined;\n for (const item of placed) {\n const local = (item.offset ? item.offset.clone() : new CANNON.Vec3());\n if (extraQuat) extraQuat.vmult(local, local);\n const offset = extraOffset.vadd(local);\n const quat = extraQuat && item.quaternion\n ? extraQuat.mult(item.quaternion)\n : (extraQuat || item.quaternion);\n body.addShape(item.shape, offset, quat);\n }\n}\n\nexport default class BodiesFactory {\n public create(component: Physics3D, context: BodiesFactoryContext = {}): CANNON.Body | null {\n const { bodyParams } = component;\n const graphics = context.graphics;\n const model = context.model;\n const collider = resolveCollider(bodyParams, model);\n\n if (collider !== 'manual') {\n if (!context.modelGroup) return null;\n let mass = bodyParams.mass ?? 1;\n if (collider === 'trimesh' && mass !== 0) {\n mass = 0;\n }\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n const ok = addModelCollider(body, context.modelGroup, collider);\n if (!ok) return null;\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = meshColliderFingerprint(collider, model);\n return body;\n }\n\n const type = resolveType(bodyParams, graphics);\n const dims = dimsFromParams(bodyParams, {\n width: graphics?.width,\n height: graphics?.height,\n depth: graphics?.depth,\n radius: graphics?.radius,\n segments: graphics?.segments,\n tube: graphics?.tube,\n finite: bodyParams.finite,\n });\n\n const infinitePlane = type === Physics3DType.PLANE && !dims.finite;\n const mass = infinitePlane ? 0 : (bodyParams.mass ?? 1);\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n\n if (type === Physics3DType.COMPOUND) {\n const parts = bodyParams.parts?.length ? bodyParams.parts : (graphics?.parts || []);\n if (!parts.length) {\n addPlaced(body, Physics3DType.BOX, dims);\n } else {\n for (const part of parts) {\n const partType = part.type || (part as { shape?: string }).shape || Physics3DType.BOX;\n if (normalizeType(partType as string) === Physics3DType.COMPOUND) continue;\n const partDims = dimsFromParams(part, dims);\n addPlaced(body, partType as string, partDims, part);\n }\n }\n } else {\n addPlaced(body, type, dims);\n }\n\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = undefined;\n return body;\n }\n\n private createBodyShell(\n component: Physics3D,\n mass: number,\n graphics?: Graphics3DLike,\n ): CANNON.Body {\n const body = new CANNON.Body({ mass });\n const pos = component.bodyParams.position;\n body.position.set(\n pos?.x ?? graphics?.positionX ?? 0,\n pos?.y ?? graphics?.positionY ?? 0,\n pos?.z ?? graphics?.positionZ ?? 0,\n );\n const rot = component.bodyParams.rotation;\n const rx = rot?.x ?? graphics?.rotationX ?? 0;\n const ry = rot?.y ?? graphics?.rotationY ?? 0;\n const rz = rot?.z ?? graphics?.rotationZ ?? 0;\n if (rx || ry || rz) {\n body.quaternion.setFromEuler(rx, ry, rz);\n }\n return body;\n }\n}\n","import * as CANNON from 'cannon-es';\nimport type { Component, Game, GameObject } from '@combos-fun/engine';\nimport { Euler, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport BodiesFactory from './BodiesFactory';\nimport type { BodiesFactoryContext } from './BodiesFactory';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\nimport { meshColliderFingerprint, resolveCollider } from './resolve';\nimport type { Physics3DSystemParams } from './Physics3DSystem';\nimport type { Physics3D } from './Physics3D';\nimport type { Physics3DConstraint } from './Physics3DConstraint';\n\ninterface PhysicsLinkedBody extends CANNON.Body {\n component?: Physics3D;\n}\n\nexport default class Physics3DEngine {\n private world: CANNON.World;\n private bodiesFactory: BodiesFactory;\n private options: Physics3DSystemParams;\n private game: Game;\n private pending = new Set<Physics3D>();\n private pendingConstraints = new Set<Physics3DConstraint>();\n private constraints = new Set<Physics3DConstraint>();\n private contactPairs = new Map<string, [Physics3D, Physics3D]>();\n public enabled: boolean = false;\n\n constructor(game: Game, options: Physics3DSystemParams) {\n this.game = game;\n this.options = options ?? {};\n this.bodiesFactory = new BodiesFactory();\n }\n\n public start() {\n this.world = new CANNON.World();\n\n const gravity = this.options.gravity ?? { x: 0, y: -9.82, z: 0 };\n this.world.gravity.set(gravity.x, gravity.y, gravity.z);\n\n if (this.options.solver) {\n const solver = this.world.solver as CANNON.GSSolver;\n if (this.options.solver.iterations !== undefined) {\n solver.iterations = this.options.solver.iterations;\n }\n if (this.options.solver.tolerance !== undefined) {\n solver.tolerance = this.options.solver.tolerance;\n }\n }\n\n this.world.broadphase = new CANNON.NaiveBroadphase();\n this.world.allowSleep = this.options.allowSleep ?? false;\n\n this.enabled = true;\n this.initCollisionEvents();\n }\n\n public update(e) {\n if (!this.world || !this.enabled) return;\n this.flushPending();\n this.rebuildStaleMeshColliders();\n const fixedTimeStep = this.options.fixedTimeStep ?? 1 / 60;\n const maxSubSteps = this.options.maxSubSteps ?? 3;\n const dt = (e.deltaTime || 16.67) / 1000;\n this.flushConstraints();\n this.world.step(fixedTimeStep, dt, maxSubSteps);\n this.emitCollisionActive();\n }\n\n public stop() {\n this.enabled = false;\n }\n\n public awake() {\n this.enabled = true;\n }\n\n public destroy() {\n this.pending.clear();\n this.pendingConstraints.clear();\n this.contactPairs.clear();\n if (this.world) {\n for (const constraint of this.constraints) {\n if (constraint.constraint) this.world.removeConstraint(constraint.constraint);\n constraint.constraint = undefined;\n }\n this.constraints.clear();\n while (this.world.bodies.length > 0) {\n this.world.removeBody(this.world.bodies[0]);\n }\n this.world = null;\n }\n }\n\n public add(component: Physics3D) {\n const body = this.tryCreate(component);\n if (!body) {\n this.pending.add(component);\n return;\n }\n this.attach(component, body);\n }\n\n public change(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n this.pending.delete(component);\n this.add(component);\n }\n\n public remove(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n this.pending.delete(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n component.meshColliderKey = undefined;\n }\n\n public addConstraint(component: Physics3DConstraint) {\n this.removeConstraint(component);\n this.pendingConstraints.add(component);\n this.flushConstraints();\n }\n\n public removeConstraint(component: Physics3DConstraint) {\n this.pendingConstraints.delete(component);\n this.constraints.delete(component);\n if (component.constraint && this.world) {\n this.world.removeConstraint(component.constraint);\n }\n component.constraint = undefined;\n }\n\n public flushConstraints() {\n if (!this.world) return;\n for (const component of [...this.pendingConstraints]) {\n if (!component.gameObject) {\n this.pendingConstraints.delete(component);\n continue;\n }\n if (this.tryAttachConstraint(component)) {\n this.pendingConstraints.delete(component);\n }\n }\n }\n\n private tryCreate(component: Physics3D): PhysicsLinkedBody | null {\n const context = this.contextFor(component);\n return this.bodiesFactory.create(component, context) as PhysicsLinkedBody | null;\n }\n\n private attach(component: Physics3D, body: PhysicsLinkedBody) {\n this.world.addBody(body);\n component.body = body;\n (component as any).world = this.world;\n body.component = component;\n }\n\n private contextFor(component: Physics3D): BodiesFactoryContext {\n const gameObject = component.gameObject as GameObject | undefined;\n const graphics = gameObject?.getComponent('Graphics3D') as Graphics3DLike | undefined;\n const model = gameObject?.getComponent('Model3D') as Model3DLike | undefined;\n const transform3d = gameObject?.getComponent('Transform3D') as Graphics3DLike | undefined;\n const renderer = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const modelGroup = gameObject ? renderer?.threeContext?.models.get(gameObject.id) : undefined;\n const node = gameObject ? renderer?.threeContext?.object3DFor(gameObject.id) : undefined;\n const scene = renderer?.threeContext?.scene;\n let worldPose: Graphics3DLike | undefined;\n if (node?.parent && node.parent !== scene) {\n node.updateWorldMatrix(true, false);\n const position = new Vector3();\n const euler = new Euler();\n node.getWorldPosition(position);\n euler.setFromRotationMatrix(node.matrixWorld);\n worldPose = {\n positionX: position.x,\n positionY: position.y,\n positionZ: position.z,\n rotationX: euler.x,\n rotationY: euler.y,\n rotationZ: euler.z,\n };\n }\n return { graphics, model, modelGroup, pose: worldPose || transform3d || graphics };\n }\n\n private flushPending() {\n if (!this.pending.size) return;\n for (const component of [...this.pending]) {\n if (!component.gameObject) {\n this.pending.delete(component);\n continue;\n }\n const body = this.tryCreate(component);\n if (body) {\n this.attach(component, body);\n this.pending.delete(component);\n }\n }\n }\n\n private rebuildStaleMeshColliders() {\n if (!this.world) return;\n const stale: Physics3D[] = [];\n for (const body of this.world.bodies) {\n const component = (body as PhysicsLinkedBody).component;\n if (!component?.gameObject) continue;\n const model = component.gameObject.getComponent('Model3D') as Model3DLike | undefined;\n const collider = resolveCollider(component.bodyParams, model);\n const key = meshColliderFingerprint(collider, model);\n if (!key || key === component.meshColliderKey) continue;\n stale.push(component);\n }\n for (const component of stale) {\n this.change(component);\n }\n }\n\n private initCollisionEvents() {\n this.world.addEventListener('beginContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionStart', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionStart', componentA.gameObject, componentB.gameObject);\n const pair = this.pairKey(bodyA, bodyB);\n this.contactPairs.set(pair, [bodyA.component, bodyB.component]);\n }\n });\n\n this.world.addEventListener('endContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionEnd', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionEnd', componentA.gameObject, componentB.gameObject);\n }\n this.contactPairs.delete(this.pairKey(bodyA, bodyB));\n });\n }\n\n private emitCollisionActive() {\n for (const [componentA, componentB] of this.contactPairs.values()) {\n if (!componentA?.gameObject || !componentB?.gameObject) continue;\n componentA.emit('collisionActive', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionActive', componentA.gameObject, componentB.gameObject);\n }\n }\n\n private pairKey(bodyA: CANNON.Body, bodyB: CANNON.Body) {\n return bodyA.id < bodyB.id ? `${bodyA.id}:${bodyB.id}` : `${bodyB.id}:${bodyA.id}`;\n }\n\n private clearContactsFor(component: Physics3D) {\n for (const [key, pair] of this.contactPairs) {\n if (pair[0] === component || pair[1] === component) {\n this.contactPairs.delete(key);\n }\n }\n }\n\n private tryAttachConstraint(component: Physics3DConstraint): boolean {\n const physicsA = component.gameObject?.getComponent('Physics3D') as Physics3D | undefined;\n const target = this.game.gameObjects.find((go) => go.name === component.target);\n const physicsB = target?.getComponent('Physics3D') as Physics3D | undefined;\n if (!physicsA?.body || !physicsB?.body || physicsA.body === physicsB.body) return false;\n const constraint = this.createConstraint(component, physicsA.body, physicsB.body);\n constraint.collideConnected = component.collideConnected;\n this.world.addConstraint(constraint);\n component.constraint = constraint;\n this.constraints.add(component);\n return true;\n }\n\n private createConstraint(\n component: Physics3DConstraint,\n bodyA: CANNON.Body,\n bodyB: CANNON.Body,\n ): CANNON.Constraint {\n const maxForce = component.maxForce;\n const pivotA = new CANNON.Vec3(component.pivotAX, component.pivotAY, component.pivotAZ);\n const pivotB = new CANNON.Vec3(component.pivotBX, component.pivotBY, component.pivotBZ);\n const axisA = new CANNON.Vec3(component.axisAX, component.axisAY, component.axisAZ);\n const axisB = new CANNON.Vec3(component.axisBX, component.axisBY, component.axisBZ);\n switch (component.type) {\n case 'point':\n return new CANNON.PointToPointConstraint(bodyA, pivotA, bodyB, pivotB, maxForce);\n case 'lock':\n return new CANNON.LockConstraint(bodyA, bodyB, { maxForce });\n case 'distance':\n return new CANNON.DistanceConstraint(bodyA, bodyB, component.distance, maxForce);\n case 'hinge':\n default: {\n const hinge = new CANNON.HingeConstraint(bodyA, bodyB, {\n pivotA,\n pivotB,\n axisA,\n axisB,\n maxForce,\n collideConnected: component.collideConnected,\n });\n if (component.motor) {\n hinge.enableMotor();\n hinge.setMotorSpeed(component.motorSpeed);\n }\n return hinge;\n }\n }\n }\n\n private detachConstraintsFor(physics: Physics3D) {\n for (const constraint of [...this.constraints]) {\n const physicsA = constraint.gameObject?.getComponent('Physics3D');\n const target = this.game.gameObjects.find((go) => go.name === constraint.target);\n const physicsB = target?.getComponent('Physics3D');\n if (physicsA === physics || physicsB === physics) {\n this.removeConstraint(constraint);\n this.pendingConstraints.add(constraint);\n }\n }\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DEngine from './Physics3DEngine';\nimport { Physics3D } from './Physics3D';\n\nexport interface Physics3DSystemParams {\n gravity?: {\n x: number\n y: number\n z: number\n }\n fixedTimeStep?: number\n maxSubSteps?: number\n allowSleep?: boolean\n solver?: {\n iterations?: number\n tolerance?: number\n }\n}\n\n@decorators.componentObserver({\n Physics3D: [{ prop: ['bodyParams'], deep: true }],\n GameObject: ['parent'],\n})\nexport default class Physics3DSystem extends System<Physics3DSystemParams> {\n static systemName = 'Physics3DSystem';\n public engine: Physics3DEngine;\n\n init(param?: Physics3DSystemParams) {\n this.engine = new Physics3DEngine(this.game, param);\n }\n\n awake() { }\n\n start() {\n this.engine.start();\n }\n\n update(e) {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n if (changed) {\n this.componentChanged(changed);\n }\n }\n this.engine.update(e);\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.component instanceof Physics3D) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.parent && !changed.gameObject.getComponent(Physics3D).body) {\n this.engine.add(changed.component);\n }\n break;\n }\n case OBSERVER_TYPE.CHANGE: {\n this.engine.change(changed.component);\n break;\n }\n case OBSERVER_TYPE.REMOVE: {\n this.engine.remove(changed.component);\n break;\n }\n }\n } else {\n // GameObject.parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if (changed.gameObject.parent) {\n let physics = changed.gameObject.getComponent(Physics3D);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics3D);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n\n lateUpdate() { }\n\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n\n onPause() {\n this.engine.stop();\n }\n\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DSystem from './Physics3DSystem';\nimport { Physics3DConstraint } from './Physics3DConstraint';\n\n@decorators.componentObserver({\n Physics3DConstraint: [\n 'type', 'target',\n 'pivotAX', 'pivotAY', 'pivotAZ',\n 'pivotBX', 'pivotBY', 'pivotBZ',\n 'axisAX', 'axisAY', 'axisAZ',\n 'axisBX', 'axisBY', 'axisBZ',\n 'distance', 'maxForce', 'collideConnected',\n 'motor', 'motorSpeed',\n ],\n})\nexport default class Physics3DConstraintSystem extends System {\n static systemName = 'Physics3DConstraintSystem';\n name: string = 'Physics3DConstraintSystem';\n\n init() {\n const physics = this.game.getSystem(Physics3DSystem) as Physics3DSystem;\n if (!physics) {\n console.warn('Physics3DConstraintSystem requires Physics3DSystem');\n }\n }\n\n update() {\n const engine = this.engine();\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n engine?.flushConstraints();\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Physics3DConstraint') return;\n const engine = this.engine();\n if (!engine) return;\n const component = changed.component as Physics3DConstraint;\n if (changed.type === OBSERVER_TYPE.REMOVE) {\n engine.removeConstraint(component);\n return;\n }\n engine.addConstraint(component);\n }\n\n private engine() {\n return (this.game.getSystem(Physics3DSystem) as Physics3DSystem | undefined)?.engine;\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport Physics3DConstraintSystem from './Physics3DConstraintSystem';\nimport Physics3DSystem from './Physics3DSystem';\n\nObject.assign(Physics3DConstraintSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.0\",\n});\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.0\",\n});\n","import { Component } from '@combos-fun/engine';\nimport type { Constraint } from 'cannon-es';\n\nexport type Physics3DConstraintKind = 'hinge' | 'point' | 'lock' | 'distance';\n\nexport interface Physics3DConstraintParams {\n type?: Physics3DConstraintKind | string;\n target?: string;\n pivotAX?: number;\n pivotAY?: number;\n pivotAZ?: number;\n pivotBX?: number;\n pivotBY?: number;\n pivotBZ?: number;\n axisAX?: number;\n axisAY?: number;\n axisAZ?: number;\n axisBX?: number;\n axisBY?: number;\n axisBZ?: number;\n distance?: number;\n maxForce?: number;\n collideConnected?: boolean;\n motor?: boolean;\n motorSpeed?: number;\n}\n\nexport class Physics3DConstraint extends Component<Physics3DConstraintParams> {\n static componentName: string = 'Physics3DConstraint';\n\n type: string = 'hinge';\n target: string = '';\n pivotAX: number = 0;\n pivotAY: number = 0;\n pivotAZ: number = 0;\n pivotBX: number = 0;\n pivotBY: number = 0;\n pivotBZ: number = 0;\n axisAX: number = 0;\n axisAY: number = 1;\n axisAZ: number = 0;\n axisBX: number = 0;\n axisBY: number = 1;\n axisBZ: number = 0;\n distance: number = 1;\n maxForce: number = 1e6;\n collideConnected: boolean = true;\n motor: boolean = false;\n motorSpeed: number = 0;\n constraint?: Constraint;\n\n init(obj?: Physics3DConstraintParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n"],"names":["Physics3DSystem","Physics3DConstraintSystem"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-cannon.esm.js","sources":["../lib/Physics3D.ts","../lib/createShape.ts","../lib/modelCollider.ts","../lib/resolve.ts","../lib/BodiesFactory.ts","../lib/Physics3DEngine.ts","../lib/Physics3DSystem.ts","../lib/Physics3DConstraintSystem.ts","../lib/__combosPackageMeta.gen.ts","../lib/Physics3DConstraint.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Euler, Quaternion, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport * as CANNON from 'cannon-es';\n\nexport enum Physics3DType {\n BOX = 'box',\n SPHERE = 'sphere',\n CYLINDER = 'cylinder',\n PLANE = 'plane',\n CONE = 'cone',\n TORUS = 'torus',\n CAPSULE = 'capsule',\n COMPOUND = 'compound',\n}\n\nexport type Physics3DCollider = 'manual' | 'aabb' | 'hull' | 'trimesh';\n\nexport interface Physics3DPartParams {\n type?: Physics3DType | string\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n finite?: boolean\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n}\n\nexport interface Physics3DParams {\n type?: Physics3DType | string\n mass?: number\n bodyOptions?: {\n friction?: number\n restitution?: number\n linearDamping?: number\n angularDamping?: number\n fixedRotation?: boolean\n [propName: string]: any\n }\n position?: {\n x?: number\n y?: number\n z?: number\n }\n rotation?: {\n x?: number\n y?: number\n z?: number\n }\n width?: number\n height?: number\n depth?: number\n radius?: number\n radiusTop?: number\n radiusBottom?: number\n segments?: number\n tube?: number\n stopRotation?: boolean\n finite?: boolean\n collider?: Physics3DCollider\n parts?: Physics3DPartParams[]\n}\n\nexport class Physics3D extends Component<Physics3DParams> {\n static componentName: string = 'Physics3D';\n public bodyParams: Physics3DParams;\n public body: CANNON.Body;\n private world: CANNON.World;\n /** Last mesh-collider fingerprint; used to rebuild after model load / scale. */\n public meshColliderKey?: string;\n\n // Readable position/rotation synced from body each frame\n public positionX: number = 0;\n public positionY: number = 0;\n public positionZ: number = 0;\n public rotationX: number = 0;\n public rotationY: number = 0;\n public rotationZ: number = 0;\n\n private _euler: CANNON.Vec3 = new CANNON.Vec3();\n private _worldPos = new Vector3();\n private _worldQuat = new Quaternion();\n private _bodyQuat = new Quaternion();\n private _localEuler = new Euler();\n\n init(params: Physics3DParams) {\n this.bodyParams = params || {};\n }\n\n update() {\n if (this.body && this.gameObject) {\n // Sync position from Cannon body\n this.positionX = this.body.position.x;\n this.positionY = this.body.position.y;\n this.positionZ = this.body.position.z;\n\n // Convert quaternion to Euler and sync rotation\n if (!this.bodyParams.stopRotation) {\n this.body.quaternion.toEuler(this._euler);\n this.rotationX = this._euler.x;\n this.rotationY = this._euler.y;\n this.rotationZ = this._euler.z;\n }\n\n this._worldPoseToLocalIfParented();\n\n // Auto-sync to sibling Transform3D / visual components on the same GameObject\n this._syncToSiblings();\n }\n }\n\n onDestroy() {\n if (this.world && this.body) {\n this.world.removeBody(this.body);\n }\n }\n\n private _worldPoseToLocalIfParented() {\n const renderer = this.game?.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const node = renderer?.threeContext?.object3DFor(this.gameObject.id);\n const scene = renderer?.threeContext?.scene;\n if (!node?.parent || node.parent === scene) return;\n\n node.parent.updateWorldMatrix(true, false);\n this._worldPos.set(this.positionX, this.positionY, this.positionZ);\n node.parent.worldToLocal(this._worldPos);\n this.positionX = this._worldPos.x;\n this.positionY = this._worldPos.y;\n this.positionZ = this._worldPos.z;\n\n if (!this.bodyParams.stopRotation) {\n node.parent.getWorldQuaternion(this._worldQuat).invert();\n this._bodyQuat.set(\n this.body.quaternion.x,\n this.body.quaternion.y,\n this.body.quaternion.z,\n this.body.quaternion.w,\n );\n this._bodyQuat.premultiply(this._worldQuat);\n this._localEuler.setFromQuaternion(this._bodyQuat);\n this.rotationX = this._localEuler.x;\n this.rotationY = this._localEuler.y;\n this.rotationZ = this._localEuler.z;\n }\n }\n\n private _syncToSiblings() {\n const components = this.gameObject.components;\n if (!components) return;\n for (let i = 0; i < components.length; i++) {\n const comp = components[i] as any;\n if (comp === this) continue;\n if ('positionX' in comp && 'positionY' in comp && 'positionZ' in comp) {\n comp.positionX = this.positionX;\n comp.positionY = this.positionY;\n comp.positionZ = this.positionZ;\n }\n if (!this.bodyParams.stopRotation && 'rotationX' in comp && 'rotationY' in comp && 'rotationZ' in comp) {\n comp.rotationX = this.rotationX;\n comp.rotationY = this.rotationY;\n comp.rotationZ = this.rotationZ;\n }\n }\n }\n}\n","import * as CANNON from 'cannon-es';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3DPartParams } from './Physics3D';\n\nexport interface ShapeDims {\n width: number\n height: number\n depth: number\n radius: number\n radiusTop: number\n radiusBottom: number\n segments: number\n tube: number\n finite?: boolean\n}\n\nexport interface PlacedShape {\n shape: CANNON.Shape\n offset?: CANNON.Vec3\n quaternion?: CANNON.Quaternion\n}\n\nexport const TYPE_BY_SHAPE: Record<string, Physics3DType> = {\n box: Physics3DType.BOX,\n sphere: Physics3DType.SPHERE,\n cylinder: Physics3DType.CYLINDER,\n plane: Physics3DType.PLANE,\n cone: Physics3DType.CONE,\n torus: Physics3DType.TORUS,\n capsule: Physics3DType.CAPSULE,\n compound: Physics3DType.COMPOUND,\n};\n\nexport function normalizeType(type?: string): Physics3DType {\n if (!type) return Physics3DType.BOX;\n return TYPE_BY_SHAPE[type] ?? (type as Physics3DType);\n}\n\nexport function torusTube(radius: number, tube?: number): number {\n return tube && tube > 0 ? tube : radius * 0.4;\n}\n\nexport function dimsFromParams(params: Physics3DPartParams, fallback?: Partial<ShapeDims>): ShapeDims {\n const radius = params.radius ?? fallback?.radius ?? 0.5;\n return {\n width: params.width ?? fallback?.width ?? 1,\n height: params.height ?? fallback?.height ?? 1,\n depth: params.depth ?? fallback?.depth ?? 1,\n radius,\n radiusTop: params.radiusTop ?? radius,\n radiusBottom: params.radiusBottom ?? radius,\n segments: Math.max(6, Math.round(params.segments ?? fallback?.segments ?? 12)),\n tube: torusTube(radius, params.tube ?? fallback?.tube),\n finite: params.finite ?? fallback?.finite,\n };\n}\n\nexport function offsetFromPart(part: Physics3DPartParams): CANNON.Vec3 {\n return new CANNON.Vec3(\n part.positionX ?? part.position?.x ?? 0,\n part.positionY ?? part.position?.y ?? 0,\n part.positionZ ?? part.position?.z ?? 0,\n );\n}\n\nexport function quaternionFromPart(part: Physics3DPartParams): CANNON.Quaternion | undefined {\n const x = part.rotationX ?? part.rotation?.x ?? 0;\n const y = part.rotationY ?? part.rotation?.y ?? 0;\n const z = part.rotationZ ?? part.rotation?.z ?? 0;\n if (!x && !y && !z) return undefined;\n const q = new CANNON.Quaternion();\n q.setFromEuler(x, y, z);\n return q;\n}\n\nexport function placedShapesForType(type: Physics3DType | string, dims: ShapeDims): PlacedShape[] {\n const kind = normalizeType(type as string);\n switch (kind) {\n case Physics3DType.SPHERE:\n return [{ shape: new CANNON.Sphere(dims.radius) }];\n case Physics3DType.CYLINDER:\n return [{\n shape: new CANNON.Cylinder(\n dims.radiusTop, dims.radiusBottom, dims.height, dims.segments,\n ),\n }];\n case Physics3DType.CONE:\n return [{\n shape: new CANNON.Cylinder(0.001, dims.radius, dims.height, dims.segments),\n }];\n case Physics3DType.PLANE:\n if (dims.finite) {\n return [{ shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, 0.01)) }];\n }\n return [{ shape: new CANNON.Plane() }];\n case Physics3DType.TORUS:\n return torusShapes(dims);\n case Physics3DType.CAPSULE:\n return capsuleShapes(dims);\n case Physics3DType.BOX:\n default:\n return [{\n shape: new CANNON.Box(new CANNON.Vec3(dims.width / 2, dims.height / 2, dims.depth / 2)),\n }];\n }\n}\n\nfunction torusShapes(dims: ShapeDims): PlacedShape[] {\n const n = Math.max(8, Math.min(12, dims.segments));\n const placed: PlacedShape[] = [];\n for (let i = 0; i < n; i++) {\n const angle = (i / n) * Math.PI * 2;\n placed.push({\n shape: new CANNON.Sphere(dims.tube),\n offset: new CANNON.Vec3(\n Math.cos(angle) * dims.radius,\n 0,\n Math.sin(angle) * dims.radius,\n ),\n });\n }\n return placed;\n}\n\nfunction capsuleShapes(dims: ShapeDims): PlacedShape[] {\n const cyl = Math.max(0, dims.height - 2 * dims.radius);\n const placed: PlacedShape[] = [];\n if (cyl > 0.001) {\n placed.push({\n shape: new CANNON.Cylinder(dims.radius, dims.radius, cyl, dims.segments),\n });\n }\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, cyl / 2, 0),\n });\n placed.push({\n shape: new CANNON.Sphere(dims.radius),\n offset: new CANNON.Vec3(0, -cyl / 2, 0),\n });\n return placed;\n}\n","import * as CANNON from 'cannon-es';\nimport {\n Box3,\n BufferGeometry,\n Mesh,\n Object3D,\n Vector3,\n} from 'three';\nimport { ConvexGeometry } from 'three/addons/geometries/ConvexGeometry.js';\nimport type { Physics3DCollider } from './Physics3D';\n\nconst _box = new Box3();\nconst _size = new Vector3();\nconst _center = new Vector3();\nconst _vertex = new Vector3();\n\nexport function withIdentityPose<T>(root: Object3D, fn: () => T): T {\n const px = root.position.x;\n const py = root.position.y;\n const pz = root.position.z;\n const rx = root.rotation.x;\n const ry = root.rotation.y;\n const rz = root.rotation.z;\n root.position.set(0, 0, 0);\n root.rotation.set(0, 0, 0);\n root.updateMatrixWorld(true);\n try {\n return fn();\n } finally {\n root.position.set(px, py, pz);\n root.rotation.set(rx, ry, rz);\n root.updateMatrixWorld(true);\n }\n}\n\nexport function addModelCollider(\n body: CANNON.Body,\n root: Object3D,\n collider: Physics3DCollider,\n): boolean {\n return withIdentityPose(root, () => {\n if (collider === 'trimesh') {\n return addTrimesh(body, root);\n }\n if (collider === 'hull') {\n return addHull(body, root);\n }\n return addAabb(body, root);\n });\n}\n\nfunction addAabb(body: CANNON.Body, root: Object3D): boolean {\n _box.setFromObject(root);\n if (_box.isEmpty()) return false;\n _box.getSize(_size);\n _box.getCenter(_center);\n if (_size.x <= 0 && _size.y <= 0 && _size.z <= 0) return false;\n body.addShape(\n new CANNON.Box(new CANNON.Vec3(\n Math.max(_size.x / 2, 0.01),\n Math.max(_size.y / 2, 0.01),\n Math.max(_size.z / 2, 0.01),\n )),\n new CANNON.Vec3(_center.x, _center.y, _center.z),\n );\n return true;\n}\n\nfunction addTrimesh(body: CANNON.Body, root: Object3D): boolean {\n let added = false;\n root.traverse((child) => {\n const mesh = child as Mesh;\n const geometry = mesh.geometry as BufferGeometry | undefined;\n const position = geometry?.attributes?.position;\n if (!position) return;\n const vertices: number[] = [];\n for (let i = 0; i < position.count; i++) {\n _vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld);\n vertices.push(_vertex.x, _vertex.y, _vertex.z);\n }\n const indices: number[] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i < array.length; i++) {\n indices.push(array[i]);\n }\n } else {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n }\n if (indices.length < 3) return;\n body.addShape(new CANNON.Trimesh(vertices, indices));\n added = true;\n });\n return added;\n}\n\nfunction addHull(body: CANNON.Body, root: Object3D): boolean {\n const points: Vector3[] = [];\n root.traverse((child) => {\n const mesh = child as Mesh;\n const position = mesh.geometry?.attributes?.position;\n if (!position) return;\n const stride = position.count > 128 ? Math.ceil(position.count / 128) : 1;\n for (let i = 0; i < position.count; i += stride) {\n points.push(_vertex.fromBufferAttribute(position, i).applyMatrix4(mesh.matrixWorld).clone());\n }\n });\n if (points.length < 4) {\n return addAabb(body, root);\n }\n try {\n const geometry = new ConvexGeometry(points);\n const pos = geometry.attributes.position;\n const vertices: CANNON.Vec3[] = [];\n const indexOf = new Map<string, number>();\n const add = (x: number, y: number, z: number) => {\n const key = `${x.toFixed(5)},${y.toFixed(5)},${z.toFixed(5)}`;\n const existing = indexOf.get(key);\n if (existing != null) return existing;\n const i = vertices.length;\n vertices.push(new CANNON.Vec3(x, y, z));\n indexOf.set(key, i);\n return i;\n };\n const faces: number[][] = [];\n if (geometry.index) {\n const array = geometry.index.array;\n for (let i = 0; i + 2 < array.length; i += 3) {\n faces.push([\n add(pos.getX(array[i]), pos.getY(array[i]), pos.getZ(array[i])),\n add(pos.getX(array[i + 1]), pos.getY(array[i + 1]), pos.getZ(array[i + 1])),\n add(pos.getX(array[i + 2]), pos.getY(array[i + 2]), pos.getZ(array[i + 2])),\n ]);\n }\n } else {\n for (let i = 0; i + 2 < pos.count; i += 3) {\n faces.push([\n add(pos.getX(i), pos.getY(i), pos.getZ(i)),\n add(pos.getX(i + 1), pos.getY(i + 1), pos.getZ(i + 1)),\n add(pos.getX(i + 2), pos.getY(i + 2), pos.getZ(i + 2)),\n ]);\n }\n }\n geometry.dispose();\n if (vertices.length < 4 || faces.length < 4) {\n return addAabb(body, root);\n }\n body.addShape(new CANNON.ConvexPolyhedron({ vertices, faces }));\n return true;\n } catch {\n return addAabb(body, root);\n }\n}\n","import { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DCollider, Physics3DPartParams } from './Physics3D';\nimport { normalizeType } from './createShape';\n\nexport interface Graphics3DLike {\n shape?: string\n width?: number\n height?: number\n depth?: number\n radius?: number\n segments?: number\n tube?: number\n positionX?: number\n positionY?: number\n positionZ?: number\n rotationX?: number\n rotationY?: number\n rotationZ?: number\n parts?: Physics3DPartParams[]\n}\n\nexport interface Model3DLike {\n resource?: string\n scaleX?: number\n scaleY?: number\n scaleZ?: number\n}\n\nexport function resolveCollider(\n params: Physics3D['bodyParams'],\n model?: Model3DLike,\n): Physics3DCollider {\n if (params.collider) return params.collider;\n if (params.type || (params.parts && params.parts.length > 0)) return 'manual';\n return model ? 'aabb' : 'manual';\n}\n\nexport function resolveType(\n params: Physics3D['bodyParams'],\n graphics?: Graphics3DLike,\n): Physics3DType {\n if (params.type) return normalizeType(params.type as string);\n if ((params.parts && params.parts.length > 0) || (graphics?.parts && graphics.parts.length > 0)) {\n return Physics3DType.COMPOUND;\n }\n if (graphics?.shape) return normalizeType(graphics.shape);\n return Physics3DType.BOX;\n}\n\nexport function meshColliderFingerprint(\n collider: Physics3DCollider,\n model?: Model3DLike,\n): string | undefined {\n if (!model || collider === 'manual') return undefined;\n return `${collider}:${model.resource}:${model.scaleX}:${model.scaleY}:${model.scaleZ}`;\n}\n","import * as CANNON from 'cannon-es';\nimport type { Object3D } from 'three';\nimport { Physics3DType } from './Physics3D';\nimport type { Physics3D, Physics3DPartParams } from './Physics3D';\nimport {\n dimsFromParams,\n normalizeType,\n offsetFromPart,\n placedShapesForType,\n quaternionFromPart,\n} from './createShape';\nimport type { ShapeDims } from './createShape';\nimport { addModelCollider } from './modelCollider';\nimport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\n\nexport type { Graphics3DLike, Model3DLike } from './resolve';\nexport { meshColliderFingerprint, resolveCollider, resolveType } from './resolve';\n\nexport interface BodiesFactoryContext {\n graphics?: Graphics3DLike\n model?: Model3DLike\n modelGroup?: Object3D\n pose?: Graphics3DLike\n}\n\nfunction applyBodyOptions(body: CANNON.Body, options: Record<string, any> | undefined) {\n if (!options) return;\n if (options.friction !== undefined) {\n body.material = new CANNON.Material({\n friction: options.friction,\n restitution: options.restitution ?? 0.3,\n });\n }\n if (options.restitution !== undefined && !body.material) {\n body.material = new CANNON.Material({ friction: 0.3, restitution: options.restitution });\n }\n if (options.linearDamping !== undefined) body.linearDamping = options.linearDamping;\n if (options.angularDamping !== undefined) body.angularDamping = options.angularDamping;\n if (options.fixedRotation !== undefined) body.fixedRotation = options.fixedRotation;\n body.updateMassProperties();\n}\n\nfunction addPlaced(body: CANNON.Body, type: string, dims: ShapeDims, part?: Physics3DPartParams) {\n const placed = placedShapesForType(type, dims);\n const extraOffset = part ? offsetFromPart(part) : new CANNON.Vec3();\n const extraQuat = part ? quaternionFromPart(part) : undefined;\n for (const item of placed) {\n const local = (item.offset ? item.offset.clone() : new CANNON.Vec3());\n if (extraQuat) extraQuat.vmult(local, local);\n const offset = extraOffset.vadd(local);\n const quat = extraQuat && item.quaternion\n ? extraQuat.mult(item.quaternion)\n : (extraQuat || item.quaternion);\n body.addShape(item.shape, offset, quat);\n }\n}\n\nexport default class BodiesFactory {\n public create(component: Physics3D, context: BodiesFactoryContext = {}): CANNON.Body | null {\n const { bodyParams } = component;\n const graphics = context.graphics;\n const model = context.model;\n const collider = resolveCollider(bodyParams, model);\n\n if (collider !== 'manual') {\n if (!context.modelGroup) return null;\n let mass = bodyParams.mass ?? 1;\n if (collider === 'trimesh' && mass !== 0) {\n mass = 0;\n }\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n const ok = addModelCollider(body, context.modelGroup, collider);\n if (!ok) return null;\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = meshColliderFingerprint(collider, model);\n return body;\n }\n\n const type = resolveType(bodyParams, graphics);\n const dims = dimsFromParams(bodyParams, {\n width: graphics?.width,\n height: graphics?.height,\n depth: graphics?.depth,\n radius: graphics?.radius,\n segments: graphics?.segments,\n tube: graphics?.tube,\n finite: bodyParams.finite,\n });\n\n const infinitePlane = type === Physics3DType.PLANE && !dims.finite;\n const mass = infinitePlane ? 0 : (bodyParams.mass ?? 1);\n const body = this.createBodyShell(component, mass, context.pose || graphics);\n\n if (type === Physics3DType.COMPOUND) {\n const parts = bodyParams.parts?.length ? bodyParams.parts : (graphics?.parts || []);\n if (!parts.length) {\n addPlaced(body, Physics3DType.BOX, dims);\n } else {\n for (const part of parts) {\n const partType = part.type || (part as { shape?: string }).shape || Physics3DType.BOX;\n if (normalizeType(partType as string) === Physics3DType.COMPOUND) continue;\n const partDims = dimsFromParams(part, dims);\n addPlaced(body, partType as string, partDims, part);\n }\n }\n } else {\n addPlaced(body, type, dims);\n }\n\n applyBodyOptions(body, bodyParams.bodyOptions);\n component.meshColliderKey = undefined;\n return body;\n }\n\n private createBodyShell(\n component: Physics3D,\n mass: number,\n graphics?: Graphics3DLike,\n ): CANNON.Body {\n const body = new CANNON.Body({ mass });\n const pos = component.bodyParams.position;\n body.position.set(\n pos?.x ?? graphics?.positionX ?? 0,\n pos?.y ?? graphics?.positionY ?? 0,\n pos?.z ?? graphics?.positionZ ?? 0,\n );\n const rot = component.bodyParams.rotation;\n const rx = rot?.x ?? graphics?.rotationX ?? 0;\n const ry = rot?.y ?? graphics?.rotationY ?? 0;\n const rz = rot?.z ?? graphics?.rotationZ ?? 0;\n if (rx || ry || rz) {\n body.quaternion.setFromEuler(rx, ry, rz);\n }\n return body;\n }\n}\n","import * as CANNON from 'cannon-es';\nimport type { Component, Game, GameObject } from '@combos-fun/engine';\nimport { Euler, Vector3 } from 'three';\nimport { Renderer3DSystem } from '@combos-fun/plugin-renderer-3d';\nimport BodiesFactory from './BodiesFactory';\nimport type { BodiesFactoryContext } from './BodiesFactory';\nimport type { Graphics3DLike, Model3DLike } from './resolve';\nimport { meshColliderFingerprint, resolveCollider } from './resolve';\nimport type { Physics3DSystemParams } from './Physics3DSystem';\nimport type { Physics3D } from './Physics3D';\nimport type { Physics3DConstraint } from './Physics3DConstraint';\n\ninterface PhysicsLinkedBody extends CANNON.Body {\n component?: Physics3D;\n}\n\nexport default class Physics3DEngine {\n private world: CANNON.World;\n private bodiesFactory: BodiesFactory;\n private options: Physics3DSystemParams;\n private game: Game;\n private pending = new Set<Physics3D>();\n private pendingConstraints = new Set<Physics3DConstraint>();\n private constraints = new Set<Physics3DConstraint>();\n private contactPairs = new Map<string, [Physics3D, Physics3D]>();\n public enabled: boolean = false;\n\n constructor(game: Game, options: Physics3DSystemParams) {\n this.game = game;\n this.options = options ?? {};\n this.bodiesFactory = new BodiesFactory();\n }\n\n public start() {\n this.world = new CANNON.World();\n\n const gravity = this.options.gravity ?? { x: 0, y: -9.82, z: 0 };\n this.world.gravity.set(gravity.x, gravity.y, gravity.z);\n\n if (this.options.solver) {\n const solver = this.world.solver as CANNON.GSSolver;\n if (this.options.solver.iterations !== undefined) {\n solver.iterations = this.options.solver.iterations;\n }\n if (this.options.solver.tolerance !== undefined) {\n solver.tolerance = this.options.solver.tolerance;\n }\n }\n\n this.world.broadphase = new CANNON.NaiveBroadphase();\n this.world.allowSleep = this.options.allowSleep ?? false;\n\n this.enabled = true;\n this.initCollisionEvents();\n }\n\n public update(e) {\n if (!this.world || !this.enabled) return;\n this.flushPending();\n this.rebuildStaleMeshColliders();\n const fixedTimeStep = this.options.fixedTimeStep ?? 1 / 60;\n const maxSubSteps = this.options.maxSubSteps ?? 3;\n const dt = (e.deltaTime || 16.67) / 1000;\n this.flushConstraints();\n this.world.step(fixedTimeStep, dt, maxSubSteps);\n this.emitCollisionActive();\n }\n\n public stop() {\n this.enabled = false;\n }\n\n public awake() {\n this.enabled = true;\n }\n\n public destroy() {\n this.pending.clear();\n this.pendingConstraints.clear();\n this.contactPairs.clear();\n if (this.world) {\n for (const constraint of this.constraints) {\n if (constraint.constraint) this.world.removeConstraint(constraint.constraint);\n constraint.constraint = undefined;\n }\n this.constraints.clear();\n while (this.world.bodies.length > 0) {\n this.world.removeBody(this.world.bodies[0]);\n }\n this.world = null;\n }\n }\n\n public add(component: Physics3D) {\n const body = this.tryCreate(component);\n if (!body) {\n this.pending.add(component);\n return;\n }\n this.attach(component, body);\n }\n\n public change(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n this.pending.delete(component);\n this.add(component);\n }\n\n public remove(component: Physics3D) {\n this.detachConstraintsFor(component);\n this.clearContactsFor(component);\n this.pending.delete(component);\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n component.meshColliderKey = undefined;\n }\n\n public addConstraint(component: Physics3DConstraint) {\n this.removeConstraint(component);\n this.pendingConstraints.add(component);\n this.flushConstraints();\n }\n\n public removeConstraint(component: Physics3DConstraint) {\n this.pendingConstraints.delete(component);\n this.constraints.delete(component);\n if (component.constraint && this.world) {\n this.world.removeConstraint(component.constraint);\n }\n component.constraint = undefined;\n }\n\n public flushConstraints() {\n if (!this.world) return;\n for (const component of [...this.pendingConstraints]) {\n if (!component.gameObject) {\n this.pendingConstraints.delete(component);\n continue;\n }\n if (this.tryAttachConstraint(component)) {\n this.pendingConstraints.delete(component);\n }\n }\n }\n\n private tryCreate(component: Physics3D): PhysicsLinkedBody | null {\n const context = this.contextFor(component);\n return this.bodiesFactory.create(component, context) as PhysicsLinkedBody | null;\n }\n\n private attach(component: Physics3D, body: PhysicsLinkedBody) {\n this.world.addBody(body);\n component.body = body;\n (component as any).world = this.world;\n body.component = component;\n }\n\n private contextFor(component: Physics3D): BodiesFactoryContext {\n const gameObject = component.gameObject as GameObject | undefined;\n const graphics = gameObject?.getComponent('Graphics3D') as Graphics3DLike | undefined;\n const model = gameObject?.getComponent('Model3D') as Model3DLike | undefined;\n const transform3d = gameObject?.getComponent('Transform3D') as Graphics3DLike | undefined;\n const renderer = this.game.getSystem(Renderer3DSystem) as Renderer3DSystem | undefined;\n const modelGroup = gameObject ? renderer?.threeContext?.models.get(gameObject.id) : undefined;\n const node = gameObject ? renderer?.threeContext?.object3DFor(gameObject.id) : undefined;\n const scene = renderer?.threeContext?.scene;\n let worldPose: Graphics3DLike | undefined;\n if (node?.parent && node.parent !== scene) {\n node.updateWorldMatrix(true, false);\n const position = new Vector3();\n const euler = new Euler();\n node.getWorldPosition(position);\n euler.setFromRotationMatrix(node.matrixWorld);\n worldPose = {\n positionX: position.x,\n positionY: position.y,\n positionZ: position.z,\n rotationX: euler.x,\n rotationY: euler.y,\n rotationZ: euler.z,\n };\n }\n return { graphics, model, modelGroup, pose: worldPose || transform3d || graphics };\n }\n\n private flushPending() {\n if (!this.pending.size) return;\n for (const component of [...this.pending]) {\n if (!component.gameObject) {\n this.pending.delete(component);\n continue;\n }\n const body = this.tryCreate(component);\n if (body) {\n this.attach(component, body);\n this.pending.delete(component);\n }\n }\n }\n\n private rebuildStaleMeshColliders() {\n if (!this.world) return;\n const stale: Physics3D[] = [];\n for (const body of this.world.bodies) {\n const component = (body as PhysicsLinkedBody).component;\n if (!component?.gameObject) continue;\n const model = component.gameObject.getComponent('Model3D') as Model3DLike | undefined;\n const collider = resolveCollider(component.bodyParams, model);\n const key = meshColliderFingerprint(collider, model);\n if (!key || key === component.meshColliderKey) continue;\n stale.push(component);\n }\n for (const component of stale) {\n this.change(component);\n }\n }\n\n private initCollisionEvents() {\n this.world.addEventListener('beginContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionStart', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionStart', componentA.gameObject, componentB.gameObject);\n const pair = this.pairKey(bodyA, bodyB);\n this.contactPairs.set(pair, [bodyA.component, bodyB.component]);\n }\n });\n\n this.world.addEventListener('endContact', (event: any) => {\n const bodyA = event.bodyA as PhysicsLinkedBody;\n const bodyB = event.bodyB as PhysicsLinkedBody;\n const componentA: Component = bodyA.component;\n const componentB: Component = bodyB.component;\n if (componentA && componentB) {\n componentA.emit('collisionEnd', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionEnd', componentA.gameObject, componentB.gameObject);\n }\n this.contactPairs.delete(this.pairKey(bodyA, bodyB));\n });\n }\n\n private emitCollisionActive() {\n for (const [componentA, componentB] of this.contactPairs.values()) {\n if (!componentA?.gameObject || !componentB?.gameObject) continue;\n componentA.emit('collisionActive', componentB.gameObject, componentA.gameObject);\n componentB.emit('collisionActive', componentA.gameObject, componentB.gameObject);\n }\n }\n\n private pairKey(bodyA: CANNON.Body, bodyB: CANNON.Body) {\n return bodyA.id < bodyB.id ? `${bodyA.id}:${bodyB.id}` : `${bodyB.id}:${bodyA.id}`;\n }\n\n private clearContactsFor(component: Physics3D) {\n for (const [key, pair] of this.contactPairs) {\n if (pair[0] === component || pair[1] === component) {\n this.contactPairs.delete(key);\n }\n }\n }\n\n private tryAttachConstraint(component: Physics3DConstraint): boolean {\n const physicsA = component.gameObject?.getComponent('Physics3D') as Physics3D | undefined;\n const target = this.game.gameObjects.find((go) => go.name === component.target);\n const physicsB = target?.getComponent('Physics3D') as Physics3D | undefined;\n if (!physicsA?.body || !physicsB?.body || physicsA.body === physicsB.body) return false;\n const constraint = this.createConstraint(component, physicsA.body, physicsB.body);\n constraint.collideConnected = component.collideConnected;\n this.world.addConstraint(constraint);\n component.constraint = constraint;\n this.constraints.add(component);\n return true;\n }\n\n private createConstraint(\n component: Physics3DConstraint,\n bodyA: CANNON.Body,\n bodyB: CANNON.Body,\n ): CANNON.Constraint {\n const maxForce = component.maxForce;\n const pivotA = new CANNON.Vec3(component.pivotAX, component.pivotAY, component.pivotAZ);\n const pivotB = new CANNON.Vec3(component.pivotBX, component.pivotBY, component.pivotBZ);\n const axisA = new CANNON.Vec3(component.axisAX, component.axisAY, component.axisAZ);\n const axisB = new CANNON.Vec3(component.axisBX, component.axisBY, component.axisBZ);\n switch (component.type) {\n case 'point':\n return new CANNON.PointToPointConstraint(bodyA, pivotA, bodyB, pivotB, maxForce);\n case 'lock':\n return new CANNON.LockConstraint(bodyA, bodyB, { maxForce });\n case 'distance':\n return new CANNON.DistanceConstraint(bodyA, bodyB, component.distance, maxForce);\n case 'hinge':\n default: {\n const hinge = new CANNON.HingeConstraint(bodyA, bodyB, {\n pivotA,\n pivotB,\n axisA,\n axisB,\n maxForce,\n collideConnected: component.collideConnected,\n });\n if (component.motor) {\n hinge.enableMotor();\n hinge.setMotorSpeed(component.motorSpeed);\n }\n return hinge;\n }\n }\n }\n\n private detachConstraintsFor(physics: Physics3D) {\n for (const constraint of [...this.constraints]) {\n const physicsA = constraint.gameObject?.getComponent('Physics3D');\n const target = this.game.gameObjects.find((go) => go.name === constraint.target);\n const physicsB = target?.getComponent('Physics3D');\n if (physicsA === physics || physicsB === physics) {\n this.removeConstraint(constraint);\n this.pendingConstraints.add(constraint);\n }\n }\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DEngine from './Physics3DEngine';\nimport { Physics3D } from './Physics3D';\n\nexport interface Physics3DSystemParams {\n gravity?: {\n x: number\n y: number\n z: number\n }\n fixedTimeStep?: number\n maxSubSteps?: number\n allowSleep?: boolean\n solver?: {\n iterations?: number\n tolerance?: number\n }\n}\n\n@decorators.componentObserver({\n Physics3D: [{ prop: ['bodyParams'], deep: true }],\n GameObject: ['parent'],\n})\nexport default class Physics3DSystem extends System<Physics3DSystemParams> {\n static systemName = 'Physics3DSystem';\n public engine: Physics3DEngine;\n\n init(param?: Physics3DSystemParams) {\n this.engine = new Physics3DEngine(this.game, param);\n }\n\n awake() { }\n\n start() {\n this.engine.start();\n }\n\n update(e) {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n if (changed) {\n this.componentChanged(changed);\n }\n }\n this.engine.update(e);\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.component instanceof Physics3D) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.parent && !changed.gameObject.getComponent(Physics3D).body) {\n this.engine.add(changed.component);\n }\n break;\n }\n case OBSERVER_TYPE.CHANGE: {\n this.engine.change(changed.component);\n break;\n }\n case OBSERVER_TYPE.REMOVE: {\n this.engine.remove(changed.component);\n break;\n }\n }\n } else {\n // GameObject.parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if (changed.gameObject.parent) {\n let physics = changed.gameObject.getComponent(Physics3D);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics3D);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n\n lateUpdate() { }\n\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n\n onPause() {\n this.engine.stop();\n }\n\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","import { System, decorators, OBSERVER_TYPE } from '@combos-fun/engine';\nimport type { ComponentChanged } from '@combos-fun/engine';\nimport Physics3DSystem from './Physics3DSystem';\nimport { Physics3DConstraint } from './Physics3DConstraint';\n\n@decorators.componentObserver({\n Physics3DConstraint: [\n 'type', 'target',\n 'pivotAX', 'pivotAY', 'pivotAZ',\n 'pivotBX', 'pivotBY', 'pivotBZ',\n 'axisAX', 'axisAY', 'axisAZ',\n 'axisBX', 'axisBY', 'axisBZ',\n 'distance', 'maxForce', 'collideConnected',\n 'motor', 'motorSpeed',\n ],\n})\nexport default class Physics3DConstraintSystem extends System {\n static systemName = 'Physics3DConstraintSystem';\n name: string = 'Physics3DConstraintSystem';\n\n init() {\n const physics = this.game.getSystem(Physics3DSystem) as Physics3DSystem;\n if (!physics) {\n console.warn('Physics3DConstraintSystem requires Physics3DSystem');\n }\n }\n\n update() {\n const engine = this.engine();\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n engine?.flushConstraints();\n }\n\n componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Physics3DConstraint') return;\n const engine = this.engine();\n if (!engine) return;\n const component = changed.component as Physics3DConstraint;\n if (changed.type === OBSERVER_TYPE.REMOVE) {\n engine.removeConstraint(component);\n return;\n }\n engine.addConstraint(component);\n }\n\n private engine() {\n return (this.game.getSystem(Physics3DSystem) as Physics3DSystem | undefined)?.engine;\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport Physics3DConstraintSystem from './Physics3DConstraintSystem';\nimport Physics3DSystem from './Physics3DSystem';\n\nObject.assign(Physics3DConstraintSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.1\",\n});\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.1.1\",\n});\n","import { Component } from '@combos-fun/engine';\nimport type { Constraint } from 'cannon-es';\n\nexport type Physics3DConstraintKind = 'hinge' | 'point' | 'lock' | 'distance';\n\nexport interface Physics3DConstraintParams {\n type?: Physics3DConstraintKind | string;\n target?: string;\n pivotAX?: number;\n pivotAY?: number;\n pivotAZ?: number;\n pivotBX?: number;\n pivotBY?: number;\n pivotBZ?: number;\n axisAX?: number;\n axisAY?: number;\n axisAZ?: number;\n axisBX?: number;\n axisBY?: number;\n axisBZ?: number;\n distance?: number;\n maxForce?: number;\n collideConnected?: boolean;\n motor?: boolean;\n motorSpeed?: number;\n}\n\nexport class Physics3DConstraint extends Component<Physics3DConstraintParams> {\n static componentName: string = 'Physics3DConstraint';\n\n type: string = 'hinge';\n target: string = '';\n pivotAX: number = 0;\n pivotAY: number = 0;\n pivotAZ: number = 0;\n pivotBX: number = 0;\n pivotBY: number = 0;\n pivotBZ: number = 0;\n axisAX: number = 0;\n axisAY: number = 1;\n axisAZ: number = 0;\n axisBX: number = 0;\n axisBY: number = 1;\n axisBZ: number = 0;\n distance: number = 1;\n maxForce: number = 1e6;\n collideConnected: boolean = true;\n motor: boolean = false;\n motorSpeed: number = 0;\n constraint?: Constraint;\n\n init(obj?: Physics3DConstraintParams) {\n if (obj) Object.assign(this, obj);\n }\n}\n"],"names":["Physics3DSystem","Physics3DConstraintSystem"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@combos-fun/plugin-cannon",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "3D physics",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-cannon.esm.js",
@@ -40,8 +40,8 @@
40
40
  "dependencies": {
41
41
  "cannon-es": "^0.20.0",
42
42
  "three": "^0.172.0",
43
- "@combos-fun/plugin-renderer-3d": "0.1.0",
44
- "@combos-fun/engine": "0.1.0"
43
+ "@combos-fun/engine": "0.1.1",
44
+ "@combos-fun/plugin-renderer-3d": "0.1.1"
45
45
  },
46
46
  "scripts": {
47
47
  "build": "node ../../scripts/build-package.mjs"