@combos-fun/plugin-cannon 0.0.42 → 0.0.45

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.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-cannon.esm.js","sources":["../lib/Physics3D.ts","../lib/BodiesFactory.ts","../lib/Physics3DEngine.ts","../lib/Physics3DSystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport * as CANNON from 'cannon-es';\n\nexport enum Physics3DType {\n BOX = 'box',\n SPHERE = 'sphere',\n CYLINDER = 'cylinder',\n PLANE = 'plane',\n}\n\nexport interface Physics3DParams {\n type?: Physics3DType\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 stopRotation?: boolean\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\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\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 // Auto-sync to sibling 3D render 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 _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 { Physics3D } from './Physics3D';\n\nexport default class BodiesFactory {\n public create(component: Physics3D): CANNON.Body {\n const { bodyParams } = component;\n const type = bodyParams.type ?? Physics3DType.BOX;\n const mass = bodyParams.mass ?? 1;\n const options = bodyParams.bodyOptions ?? {};\n\n // Create shape\n let shape: CANNON.Shape;\n switch (type) {\n case Physics3DType.SPHERE: {\n const radius = bodyParams.radius ?? 0.5;\n shape = new CANNON.Sphere(radius);\n break;\n }\n case Physics3DType.CYLINDER: {\n const radiusTop = bodyParams.radiusTop ?? bodyParams.radius ?? 0.5;\n const radiusBottom = bodyParams.radiusBottom ?? bodyParams.radius ?? 0.5;\n const height = bodyParams.height ?? 1;\n const segments = bodyParams.segments ?? 16;\n shape = new CANNON.Cylinder(radiusTop, radiusBottom, height, segments);\n break;\n }\n case Physics3DType.PLANE: {\n shape = new CANNON.Plane();\n break;\n }\n case Physics3DType.BOX:\n default: {\n const w = bodyParams.width ?? 1;\n const h = bodyParams.height ?? 1;\n const d = bodyParams.depth ?? 1;\n shape = new CANNON.Box(new CANNON.Vec3(w / 2, h / 2, d / 2));\n break;\n }\n }\n\n // Create body\n const body = new CANNON.Body({\n mass: type === Physics3DType.PLANE ? 0 : mass,\n shape,\n });\n\n // Set position\n const pos = bodyParams.position;\n if (pos) {\n body.position.set(pos.x ?? 0, pos.y ?? 0, pos.z ?? 0);\n }\n\n // Set rotation (Euler to quaternion)\n const rot = bodyParams.rotation;\n if (rot) {\n body.quaternion.setFromEuler(rot.x ?? 0, rot.y ?? 0, rot.z ?? 0);\n }\n\n // Apply body options\n if (options.friction !== undefined) body.material = new CANNON.Material({ friction: options.friction, restitution: options.restitution ?? 0.3 });\n if (options.restitution !== undefined && !body.material) body.material = new CANNON.Material({ friction: 0.3, restitution: options.restitution });\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 return body;\n }\n}\n","import * as CANNON from 'cannon-es';\nimport BodiesFactory from './BodiesFactory';\nimport type { Component, Game } from '@combos-fun/engine';\nimport type { Physics3DSystemParams } from './Physics3DSystem';\nimport type { Physics3D } from './Physics3D';\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 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 // Set gravity\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 // Configure solver\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 const fixedTimeStep = this.options.fixedTimeStep ?? 1 / 60;\n const maxSubSteps = this.options.maxSubSteps ?? 3;\n const dt = (e.deltaTime || 16.67) / 1000;\n this.world.step(fixedTimeStep, dt, maxSubSteps);\n }\n\n public stop() {\n this.enabled = false;\n }\n\n public awake() {\n this.enabled = true;\n }\n\n public destroy() {\n if (this.world) {\n // Remove all bodies\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.bodiesFactory.create(component) as PhysicsLinkedBody;\n this.world.addBody(body);\n\n // Inject references into component\n component.body = body;\n (component as any).world = this.world;\n\n // Back-link for collision event lookup\n body.component = component;\n }\n\n public change(component: Physics3D) {\n // Remove old body, create and add new one\n if (component.body) {\n this.world.removeBody(component.body);\n }\n const newBody = this.bodiesFactory.create(component) as PhysicsLinkedBody;\n this.world.addBody(newBody);\n component.body = newBody;\n newBody.component = component;\n }\n\n public remove(component: Physics3D) {\n if (component.body) {\n this.world.removeBody(component.body);\n component.body = undefined;\n }\n }\n\n private initCollisionEvents() {\n // beginContact: emitted when two bodies start touching\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 }\n });\n\n // endContact: emitted when two bodies stop touching\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 });\n }\n}\n","import { System, decorators, OBSERVER_TYPE, Transform } 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 Transform: ['_parent'],\n})\nexport default class Physics3DSystem extends System<Physics3DSystemParams> {\n static systemName = 'Physics3DSystem';\n private 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.transform.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 break;\n }\n }\n } else {\n // Transform._parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).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","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport Physics3DSystem from './Physics3DSystem';\n\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.0.42\",\n});\n"],"names":["Physics3DSystem"],"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, Transform } 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 Transform: ['_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.transform.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 // Transform._parent change\n switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).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.0.45\",\n});\nObject.assign(Physics3DSystem, {\n packageName: \"@combos-fun/plugin-cannon\",\n packageVersion: \"0.0.45\",\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":";;;;;;;IAKY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACX,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EATW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;AA6EnB,MAAO,SAAU,SAAQ,SAA0B,CAAA;AAAzD,IAAA,WAAA,GAAA;;;QASS,IAAA,CAAA,SAAS,GAAW,CAAC;QACrB,IAAA,CAAA,SAAS,GAAW,CAAC;QACrB,IAAA,CAAA,SAAS,GAAW,CAAC;QACrB,IAAA,CAAA,SAAS,GAAW,CAAC;QACrB,IAAA,CAAA,SAAS,GAAW,CAAC;QACrB,IAAA,CAAA,SAAS,GAAW,CAAC;AAEpB,QAAA,IAAA,CAAA,MAAM,GAAgB,IAAI,MAAM,CAAC,IAAI,EAAE;AACvC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,OAAO,EAAE;AACzB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,UAAU,EAAE;AAC5B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,KAAK,EAAE;IAiFnC;aApGS,IAAA,CAAA,aAAa,GAAW,WAAX,CAAuB;AAqB3C,IAAA,IAAI,CAAC,MAAuB,EAAA;AAC1B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,EAAE;IAChC;IAEA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEhC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAGrC,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;gBACjC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC;YAEA,IAAI,CAAC,2BAA2B,EAAE;;YAGlC,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEA,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC;IACF;IAEQ,2BAA2B,GAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAiC;AACvF,QAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACpE,QAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,YAAY,EAAE,KAAK;QAC3C,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE;QAE5C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;AACxD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAChB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CACvB;YACD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;YAClD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU;AAC7C,QAAA,IAAI,CAAC,UAAU;YAAE;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAQ;YACjC,IAAI,IAAI,KAAK,IAAI;gBAAE;AACnB,YAAA,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;AACrE,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YACjC;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE;AACtG,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YACjC;QACF;IACF;;;AChKK,MAAM,aAAa,GAAkC;IAC1D,GAAG,EAAE,aAAa,CAAC,GAAG;IACtB,MAAM,EAAE,aAAa,CAAC,MAAM;IAC5B,QAAQ,EAAE,aAAa,CAAC,QAAQ;IAChC,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,IAAI,EAAE,aAAa,CAAC,IAAI;IACxB,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,QAAQ,EAAE,aAAa,CAAC,QAAQ;CACjC;AAEK,SAAU,aAAa,CAAC,IAAa,EAAA;AACzC,IAAA,IAAI,CAAC,IAAI;QAAE,OAAO,aAAa,CAAC,GAAG;AACnC,IAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAK,IAAsB;AACvD;AAEM,SAAU,SAAS,CAAC,MAAc,EAAE,IAAa,EAAA;AACrD,IAAA,OAAO,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG;AAC/C;AAEM,SAAU,cAAc,CAAC,MAA2B,EAAE,QAA6B,EAAA;IACvF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,GAAG;IACvD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;QAC9C,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,CAAC;QAC3C,MAAM;AACN,QAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;AACrC,QAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM;QAC3C,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;AAC9E,QAAA,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,CAAC;AACtD,QAAA,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,MAAM;KAC1C;AACH;AAEM,SAAU,cAAc,CAAC,IAAyB,EAAA;AACtD,IAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CACpB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EACvC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EACvC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CACxC;AACH;AAEM,SAAU,kBAAkB,CAAC,IAAyB,EAAA;AAC1D,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;AACjD,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;AACjD,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;AACjD,IAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS;AACpC,IAAA,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE;IACjC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,IAAA,OAAO,CAAC;AACV;AAEM,SAAU,mBAAmB,CAAC,IAA4B,EAAE,IAAe,EAAA;AAC/E,IAAA,MAAM,IAAI,GAAG,aAAa,CAAC,IAAc,CAAC;IAC1C,QAAQ,IAAI;QACV,KAAK,aAAa,CAAC,MAAM;AACvB,YAAA,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,KAAK,aAAa,CAAC,QAAQ;AACzB,YAAA,OAAO,CAAC;oBACN,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CACxB,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAC9D;AACF,iBAAA,CAAC;QACJ,KAAK,aAAa,CAAC,IAAI;AACrB,YAAA,OAAO,CAAC;AACN,oBAAA,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AAC3E,iBAAA,CAAC;QACJ,KAAK,aAAa,CAAC,KAAK;AACtB,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5F;YACA,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACxC,KAAK,aAAa,CAAC,KAAK;AACtB,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC;QAC1B,KAAK,aAAa,CAAC,OAAO;AACxB,YAAA,OAAO,aAAa,CAAC,IAAI,CAAC;QAC5B,KAAK,aAAa,CAAC,GAAG;AACtB,QAAA;AACE,YAAA,OAAO,CAAC;AACN,oBAAA,KAAK,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACxF,iBAAA,CAAC;;AAER;AAEA,SAAS,WAAW,CAAC,IAAe,EAAA;AAClC,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,MAAM,GAAkB,EAAE;AAChC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,YAAA,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,EAC7B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAC9B;AACF,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,aAAa,CAAC,IAAe,EAAA;AACpC,IAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtD,MAAM,MAAM,GAAkB,EAAE;AAChC,IAAA,IAAI,GAAG,GAAG,KAAK,EAAE;QACf,MAAM,CAAC,IAAI,CAAC;AACV,YAAA,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC;AACzE,SAAA,CAAC;IACJ;IACA,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,QAAA,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AACvC,KAAA,CAAC;IACF,MAAM,CAAC,IAAI,CAAC;QACV,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,QAAA,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AACxC,KAAA,CAAC;AACF,IAAA,OAAO,MAAM;AACf;;AClIA,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE;AACvB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE;AAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;AAC7B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;AAEvB,SAAU,gBAAgB,CAAI,IAAc,EAAE,EAAW,EAAA;AAC7D,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC5B,IAAA,IAAI;QACF,OAAO,EAAE,EAAE;IACb;YAAU;QACR,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;AACF;SAEgB,gBAAgB,CAC9B,IAAiB,EACjB,IAAc,EACd,QAA2B,EAAA;AAE3B,IAAA,OAAO,gBAAgB,CAAC,IAAI,EAAE,MAAK;AACjC,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,YAAA,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;QAC/B;AACA,QAAA,IAAI,QAAQ,KAAK,MAAM,EAAE;AACvB,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B;AACA,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAC5B,IAAA,CAAC,CAAC;AACJ;AAEA,SAAS,OAAO,CAAC,IAAiB,EAAE,IAAc,EAAA;AAChD,IAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,OAAO,EAAE;AAAE,QAAA,OAAO,KAAK;AAChC,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,IAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,IAAA,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,KAAK;AAC9D,IAAA,IAAI,CAAC,QAAQ,CACX,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAC5B,CAAC,EACF,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CACjD;AACD,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,UAAU,CAAC,IAAiB,EAAE,IAAc,EAAA;IACnD,IAAI,KAAK,GAAG,KAAK;AACjB,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,IAAI,GAAG,KAAa;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAsC;AAC5D,QAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,UAAU,EAAE,QAAQ;AAC/C,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,QAAQ,GAAa,EAAE;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;AACvE,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAChD;QACA,MAAM,OAAO,GAAa,EAAE;AAC5B,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB;QACF;aAAO;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;AACvC,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB;QACF;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,KAAK,GAAG,IAAI;AACd,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,OAAO,CAAC,IAAiB,EAAE,IAAc,EAAA;IAChD,MAAM,MAAM,GAAc,EAAE;AAC5B,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,KAAI;QACtB,MAAM,IAAI,GAAG,KAAa;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ;AACpD,QAAA,IAAI,CAAC,QAAQ;YAAE;QACf,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;AACzE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9F;AACF,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B;AACA,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC;AAC3C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ;QACxC,MAAM,QAAQ,GAAkB,EAAE;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;QACzC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,KAAI;YAC9C,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE;YAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,IAAI,QAAQ,IAAI,IAAI;AAAE,gBAAA,OAAO,QAAQ;AACrC,YAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM;AACzB,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACnB,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;QACD,MAAM,KAAK,GAAe,EAAE;AAC5B,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC5C,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,oBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,oBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5E,iBAAA,CAAC;YACJ;QACF;aAAO;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;gBACzC,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC1C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,iBAAA,CAAC;YACJ;QACF;QACA,QAAQ,CAAC,OAAO,EAAE;AAClB,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,YAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC5B;AACF;;AC9HM,SAAU,eAAe,CAC7B,MAA+B,EAC/B,KAAmB,EAAA;IAEnB,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ;AAC3C,IAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAAE,QAAA,OAAO,QAAQ;IAC7E,OAAO,KAAK,GAAG,MAAM,GAAG,QAAQ;AAClC;AAEM,SAAU,WAAW,CACzB,MAA+B,EAC/B,QAAyB,EAAA;IAEzB,IAAI,MAAM,CAAC,IAAI;AAAE,QAAA,OAAO,aAAa,CAAC,MAAM,CAAC,IAAc,CAAC;AAC5D,IAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,QAAQ,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;QAC/F,OAAO,aAAa,CAAC,QAAQ;IAC/B;IACA,IAAI,QAAQ,EAAE,KAAK;AAAE,QAAA,OAAO,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzD,OAAO,aAAa,CAAC,GAAG;AAC1B;AAEM,SAAU,uBAAuB,CACrC,QAA2B,EAC3B,KAAmB,EAAA;AAEnB,IAAA,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,SAAS;AACrD,IAAA,OAAO,GAAG,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,EAAE;AACxF;;AC7BA,SAAS,gBAAgB,CAAC,IAAiB,EAAE,OAAwC,EAAA;AACnF,IAAA,IAAI,CAAC,OAAO;QAAE;AACd,IAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;AAC1B,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;AACxC,SAAA,CAAC;IACJ;IACA,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;IAC1F;AACA,IAAA,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa;AACnF,IAAA,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc;AACtF,IAAA,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa;IACnF,IAAI,CAAC,oBAAoB,EAAE;AAC7B;AAEA,SAAS,SAAS,CAAC,IAAiB,EAAE,IAAY,EAAE,IAAe,EAAE,IAA0B,EAAA;IAC7F,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9C,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE;AACnE,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,SAAS;AAC7D,IAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;QACzB,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AACrE,QAAA,IAAI,SAAS;AAAE,YAAA,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC;cAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;eAC7B,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;IACzC;AACF;AAEc,MAAO,aAAa,CAAA;AACzB,IAAA,MAAM,CAAC,SAAoB,EAAE,OAAA,GAAgC,EAAE,EAAA;AACpE,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS;AAChC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;AACjC,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;QAC3B,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;AAEnD,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,UAAU;AAAE,gBAAA,OAAO,IAAI;AACpC,YAAA,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC;YAC/B,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,CAAC,EAAE;gBACxC,IAAI,GAAG,CAAC;YACV;AACA,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;AAC5E,YAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC/D,YAAA,IAAI,CAAC,EAAE;AAAE,gBAAA,OAAO,IAAI;AACpB,YAAA,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;YAC9C,SAAS,CAAC,eAAe,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpE,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE;YACtC,KAAK,EAAE,QAAQ,EAAE,KAAK;YACtB,MAAM,EAAE,QAAQ,EAAE,MAAM;YACxB,KAAK,EAAE,QAAQ,EAAE,KAAK;YACtB,MAAM,EAAE,QAAQ,EAAE,MAAM;YACxB,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YAC5B,IAAI,EAAE,QAAQ,EAAE,IAAI;YACpB,MAAM,EAAE,UAAU,CAAC,MAAM;AAC1B,SAAA,CAAC;AAEF,QAAA,MAAM,aAAa,GAAG,IAAI,KAAK,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;AAClE,QAAA,MAAM,IAAI,GAAG,aAAa,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;AAE5E,QAAA,IAAI,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE;YACnC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC;AACnF,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjB,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;YAC1C;iBAAO;AACL,gBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAK,IAA2B,CAAC,KAAK,IAAI,aAAa,CAAC,GAAG;AACrF,oBAAA,IAAI,aAAa,CAAC,QAAkB,CAAC,KAAK,aAAa,CAAC,QAAQ;wBAAE;oBAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;oBAC3C,SAAS,CAAC,IAAI,EAAE,QAAkB,EAAE,QAAQ,EAAE,IAAI,CAAC;gBACrD;YACF;QACF;aAAO;AACL,YAAA,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC7B;AAEA,QAAA,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC;AAC9C,QAAA,SAAS,CAAC,eAAe,GAAG,SAAS;AACrC,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CACrB,SAAoB,EACpB,IAAY,EACZ,QAAyB,EAAA;QAEzB,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;AACtC,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC,EAClC,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC,EAClC,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC,CACnC;AACD,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ;QACzC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC;QAC7C,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC;QAC7C,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,QAAQ,EAAE,SAAS,IAAI,CAAC;AAC7C,QAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAClB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC1C;AACA,QAAA,OAAO,IAAI;IACb;AACD;;ACxHa,MAAO,eAAe,CAAA;IAWlC,WAAA,CAAY,IAAU,EAAE,OAA8B,EAAA;AAN9C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAa;AAC9B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAuB;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAuB;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAkC;QACzD,IAAA,CAAA,OAAO,GAAY,KAAK;AAG7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE;IAC1C;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;AAChE,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAyB;YACnD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE;gBAChD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU;YACpD;YACA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;gBAC/C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS;YAClD;QACF;QAEA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE;AACpD,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK;AAExD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;AAEO,IAAA,MAAM,CAAC,CAAC,EAAA;QACb,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QAClC,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,yBAAyB,EAAE;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC;QACjD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,IAAI,IAAI;QACxC,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,WAAW,CAAC;QAC/C,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;IACrB;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;gBACzC,IAAI,UAAU,CAAC,UAAU;oBAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,UAAU,CAAC;AAC7E,gBAAA,UAAU,CAAC,UAAU,GAAG,SAAS;YACnC;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7C;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;IACF;AAEO,IAAA,GAAG,CAAC,SAAoB,EAAA;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC3B;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;IAC9B;AAEO,IAAA,MAAM,CAAC,SAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,SAAS,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,YAAA,SAAS,CAAC,IAAI,GAAG,SAAS;QAC5B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IACrB;AAEO,IAAA,MAAM,CAAC,SAAoB,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;AAC9B,QAAA,IAAI,SAAS,CAAC,IAAI,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,YAAA,SAAS,CAAC,IAAI,GAAG,SAAS;QAC5B;AACA,QAAA,SAAS,CAAC,eAAe,GAAG,SAAS;IACvC;AAEO,IAAA,aAAa,CAAC,SAA8B,EAAA;AACjD,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEO,IAAA,gBAAgB,CAAC,SAA8B,EAAA;AACpD,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;QACnD;AACA,QAAA,SAAS,CAAC,UAAU,GAAG,SAAS;IAClC;IAEO,gBAAgB,GAAA;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QACjB,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE;AACpD,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AACzB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;gBACzC;YACF;AACA,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;AACvC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C;QACF;IACF;AAEQ,IAAA,SAAS,CAAC,SAAoB,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAA6B;IAClF;IAEQ,MAAM,CAAC,SAAoB,EAAE,IAAuB,EAAA;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACxB,QAAA,SAAS,CAAC,IAAI,GAAG,IAAI;AACpB,QAAA,SAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AACrC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AAEQ,IAAA,UAAU,CAAC,SAAoB,EAAA;AACrC,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,UAAoC;QACjE,MAAM,QAAQ,GAAG,UAAU,EAAE,YAAY,CAAC,YAAY,CAA+B;QACrF,MAAM,KAAK,GAAG,UAAU,EAAE,YAAY,CAAC,SAAS,CAA4B;QAC5E,MAAM,WAAW,GAAG,UAAU,EAAE,YAAY,CAAC,aAAa,CAA+B;QACzF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAiC;QACtF,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS;QAC7F,MAAM,IAAI,GAAG,UAAU,GAAG,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS;AACxF,QAAA,MAAM,KAAK,GAAG,QAAQ,EAAE,YAAY,EAAE,KAAK;AAC3C,QAAA,IAAI,SAAqC;QACzC,IAAI,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AACnC,YAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE;AAC9B,YAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC/B,YAAA,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7C,YAAA,SAAS,GAAG;gBACV,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACrB,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACrB,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACrB,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,KAAK,CAAC,CAAC;aACnB;QACH;AACA,QAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,IAAI,WAAW,IAAI,QAAQ,EAAE;IACpF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE;QACxB,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC9B;YACF;YACA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YACtC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAChC;QACF;IACF;IAEQ,yBAAyB,GAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QACjB,MAAM,KAAK,GAAgB,EAAE;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACpC,YAAA,MAAM,SAAS,GAAI,IAA0B,CAAC,SAAS;YACvD,IAAI,CAAC,SAAS,EAAE,UAAU;gBAAE;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAA4B;YACrF,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;YAC7D,MAAM,GAAG,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,SAAS,CAAC,eAAe;gBAAE;AAC/C,YAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QACvB;AACA,QAAA,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACxB;IACF;IAEQ,mBAAmB,GAAA;QACzB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,KAAU,KAAI;AACzD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0B;AAC9C,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0B;AAC9C,YAAA,MAAM,UAAU,GAAc,KAAK,CAAC,SAAS;AAC7C,YAAA,MAAM,UAAU,GAAc,KAAK,CAAC,SAAS;AAC7C,YAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,gBAAA,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;AAC/E,gBAAA,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;gBAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AACvC,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YACjE;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC,KAAU,KAAI;AACvD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0B;AAC9C,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0B;AAC9C,YAAA,MAAM,UAAU,GAAc,KAAK,CAAC,SAAS;AAC7C,YAAA,MAAM,UAAU,GAAc,KAAK,CAAC,SAAS;AAC7C,YAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,gBAAA,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;AAC7E,gBAAA,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;YAC/E;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtD,QAAA,CAAC,CAAC;IACJ;IAEQ,mBAAmB,GAAA;AACzB,QAAA,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE;YACjE,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,CAAC,UAAU,EAAE,UAAU;gBAAE;AACxD,YAAA,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;AAChF,YAAA,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;QAClF;IACF;IAEQ,OAAO,CAAC,KAAkB,EAAE,KAAkB,EAAA;AACpD,QAAA,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,KAAK,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,EAAE,EAAE;IACpF;AAEQ,IAAA,gBAAgB,CAAC,SAAoB,EAAA;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3C,YAAA,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAClD,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B;QACF;IACF;AAEQ,IAAA,mBAAmB,CAAC,SAA8B,EAAA;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,WAAW,CAA0B;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC;QAC/E,MAAM,QAAQ,GAAG,MAAM,EAAE,YAAY,CAAC,WAAW,CAA0B;AAC3E,QAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;AACvF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AACjF,QAAA,UAAU,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB;AACxD,QAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;AACpC,QAAA,SAAS,CAAC,UAAU,GAAG,UAAU;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/B,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,gBAAgB,CACtB,SAA8B,EAC9B,KAAkB,EAClB,KAAkB,EAAA;AAElB,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ;AACnC,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;AACvF,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;AACvF,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;AACnF,QAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;AACnF,QAAA,QAAQ,SAAS,CAAC,IAAI;AACpB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;AAClF,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC9D,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,IAAI,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAClF,YAAA,KAAK,OAAO;YACZ,SAAS;gBACP,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE;oBACrD,MAAM;oBACN,MAAM;oBACN,KAAK;oBACL,KAAK;oBACL,QAAQ;oBACR,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;AAC7C,iBAAA,CAAC;AACF,gBAAA,IAAI,SAAS,CAAC,KAAK,EAAE;oBACnB,KAAK,CAAC,WAAW,EAAE;AACnB,oBAAA,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC3C;AACA,gBAAA,OAAO,KAAK;YACd;;IAEJ;AAEQ,IAAA,oBAAoB,CAAC,OAAkB,EAAA;QAC7C,KAAK,MAAM,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,WAAW,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC;YAChF,MAAM,QAAQ,GAAG,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC;YAClD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE;AAChD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACjC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC;QACF;IACF;AACD;;ACnTc,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,MAA6B,CAAA;aACjE,IAAA,CAAA,UAAU,GAAG,iBAAH,CAAqB;AAGtC,IAAA,IAAI,CAAC,KAA6B,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACrD;AAEA,IAAA,KAAK,KAAK;IAEV,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;AAEA,IAAA,MAAM,CAAC,CAAC,EAAA;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9C,QAAA,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE;YAC7B,IAAI,OAAO,EAAE;AACX,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAChC;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvB;AAEA,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AACxC,QAAA,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,EAAE;AAC1C,YAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAK,aAAa,CAAC,GAAG,EAAE;oBACtB,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;wBAC3F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;oBACpC;oBACA;gBACF;AACA,gBAAA,KAAK,aAAa,CAAC,MAAM,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrC;gBACF;AACA,gBAAA,KAAK,aAAa,CAAC,MAAM,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrC;gBACF;;QAEJ;aAAO;;AAEL,YAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAK,aAAa,CAAC,MAAM,EAAE;AACzB,oBAAA,IAAK,OAAO,CAAC,SAAuB,CAAC,MAAM,EAAE;wBAC3C,IAAI,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;AACxD,wBAAA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAC5B,4BAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;wBAC1B;oBACF;yBAAO;wBACL,IAAI,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC;wBACxD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBACxC;gBACF;;QAEJ;IACF;AAEA,IAAA,UAAU,KAAK;IAEf,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACrB;IACF;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IACxB;;AA1EmB,eAAe,GAAA,UAAA,CAAA;IAJnC,UAAU,CAAC,iBAAiB,CAAC;AAC5B,QAAA,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjD,SAAS,EAAE,CAAC,SAAS,CAAC;KACvB;AACoB,CAAA,EAAA,eAAe,CA2EnC;wBA3EoB,eAAe;;ACRrB,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,MAAM,CAAA;AAA9C,IAAA,WAAA,GAAA;;QAEb,IAAA,CAAA,IAAI,GAAW,2BAA2B;IAiC5C;aAlCS,IAAA,CAAA,UAAU,GAAG,2BAAH,CAA+B;IAGhD,IAAI,GAAA;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAACA,iBAAe,CAAoB;QACvE,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC;QACpE;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC9C,QAAA,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAChC;QACA,MAAM,EAAE,gBAAgB,EAAE;IAC5B;AAEA,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AACxC,QAAA,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAqB;YAAE;AACrD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM;YAAE;AACb,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAgC;QAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM,EAAE;AACzC,YAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAClC;QACF;AACA,QAAA,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;IACjC;IAEQ,MAAM,GAAA;QACZ,OAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAACA,iBAAe,CAAiC,EAAE,MAAM;IACtF;;AAlCmB,yBAAyB,GAAA,UAAA,CAAA;IAX7C,UAAU,CAAC,iBAAiB,CAAC;AAC5B,QAAA,mBAAmB,EAAE;AACnB,YAAA,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,SAAS,EAAE,SAAS;YAC/B,SAAS,EAAE,SAAS,EAAE,SAAS;YAC/B,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YAC5B,QAAQ,EAAE,QAAQ,EAAE,QAAQ;YAC5B,UAAU,EAAE,UAAU,EAAE,kBAAkB;AAC1C,YAAA,OAAO,EAAE,YAAY;AACtB,SAAA;KACF;AACoB,CAAA,EAAA,yBAAyB,CAmC7C;kCAnCoB,yBAAyB;;AChB9C;AAKA,MAAM,CAAC,MAAM,CAACC,2BAAyB,EAAE;AACvC,IAAA,WAAW,EAAE,2BAA2B;AACxC,IAAA,cAAc,EAAE,QAAQ;AACzB,CAAA,CAAC;AACF,MAAM,CAAC,MAAM,CAACD,iBAAe,EAAE;AAC7B,IAAA,WAAW,EAAE,2BAA2B;AACxC,IAAA,cAAc,EAAE,QAAQ;AACzB,CAAA,CAAC;;ACeI,MAAO,mBAAoB,SAAQ,SAAoC,CAAA;AAA7E,IAAA,WAAA,GAAA;;QAGE,IAAA,CAAA,IAAI,GAAW,OAAO;QACtB,IAAA,CAAA,MAAM,GAAW,EAAE;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,OAAO,GAAW,CAAC;QACnB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,MAAM,GAAW,CAAC;QAClB,IAAA,CAAA,QAAQ,GAAW,CAAC;QACpB,IAAA,CAAA,QAAQ,GAAW,GAAG;QACtB,IAAA,CAAA,gBAAgB,GAAY,IAAI;QAChC,IAAA,CAAA,KAAK,GAAY,KAAK;QACtB,IAAA,CAAA,UAAU,GAAW,CAAC;IAMxB;aA1BS,IAAA,CAAA,aAAa,GAAW,qBAAX,CAAiC;AAuBrD,IAAA,IAAI,CAAC,GAA+B,EAAA;AAClC,QAAA,IAAI,GAAG;AAAE,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;IACnC;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@combos-fun/plugin-cannon",
3
- "version": "0.0.42",
3
+ "version": "0.0.45",
4
4
  "description": "3D physics",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-cannon.esm.js",
@@ -32,12 +32,16 @@
32
32
  "physics",
33
33
  "collision",
34
34
  "rigid-body",
35
- "gravity"
35
+ "gravity",
36
+ "constraint",
37
+ "hinge"
36
38
  ],
37
39
  "author": "sun668 <q947692259@gmail.com>",
38
40
  "dependencies": {
39
41
  "cannon-es": "^0.20.0",
40
- "@combos-fun/engine": "0.0.42"
42
+ "three": "^0.172.0",
43
+ "@combos-fun/engine": "0.0.45",
44
+ "@combos-fun/plugin-renderer-3d": "0.0.45"
41
45
  },
42
46
  "scripts": {
43
47
  "build": "node ../../scripts/build-package.mjs"