@combos-fun/plugin-matterjs 0.0.27 → 0.0.29

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.
@@ -282,9 +282,7 @@ class PhysicsEngine {
282
282
  let PhysicsSystem$1 = class PhysicsSystem extends engine.System {
283
283
  static { this.systemName = 'PhysicsSystem'; }
284
284
  /**
285
- * System 初始化用,可以配置参数,游戏未开始
286
- *
287
- * System init, set params, game is not begain
285
+ * System init: configure params before the game starts.
288
286
  * @param param init params
289
287
  */
290
288
  init(param) {
@@ -292,23 +290,18 @@ let PhysicsSystem$1 = class PhysicsSystem extends engine.System {
292
290
  this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1'));
293
291
  }
294
292
  /**
295
- * System 被安装的时候,如果游戏还没有开始,那么会在游戏开始的时候调用。用于前置操作,初始化数据等。
296
- *
297
- * Called while the System installed, if game is not begain, it will be called while begain. use to pre operation, init data.
293
+ * Called when the System is installed; if the game has not started, it runs when the
294
+ * game starts. Use it for setup work such as initializing data.
298
295
  */
299
296
  awake() { }
300
297
  /**
301
- * System 被安装后,所有的 awake 执行完后
302
- *
303
- * Called while the System installed, after all of systems' awake been called
298
+ * Called after the System is installed and all systems' `awake` have run.
304
299
  */
305
300
  start() {
306
301
  this.engine.start();
307
302
  }
308
303
  /**
309
- * 每一次游戏循环调用,可以做一些游戏操作,控制改变一些组件属性。
310
- *
311
- * Called by every loop, can do some operation, change some property or other component property.
304
+ * Called on every game loop; can perform operations and change component properties.
312
305
  */
313
306
  update(e) {
314
307
  const changes = this.componentObserver.clear();
@@ -355,15 +348,11 @@ let PhysicsSystem$1 = class PhysicsSystem extends engine.System {
355
348
  }
356
349
  }
357
350
  /**
358
- * update?() 类似,在所有System和组件的 update?() 执行以后调用。
359
- *
360
- * Like update, called all of gameobject update.
351
+ * Like `update`, but called after every System's and component's `update` has run.
361
352
  */
362
353
  lateUpdate() { }
363
354
  /**
364
- * 游戏开始和游戏暂停后开始播放的时候调用。
365
- *
366
- * Called while the game to play when game pause.
355
+ * Called when the game starts or resumes playing after a pause.
367
356
  */
368
357
  onResume() {
369
358
  if (!this.engine.enabled) {
@@ -371,16 +360,13 @@ let PhysicsSystem$1 = class PhysicsSystem extends engine.System {
371
360
  }
372
361
  }
373
362
  /**
374
- * 游戏暂停的时候调用。
375
- *
376
- * Called while the game paused.
363
+ * Called when the game is paused.
377
364
  */
378
365
  onPause() {
379
366
  this.engine.stop();
380
367
  }
381
368
  /**
382
- * System 被销毁的时候调用。
383
- * Called while the system be destroyed.
369
+ * Called when the system is destroyed.
384
370
  */
385
371
  onDestroy() {
386
372
  this.engine?.destroy();
@@ -397,7 +383,7 @@ var PhysicsSystem = PhysicsSystem$1;
397
383
  /** Auto-generated by scripts/build-package.mjs — do not edit. */
398
384
  Object.assign(PhysicsSystem, {
399
385
  packageName: "@combos-fun/plugin-matterjs",
400
- packageVersion: "0.0.27",
386
+ packageVersion: "0.0.28",
401
387
  });
402
388
 
403
389
  exports.Physics = Physics;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-matterjs.cjs.js","sources":["../lib/Physics.ts","../lib/BodiesFactory.ts","../lib/MatterPixiDebugRenderer.ts","../lib/PhysicsEngine.ts","../lib/PhysicsSystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport Matter from 'matter-js';\nexport enum PhysicsType {\n RECTANGLE = 'rectangle',\n CIRCLE = 'circle',\n POLYGON = 'polygon',\n}\nexport interface PhysicsParams {\n type?: PhysicsType\n bodyOptions?: {\n isStatic?: boolean,\n restitution?: number,\n density?: number,\n [propName: string]: any,\n },\n position?: {\n x?: number\n y?: number\n }\n sides?: number\n radius?: number\n stopRotation?: boolean\n}\n\nexport class Physics extends Component<PhysicsParams> {\n static componentName: string = 'Physics';\n public bodyParams: PhysicsParams;\n public body: Matter.Body;\n private PhysicsEngine: Matter.Engine;\n\n init(params: PhysicsParams) {\n this.bodyParams = params;\n }\n\n update() {\n if (this.body && this.gameObject) {\n this.gameObject.transform.anchor.x = 0;\n this.gameObject.transform.anchor.y = 0;\n this.gameObject.transform.position.x = this.body.position.x;\n this.gameObject.transform.position.y = this.body.position.y;\n if (!this.bodyParams.stopRotation) {\n this.gameObject.transform.rotation = this.body.angle;\n }\n }\n }\n onDestroy() {\n Matter.World.remove(this.PhysicsEngine.world, this.body, true);\n }\n}\n","import Matter from 'matter-js';\nimport { PhysicsType, Physics } from './Physics';\nimport { GameObject } from '@combos-fun/engine';\ndeclare interface BodyOptions {\n chamfer?: number; // 斜切角\n angle?: number; // 旋转角\n isStatic?: boolean;\n density?: number; // 密度;\n restitution?: number; // 回弹系数\n velocity?: number; // 速率\n speed?: number; // 速度\n motion?: number; // 势能\n mass?: number;\n}\n\nexport interface RectangleParams {\n x: number;\n y: number;\n width: number;\n height: number;\n options: BodyOptions;\n}\n\nexport interface Verctor {\n x: number;\n y: number;\n}\nexport default class BodiesFactory {\n private Bodies: typeof Matter.Bodies;\n constructor() {\n this.Bodies = Matter.Bodies;\n }\n public create(component: Physics): Matter.Body {\n let body: Matter.Body = null;\n const { gameObject, bodyParams } = component;\n const coordinate = this.getCoordinate(gameObject);\n const x = bodyParams.position ? bodyParams.position.x : coordinate.x;\n const y = bodyParams.position ? bodyParams.position.y : coordinate.y;\n const halfW =\n (gameObject.transform.size.width * gameObject.transform.scale.x) / 2;\n const halfH =\n (gameObject.transform.size.height * gameObject.transform.scale.y) / 2;\n /** Matter.circle approximates with a polygon; NaN/0 radius breaks vertices. */\n const defaultRadius = Math.max(1, Math.min(halfW, halfH));\n switch (bodyParams.type) {\n case PhysicsType.RECTANGLE: {\n const width = gameObject.transform.size.width * gameObject.transform.scale.x;\n const height = gameObject.transform.size.height * gameObject.transform.scale.y;\n body = this.Bodies.rectangle(x, y, width, height, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.CIRCLE: {\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.circle(x, y, radius, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.POLYGON: {\n const sides = Math.max(3, bodyParams.sides ?? 6);\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.polygon(x, y, sides, radius, bodyParams.bodyOptions);\n break;\n }\n }\n return body;\n }\n\n private getCoordinate(gameObject: GameObject): Verctor {\n const x = gameObject.transform.position.x + gameObject.transform.anchor.x * gameObject.parent.transform.size.width;\n const y = gameObject.transform.position.y + gameObject.transform.anchor.y * gameObject.parent.transform.size.height;\n return {\n x,\n y,\n };\n }\n}\n","import Matter from 'matter-js';\nimport { Application, Graphics } from 'pixi.js';\n\nexport interface MatterPixiDebugOptions {\n engine: Matter.Engine;\n canvas: HTMLCanvasElement;\n width: number;\n height: number;\n resolution?: number;\n}\n\n/** WebGL wireframe overlay for Matter bodies in test mode. */\nexport class MatterPixiDebugRenderer {\n private readonly engine: Matter.Engine;\n private readonly opts: MatterPixiDebugOptions;\n private app: Application | null = null;\n private graphics: Graphics | null = null;\n private readonly onAfterUpdate: () => void;\n\n constructor(opts: MatterPixiDebugOptions) {\n this.opts = opts;\n this.engine = opts.engine;\n this.onAfterUpdate = () => this.redraw();\n }\n\n async init(): Promise<void> {\n const { canvas, width, height, resolution = 1 } = this.opts;\n const app = new Application();\n await app.init({\n canvas,\n width,\n height,\n resolution,\n autoDensity: true,\n antialias: true,\n backgroundAlpha: 0.12,\n preference: 'webgl',\n });\n this.app = app;\n this.graphics = new Graphics();\n app.stage.addChild(this.graphics);\n Matter.Events.on(this.engine, 'afterUpdate', this.onAfterUpdate);\n }\n\n private redraw(): void {\n const g = this.graphics;\n if (!g) {\n return;\n }\n g.clear();\n const bodies = Matter.Composite.allBodies(this.engine.world);\n for (let b = 0; b < bodies.length; b++) {\n const body = bodies[b];\n if (body.render?.visible === false) {\n continue;\n }\n const verts = body.vertices;\n if (!verts?.length) {\n continue;\n }\n const v0 = verts[0];\n g.moveTo(v0.x, v0.y);\n for (let i = 1; i < verts.length; i++) {\n g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n g.stroke({ width: 1, color: 0x00e676, alpha: 0.9 });\n }\n }\n\n destroy(): void {\n Matter.Events.off(this.engine, 'afterUpdate', this.onAfterUpdate);\n if (this.app) {\n this.app.destroy(true, { children: true, texture: true });\n this.app = null;\n }\n this.graphics = null;\n }\n}\n","import Matter from 'matter-js';\n\nimport BodiesFactory from './BodiesFactory';\nimport { Component, Game } from '@combos-fun/engine';\nimport type { PhysicsSystemParams } from './PhysicsSystem';\nimport type { Physics } from './Physics';\nimport { MatterPixiDebugRenderer } from './MatterPixiDebugRenderer';\n\nexport interface PhysicsLinkedBody extends Matter.Body {\n component: Physics;\n}\n\nexport default class PhysicsEngine {\n private Engine: typeof Matter.Engine;\n private World: typeof Matter.World;\n private engine: Matter.Engine;\n private bodiesFactory: BodiesFactory;\n private collisionEvents: string[];\n private bodyEvents: string[];\n private options: PhysicsSystemParams;\n private game: Game;\n private Runner: typeof Matter.Runner;\n private Constraint: typeof Matter.Constraint;\n private mouseConstraint: Matter.MouseConstraint;\n private runner: Matter.Runner;\n private debugRenderer: MatterPixiDebugRenderer | null = null;\n public enabled: boolean = false;\n constructor(game: Game, options: PhysicsSystemParams) {\n this.Engine = Matter.Engine;\n this.World = Matter.World;\n this.bodiesFactory = new BodiesFactory();\n this.Runner = Matter.Runner;\n this.Constraint = Matter.Constraint;\n this.game = game;\n\n this.collisionEvents = ['collisionStart', 'collisionActive', 'collisionEnd'];\n this.bodyEvents = ['tick', 'beforeUpdate', 'afterUpdate', 'beforeRender', 'afterRender', 'afterTick'];\n this.options = options;\n this.runner = this.Runner.create({\n delta: 1000 / (this.options.fps || 60),\n frameDeltaSmoothing: (this.options.deltaSampleSize ?? 1) > 1,\n });\n }\n\n public start() {\n this.engine = this.Engine.create();\n const world = this.World.create(this.options.world as Matter.IWorldDefinition);\n this.engine.world = world;\n if (this.options.isTest) {\n const ownCanvas = !this.options.canvas;\n const canvas = this.options.canvas ?? document.createElement('canvas');\n if (ownCanvas && this.options.element) {\n this.options.element.appendChild(canvas);\n }\n const resolution = this.options.resolution || 1;\n this.debugRenderer = new MatterPixiDebugRenderer({\n engine: this.engine,\n canvas,\n width: this.game.canvas.width / resolution,\n height: this.game.canvas.height / resolution,\n resolution,\n });\n void this.debugRenderer.init().catch(err => {\n console.error('[plugin-matterjs] MatterPixiDebugRenderer init failed', err);\n });\n this.Runner.run(this.runner, this.engine);\n }\n this.enabled = true;\n this.initMouse();\n this.initCollisionEvents();\n this.initBodyEvents();\n }\n\n public update(e) {\n if (!this.engine) {\n return;\n }\n if (!this.options.isTest) {\n this.Runner.tick(this.runner, this.engine, e.currentTime);\n }\n }\n\n public stop() {\n this.enabled = false;\n this.runner.enabled = false;\n }\n\n public destroy() {\n this.debugRenderer?.destroy();\n this.debugRenderer = null;\n if (this.engine) {\n Matter.Runner.stop(this.runner);\n Matter.Engine.clear(this.engine);\n }\n }\n\n public awake() {\n this.enabled = true;\n this.runner.enabled = true;\n }\n public add(component) {\n const body = this.createBodies(component);\n this.World.add(this.engine.world, [body]);\n component.body = body;\n component.Body = Matter.Body;\n component.PhysicsEngine = this.engine;\n component.Constraint = this.Constraint;\n component.mouseConstraint = this.mouseConstraint;\n component.World = this.World;\n body.component = component;\n }\n\n public change(component: Physics) {\n const newBody = this.createBodies(component);\n this.World.remove(this.engine.world, component.body, true);\n this.World.add(this.engine.world, [newBody]);\n component.body = newBody;\n }\n public remove(component: Physics) {\n this.World.remove(this.engine.world, component.body, true);\n component.body = undefined;\n }\n\n private createBodies(params): any {\n const body = this.bodiesFactory.create(params) as PhysicsLinkedBody;\n return body;\n }\n\n private initCollisionEvents() {\n (this.collisionEvents as Array<'collisionStart' | 'collisionActive' | 'collisionEnd'>).forEach(eventName => {\n Matter.Events.on(this.engine, eventName, (event: Matter.IEventCollision<Matter.Engine>) => {\n const pairs = event.pairs ?? [];\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n const { bodyA, bodyB } = pair;\n const componentA: Component = (bodyA as PhysicsLinkedBody).component;\n const componentB: Component = (bodyB as PhysicsLinkedBody).component;\n componentA.emit(eventName, componentB.gameObject, componentA.gameObject);\n componentB.emit(eventName, componentA.gameObject, componentB.gameObject);\n }\n });\n });\n }\n\n private initMouse() {\n if (this.options.mouse && this.options.mouse.open) {\n const mouse = Matter.Mouse.create(this.game.canvas);\n let options = this.options.mouse.constraint ? {\n mouse,\n constraint: this.options.mouse.constraint\n } : {\n mouse\n };\n this.mouseConstraint = Matter.MouseConstraint.create(this.engine, options);\n this.World.add(this.engine.world, this.mouseConstraint);\n }\n }\n\n private initBodyEvents() {\n this.bodyEvents.forEach(eventName => {\n Matter.Events.on(this.engine, eventName, e => {\n const bodies = e.source.world.bodies;\n bodies.forEach(body => {\n const linked = body as PhysicsLinkedBody;\n linked.component?.emit(eventName, body, linked.component.gameObject);\n });\n });\n });\n }\n}\n","import { System, decorators, OBSERVER_TYPE, Transform } from '@combos-fun/engine';\nimport type { ComponentChanged } from \"@combos-fun/engine\";\nimport PhysicsEngine from './PhysicsEngine';\nimport { Physics } from './Physics';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends Object ? DeepPartial<T[P]> : T[P];\n}\n\nexport interface PhysicsSystemParams {\n resolution?: number\n fps?: number\n isTest?: boolean\n element?: HTMLElement\n canvas?: HTMLCanvasElement\n deltaSampleSize?: number\n mouse?: {\n open: boolean\n constraint?: Matter.Constraint\n }\n world: DeepPartial<Matter.IWorldDefinition>\n}\n\n@decorators.componentObserver({\n Physics: [{ prop: ['bodyParams'], deep: true }],\n Transform: ['_parent'],\n})\nexport default class PhysicsSystem extends System<PhysicsSystemParams> {\n static systemName = 'PhysicsSystem';\n private engine: PhysicsEngine;\n\n /**\n * System 初始化用,可以配置参数,游戏未开始\n *\n * System init, set params, game is not begain\n * @param param init params\n */\n init(param?: PhysicsSystemParams) {\n this.engine = new PhysicsEngine(this.game, param);\n this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1') as string);\n }\n /**\n * System 被安装的时候,如果游戏还没有开始,那么会在游戏开始的时候调用。用于前置操作,初始化数据等。\n *\n * Called while the System installed, if game is not begain, it will be called while begain. use to pre operation, init data.\n */\n awake() { }\n\n /**\n * System 被安装后,所有的 awake 执行完后\n *\n * Called while the System installed, after all of systems' awake been called\n */\n start() {\n this.engine.start();\n }\n /**\n * 每一次游戏循环调用,可以做一些游戏操作,控制改变一些组件属性。\n *\n * Called by every loop, can do some operation, change some property or other component property.\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 Physics) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.transform.parent && !changed.gameObject.getComponent(Physics).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 switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).parent) {\n let physics = changed.gameObject.getComponent(Physics);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n /**\n * 和 update?() 类似,在所有System和组件的 update?() 执行以后调用。\n *\n * Like update, called all of gameobject update.\n */\n lateUpdate() { }\n /**\n * 游戏开始和游戏暂停后开始播放的时候调用。\n *\n * Called while the game to play when game pause.\n */\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n /**\n * 游戏暂停的时候调用。\n *\n * Called while the game paused.\n */\n onPause() {\n this.engine.stop();\n }\n /**\n * System 被销毁的时候调用。\n * Called while the system be destroyed.\n */\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport PhysicsSystem from './PhysicsSystem';\n\nObject.assign(PhysicsSystem, {\n packageName: \"@combos-fun/plugin-matterjs\",\n packageVersion: \"0.0.27\",\n});\n"],"names":["PhysicsType","Component","Matter","Application","Graphics","PhysicsSystem","System","OBSERVER_TYPE","__decorate","decorators"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-matterjs.cjs.js","sources":["../lib/Physics.ts","../lib/BodiesFactory.ts","../lib/MatterPixiDebugRenderer.ts","../lib/PhysicsEngine.ts","../lib/PhysicsSystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport Matter from 'matter-js';\nexport enum PhysicsType {\n RECTANGLE = 'rectangle',\n CIRCLE = 'circle',\n POLYGON = 'polygon',\n}\nexport interface PhysicsParams {\n type?: PhysicsType\n bodyOptions?: {\n isStatic?: boolean,\n restitution?: number,\n density?: number,\n [propName: string]: any,\n },\n position?: {\n x?: number\n y?: number\n }\n sides?: number\n radius?: number\n stopRotation?: boolean\n}\n\nexport class Physics extends Component<PhysicsParams> {\n static componentName: string = 'Physics';\n public bodyParams: PhysicsParams;\n public body: Matter.Body;\n private PhysicsEngine: Matter.Engine;\n\n init(params: PhysicsParams) {\n this.bodyParams = params;\n }\n\n update() {\n if (this.body && this.gameObject) {\n this.gameObject.transform.anchor.x = 0;\n this.gameObject.transform.anchor.y = 0;\n this.gameObject.transform.position.x = this.body.position.x;\n this.gameObject.transform.position.y = this.body.position.y;\n if (!this.bodyParams.stopRotation) {\n this.gameObject.transform.rotation = this.body.angle;\n }\n }\n }\n onDestroy() {\n Matter.World.remove(this.PhysicsEngine.world, this.body, true);\n }\n}\n","import Matter from 'matter-js';\nimport { PhysicsType, Physics } from './Physics';\nimport { GameObject } from '@combos-fun/engine';\ndeclare interface BodyOptions {\n chamfer?: number; // chamfer (bevel) size\n angle?: number; // rotation angle\n isStatic?: boolean;\n density?: number; // density\n restitution?: number; // restitution (bounciness)\n velocity?: number; // velocity\n speed?: number; // speed\n motion?: number; // motion (kinetic energy)\n mass?: number;\n}\n\nexport interface RectangleParams {\n x: number;\n y: number;\n width: number;\n height: number;\n options: BodyOptions;\n}\n\nexport interface Verctor {\n x: number;\n y: number;\n}\nexport default class BodiesFactory {\n private Bodies: typeof Matter.Bodies;\n constructor() {\n this.Bodies = Matter.Bodies;\n }\n public create(component: Physics): Matter.Body {\n let body: Matter.Body = null;\n const { gameObject, bodyParams } = component;\n const coordinate = this.getCoordinate(gameObject);\n const x = bodyParams.position ? bodyParams.position.x : coordinate.x;\n const y = bodyParams.position ? bodyParams.position.y : coordinate.y;\n const halfW =\n (gameObject.transform.size.width * gameObject.transform.scale.x) / 2;\n const halfH =\n (gameObject.transform.size.height * gameObject.transform.scale.y) / 2;\n /** Matter.circle approximates with a polygon; NaN/0 radius breaks vertices. */\n const defaultRadius = Math.max(1, Math.min(halfW, halfH));\n switch (bodyParams.type) {\n case PhysicsType.RECTANGLE: {\n const width = gameObject.transform.size.width * gameObject.transform.scale.x;\n const height = gameObject.transform.size.height * gameObject.transform.scale.y;\n body = this.Bodies.rectangle(x, y, width, height, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.CIRCLE: {\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.circle(x, y, radius, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.POLYGON: {\n const sides = Math.max(3, bodyParams.sides ?? 6);\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.polygon(x, y, sides, radius, bodyParams.bodyOptions);\n break;\n }\n }\n return body;\n }\n\n private getCoordinate(gameObject: GameObject): Verctor {\n const x = gameObject.transform.position.x + gameObject.transform.anchor.x * gameObject.parent.transform.size.width;\n const y = gameObject.transform.position.y + gameObject.transform.anchor.y * gameObject.parent.transform.size.height;\n return {\n x,\n y,\n };\n }\n}\n","import Matter from 'matter-js';\nimport { Application, Graphics } from 'pixi.js';\n\nexport interface MatterPixiDebugOptions {\n engine: Matter.Engine;\n canvas: HTMLCanvasElement;\n width: number;\n height: number;\n resolution?: number;\n}\n\n/** WebGL wireframe overlay for Matter bodies in test mode. */\nexport class MatterPixiDebugRenderer {\n private readonly engine: Matter.Engine;\n private readonly opts: MatterPixiDebugOptions;\n private app: Application | null = null;\n private graphics: Graphics | null = null;\n private readonly onAfterUpdate: () => void;\n\n constructor(opts: MatterPixiDebugOptions) {\n this.opts = opts;\n this.engine = opts.engine;\n this.onAfterUpdate = () => this.redraw();\n }\n\n async init(): Promise<void> {\n const { canvas, width, height, resolution = 1 } = this.opts;\n const app = new Application();\n await app.init({\n canvas,\n width,\n height,\n resolution,\n autoDensity: true,\n antialias: true,\n backgroundAlpha: 0.12,\n preference: 'webgl',\n });\n this.app = app;\n this.graphics = new Graphics();\n app.stage.addChild(this.graphics);\n Matter.Events.on(this.engine, 'afterUpdate', this.onAfterUpdate);\n }\n\n private redraw(): void {\n const g = this.graphics;\n if (!g) {\n return;\n }\n g.clear();\n const bodies = Matter.Composite.allBodies(this.engine.world);\n for (let b = 0; b < bodies.length; b++) {\n const body = bodies[b];\n if (body.render?.visible === false) {\n continue;\n }\n const verts = body.vertices;\n if (!verts?.length) {\n continue;\n }\n const v0 = verts[0];\n g.moveTo(v0.x, v0.y);\n for (let i = 1; i < verts.length; i++) {\n g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n g.stroke({ width: 1, color: 0x00e676, alpha: 0.9 });\n }\n }\n\n destroy(): void {\n Matter.Events.off(this.engine, 'afterUpdate', this.onAfterUpdate);\n if (this.app) {\n this.app.destroy(true, { children: true, texture: true });\n this.app = null;\n }\n this.graphics = null;\n }\n}\n","import Matter from 'matter-js';\n\nimport BodiesFactory from './BodiesFactory';\nimport { Component, Game } from '@combos-fun/engine';\nimport type { PhysicsSystemParams } from './PhysicsSystem';\nimport type { Physics } from './Physics';\nimport { MatterPixiDebugRenderer } from './MatterPixiDebugRenderer';\n\nexport interface PhysicsLinkedBody extends Matter.Body {\n component: Physics;\n}\n\nexport default class PhysicsEngine {\n private Engine: typeof Matter.Engine;\n private World: typeof Matter.World;\n private engine: Matter.Engine;\n private bodiesFactory: BodiesFactory;\n private collisionEvents: string[];\n private bodyEvents: string[];\n private options: PhysicsSystemParams;\n private game: Game;\n private Runner: typeof Matter.Runner;\n private Constraint: typeof Matter.Constraint;\n private mouseConstraint: Matter.MouseConstraint;\n private runner: Matter.Runner;\n private debugRenderer: MatterPixiDebugRenderer | null = null;\n public enabled: boolean = false;\n constructor(game: Game, options: PhysicsSystemParams) {\n this.Engine = Matter.Engine;\n this.World = Matter.World;\n this.bodiesFactory = new BodiesFactory();\n this.Runner = Matter.Runner;\n this.Constraint = Matter.Constraint;\n this.game = game;\n\n this.collisionEvents = ['collisionStart', 'collisionActive', 'collisionEnd'];\n this.bodyEvents = ['tick', 'beforeUpdate', 'afterUpdate', 'beforeRender', 'afterRender', 'afterTick'];\n this.options = options;\n this.runner = this.Runner.create({\n delta: 1000 / (this.options.fps || 60),\n frameDeltaSmoothing: (this.options.deltaSampleSize ?? 1) > 1,\n });\n }\n\n public start() {\n this.engine = this.Engine.create();\n const world = this.World.create(this.options.world as Matter.IWorldDefinition);\n this.engine.world = world;\n if (this.options.isTest) {\n const ownCanvas = !this.options.canvas;\n const canvas = this.options.canvas ?? document.createElement('canvas');\n if (ownCanvas && this.options.element) {\n this.options.element.appendChild(canvas);\n }\n const resolution = this.options.resolution || 1;\n this.debugRenderer = new MatterPixiDebugRenderer({\n engine: this.engine,\n canvas,\n width: this.game.canvas.width / resolution,\n height: this.game.canvas.height / resolution,\n resolution,\n });\n void this.debugRenderer.init().catch(err => {\n console.error('[plugin-matterjs] MatterPixiDebugRenderer init failed', err);\n });\n this.Runner.run(this.runner, this.engine);\n }\n this.enabled = true;\n this.initMouse();\n this.initCollisionEvents();\n this.initBodyEvents();\n }\n\n public update(e) {\n if (!this.engine) {\n return;\n }\n if (!this.options.isTest) {\n this.Runner.tick(this.runner, this.engine, e.currentTime);\n }\n }\n\n public stop() {\n this.enabled = false;\n this.runner.enabled = false;\n }\n\n public destroy() {\n this.debugRenderer?.destroy();\n this.debugRenderer = null;\n if (this.engine) {\n Matter.Runner.stop(this.runner);\n Matter.Engine.clear(this.engine);\n }\n }\n\n public awake() {\n this.enabled = true;\n this.runner.enabled = true;\n }\n public add(component) {\n const body = this.createBodies(component);\n this.World.add(this.engine.world, [body]);\n component.body = body;\n component.Body = Matter.Body;\n component.PhysicsEngine = this.engine;\n component.Constraint = this.Constraint;\n component.mouseConstraint = this.mouseConstraint;\n component.World = this.World;\n body.component = component;\n }\n\n public change(component: Physics) {\n const newBody = this.createBodies(component);\n this.World.remove(this.engine.world, component.body, true);\n this.World.add(this.engine.world, [newBody]);\n component.body = newBody;\n }\n public remove(component: Physics) {\n this.World.remove(this.engine.world, component.body, true);\n component.body = undefined;\n }\n\n private createBodies(params): any {\n const body = this.bodiesFactory.create(params) as PhysicsLinkedBody;\n return body;\n }\n\n private initCollisionEvents() {\n (this.collisionEvents as Array<'collisionStart' | 'collisionActive' | 'collisionEnd'>).forEach(eventName => {\n Matter.Events.on(this.engine, eventName, (event: Matter.IEventCollision<Matter.Engine>) => {\n const pairs = event.pairs ?? [];\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n const { bodyA, bodyB } = pair;\n const componentA: Component = (bodyA as PhysicsLinkedBody).component;\n const componentB: Component = (bodyB as PhysicsLinkedBody).component;\n componentA.emit(eventName, componentB.gameObject, componentA.gameObject);\n componentB.emit(eventName, componentA.gameObject, componentB.gameObject);\n }\n });\n });\n }\n\n private initMouse() {\n if (this.options.mouse && this.options.mouse.open) {\n const mouse = Matter.Mouse.create(this.game.canvas);\n let options = this.options.mouse.constraint ? {\n mouse,\n constraint: this.options.mouse.constraint\n } : {\n mouse\n };\n this.mouseConstraint = Matter.MouseConstraint.create(this.engine, options);\n this.World.add(this.engine.world, this.mouseConstraint);\n }\n }\n\n private initBodyEvents() {\n this.bodyEvents.forEach(eventName => {\n Matter.Events.on(this.engine, eventName, e => {\n const bodies = e.source.world.bodies;\n bodies.forEach(body => {\n const linked = body as PhysicsLinkedBody;\n linked.component?.emit(eventName, body, linked.component.gameObject);\n });\n });\n });\n }\n}\n","import { System, decorators, OBSERVER_TYPE, Transform } from '@combos-fun/engine';\nimport type { ComponentChanged } from \"@combos-fun/engine\";\nimport PhysicsEngine from './PhysicsEngine';\nimport { Physics } from './Physics';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends Object ? DeepPartial<T[P]> : T[P];\n}\n\nexport interface PhysicsSystemParams {\n resolution?: number\n fps?: number\n isTest?: boolean\n element?: HTMLElement\n canvas?: HTMLCanvasElement\n deltaSampleSize?: number\n mouse?: {\n open: boolean\n constraint?: Matter.Constraint\n }\n world: DeepPartial<Matter.IWorldDefinition>\n}\n\n@decorators.componentObserver({\n Physics: [{ prop: ['bodyParams'], deep: true }],\n Transform: ['_parent'],\n})\nexport default class PhysicsSystem extends System<PhysicsSystemParams> {\n static systemName = 'PhysicsSystem';\n private engine: PhysicsEngine;\n\n /**\n * System init: configure params before the game starts.\n * @param param init params\n */\n init(param?: PhysicsSystemParams) {\n this.engine = new PhysicsEngine(this.game, param);\n this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1') as string);\n }\n /**\n * Called when the System is installed; if the game has not started, it runs when the\n * game starts. Use it for setup work such as initializing data.\n */\n awake() { }\n\n /**\n * Called after the System is installed and all systems' `awake` have run.\n */\n start() {\n this.engine.start();\n }\n /**\n * Called on every game loop; can perform operations and change component properties.\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 Physics) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.transform.parent && !changed.gameObject.getComponent(Physics).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 switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).parent) {\n let physics = changed.gameObject.getComponent(Physics);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n /**\n * Like `update`, but called after every System's and component's `update` has run.\n */\n lateUpdate() { }\n /**\n * Called when the game starts or resumes playing after a pause.\n */\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n /**\n * Called when the game is paused.\n */\n onPause() {\n this.engine.stop();\n }\n /**\n * Called when the system is destroyed.\n */\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport PhysicsSystem from './PhysicsSystem';\n\nObject.assign(PhysicsSystem, {\n packageName: \"@combos-fun/plugin-matterjs\",\n packageVersion: \"0.0.28\",\n});\n"],"names":["PhysicsType","Component","Matter","Application","Graphics","PhysicsSystem","System","OBSERVER_TYPE","__decorate","decorators"],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";var e=require("tslib"),t=require("@combos-fun/engine"),s=require("matter-js"),i=require("pixi.js");function n(e){return e&&e.__esModule?e:{default:e}}var o,a=n(s);exports.PhysicsType=void 0,(o=exports.PhysicsType||(exports.PhysicsType={})).RECTANGLE="rectangle",o.CIRCLE="circle",o.POLYGON="polygon";class r extends t.Component{static{this.componentName="Physics"}init(e){this.bodyParams=e}update(){this.body&&this.gameObject&&(this.gameObject.transform.anchor.x=0,this.gameObject.transform.anchor.y=0,this.gameObject.transform.position.x=this.body.position.x,this.gameObject.transform.position.y=this.body.position.y,this.bodyParams.stopRotation||(this.gameObject.transform.rotation=this.body.angle))}onDestroy(){a.default.World.remove(this.PhysicsEngine.world,this.body,!0)}}class h{constructor(){this.Bodies=a.default.Bodies}create(e){let t=null;const{gameObject:s,bodyParams:i}=e,n=this.getCoordinate(s),o=i.position?i.position.x:n.x,a=i.position?i.position.y:n.y,r=s.transform.size.width*s.transform.scale.x/2,h=s.transform.size.height*s.transform.scale.y/2,c=Math.max(1,Math.min(r,h));switch(i.type){case exports.PhysicsType.RECTANGLE:{const e=s.transform.size.width*s.transform.scale.x,n=s.transform.size.height*s.transform.scale.y;t=this.Bodies.rectangle(o,a,e,n,i.bodyOptions);break}case exports.PhysicsType.CIRCLE:{const e=i.radius??c;t=this.Bodies.circle(o,a,e,i.bodyOptions);break}case exports.PhysicsType.POLYGON:{const e=Math.max(3,i.sides??6),s=i.radius??c;t=this.Bodies.polygon(o,a,e,s,i.bodyOptions);break}}return t}getCoordinate(e){return{x:e.transform.position.x+e.transform.anchor.x*e.parent.transform.size.width,y:e.transform.position.y+e.transform.anchor.y*e.parent.transform.size.height}}}class c{constructor(e){this.app=null,this.graphics=null,this.opts=e,this.engine=e.engine,this.onAfterUpdate=()=>this.redraw()}async init(){const{canvas:e,width:t,height:s,resolution:n=1}=this.opts,o=new i.Application;await o.init({canvas:e,width:t,height:s,resolution:n,autoDensity:!0,antialias:!0,backgroundAlpha:.12,preference:"webgl"}),this.app=o,this.graphics=new i.Graphics,o.stage.addChild(this.graphics),a.default.Events.on(this.engine,"afterUpdate",this.onAfterUpdate)}redraw(){const e=this.graphics;if(!e)return;e.clear();const t=a.default.Composite.allBodies(this.engine.world);for(let s=0;s<t.length;s++){const i=t[s];if(!1===i.render?.visible)continue;const n=i.vertices;if(!n?.length)continue;const o=n[0];e.moveTo(o.x,o.y);for(let t=1;t<n.length;t++)e.lineTo(n[t].x,n[t].y);e.closePath(),e.stroke({width:1,color:58998,alpha:.9})}}destroy(){a.default.Events.off(this.engine,"afterUpdate",this.onAfterUpdate),this.app&&(this.app.destroy(!0,{children:!0,texture:!0}),this.app=null),this.graphics=null}}class d{constructor(e,t){this.debugRenderer=null,this.enabled=!1,this.Engine=a.default.Engine,this.World=a.default.World,this.bodiesFactory=new h,this.Runner=a.default.Runner,this.Constraint=a.default.Constraint,this.game=e,this.collisionEvents=["collisionStart","collisionActive","collisionEnd"],this.bodyEvents=["tick","beforeUpdate","afterUpdate","beforeRender","afterRender","afterTick"],this.options=t,this.runner=this.Runner.create({delta:1e3/(this.options.fps||60),frameDeltaSmoothing:(this.options.deltaSampleSize??1)>1})}start(){this.engine=this.Engine.create();const e=this.World.create(this.options.world);if(this.engine.world=e,this.options.isTest){const e=!this.options.canvas,t=this.options.canvas??document.createElement("canvas");e&&this.options.element&&this.options.element.appendChild(t);const s=this.options.resolution||1;this.debugRenderer=new c({engine:this.engine,canvas:t,width:this.game.canvas.width/s,height:this.game.canvas.height/s,resolution:s}),this.debugRenderer.init().catch(e=>{console.error("[plugin-matterjs] MatterPixiDebugRenderer init failed",e)}),this.Runner.run(this.runner,this.engine)}this.enabled=!0,this.initMouse(),this.initCollisionEvents(),this.initBodyEvents()}update(e){this.engine&&(this.options.isTest||this.Runner.tick(this.runner,this.engine,e.currentTime))}stop(){this.enabled=!1,this.runner.enabled=!1}destroy(){this.debugRenderer?.destroy(),this.debugRenderer=null,this.engine&&(a.default.Runner.stop(this.runner),a.default.Engine.clear(this.engine))}awake(){this.enabled=!0,this.runner.enabled=!0}add(e){const t=this.createBodies(e);this.World.add(this.engine.world,[t]),e.body=t,e.Body=a.default.Body,e.PhysicsEngine=this.engine,e.Constraint=this.Constraint,e.mouseConstraint=this.mouseConstraint,e.World=this.World,t.component=e}change(e){const t=this.createBodies(e);this.World.remove(this.engine.world,e.body,!0),this.World.add(this.engine.world,[t]),e.body=t}remove(e){this.World.remove(this.engine.world,e.body,!0),e.body=void 0}createBodies(e){return this.bodiesFactory.create(e)}initCollisionEvents(){this.collisionEvents.forEach(e=>{a.default.Events.on(this.engine,e,t=>{const s=t.pairs??[];for(let t=0;t<s.length;t++){const i=s[t],{bodyA:n,bodyB:o}=i,a=n.component,r=o.component;a.emit(e,r.gameObject,a.gameObject),r.emit(e,a.gameObject,r.gameObject)}})})}initMouse(){if(this.options.mouse&&this.options.mouse.open){const e=a.default.Mouse.create(this.game.canvas);let t=this.options.mouse.constraint?{mouse:e,constraint:this.options.mouse.constraint}:{mouse:e};this.mouseConstraint=a.default.MouseConstraint.create(this.engine,t),this.World.add(this.engine.world,this.mouseConstraint)}}initBodyEvents(){this.bodyEvents.forEach(e=>{a.default.Events.on(this.engine,e,t=>{t.source.world.bodies.forEach(t=>{const s=t;s.component?.emit(e,t,s.component.gameObject)})})})}}let l=class extends t.System{static{this.systemName="PhysicsSystem"}init(e){this.engine=new d(this.game,e),this.game.canvas.setAttribute("data-pixel-ratio",e.resolution||"1")}awake(){}start(){this.engine.start()}update(e){const t=this.componentObserver.clear();for(const e of t)e&&this.componentChanged(e);this.engine.update(e)}componentChanged(e){if(e.component instanceof r)switch(e.type){case t.OBSERVER_TYPE.ADD:e.gameObject.transform.parent&&!e.gameObject.getComponent(r).body&&this.engine.add(e.component);break;case t.OBSERVER_TYPE.CHANGE:this.engine.change(e.component);case t.OBSERVER_TYPE.REMOVE:}else if(e.type===t.OBSERVER_TYPE.CHANGE)if(e.component.parent){let t=e.gameObject.getComponent(r);t&&!t.body&&this.engine.add(t)}else{let t=e.gameObject.getComponent(r);t&&this.engine.remove(t)}}lateUpdate(){}onResume(){this.engine.enabled||this.engine.awake()}onPause(){this.engine.stop()}onDestroy(){this.engine?.destroy()}};l=e.__decorate([t.decorators.componentObserver({Physics:[{prop:["bodyParams"],deep:!0}],Transform:["_parent"]})],l);var p=l;Object.assign(p,{packageName:"@combos-fun/plugin-matterjs",packageVersion:"0.0.27"}),exports.Physics=r,exports.PhysicsSystem=p;
1
+ "use strict";var e=require("tslib"),t=require("@combos-fun/engine"),s=require("matter-js"),i=require("pixi.js");function n(e){return e&&e.__esModule?e:{default:e}}var o,a=n(s);exports.PhysicsType=void 0,(o=exports.PhysicsType||(exports.PhysicsType={})).RECTANGLE="rectangle",o.CIRCLE="circle",o.POLYGON="polygon";class r extends t.Component{static{this.componentName="Physics"}init(e){this.bodyParams=e}update(){this.body&&this.gameObject&&(this.gameObject.transform.anchor.x=0,this.gameObject.transform.anchor.y=0,this.gameObject.transform.position.x=this.body.position.x,this.gameObject.transform.position.y=this.body.position.y,this.bodyParams.stopRotation||(this.gameObject.transform.rotation=this.body.angle))}onDestroy(){a.default.World.remove(this.PhysicsEngine.world,this.body,!0)}}class h{constructor(){this.Bodies=a.default.Bodies}create(e){let t=null;const{gameObject:s,bodyParams:i}=e,n=this.getCoordinate(s),o=i.position?i.position.x:n.x,a=i.position?i.position.y:n.y,r=s.transform.size.width*s.transform.scale.x/2,h=s.transform.size.height*s.transform.scale.y/2,c=Math.max(1,Math.min(r,h));switch(i.type){case exports.PhysicsType.RECTANGLE:{const e=s.transform.size.width*s.transform.scale.x,n=s.transform.size.height*s.transform.scale.y;t=this.Bodies.rectangle(o,a,e,n,i.bodyOptions);break}case exports.PhysicsType.CIRCLE:{const e=i.radius??c;t=this.Bodies.circle(o,a,e,i.bodyOptions);break}case exports.PhysicsType.POLYGON:{const e=Math.max(3,i.sides??6),s=i.radius??c;t=this.Bodies.polygon(o,a,e,s,i.bodyOptions);break}}return t}getCoordinate(e){return{x:e.transform.position.x+e.transform.anchor.x*e.parent.transform.size.width,y:e.transform.position.y+e.transform.anchor.y*e.parent.transform.size.height}}}class c{constructor(e){this.app=null,this.graphics=null,this.opts=e,this.engine=e.engine,this.onAfterUpdate=()=>this.redraw()}async init(){const{canvas:e,width:t,height:s,resolution:n=1}=this.opts,o=new i.Application;await o.init({canvas:e,width:t,height:s,resolution:n,autoDensity:!0,antialias:!0,backgroundAlpha:.12,preference:"webgl"}),this.app=o,this.graphics=new i.Graphics,o.stage.addChild(this.graphics),a.default.Events.on(this.engine,"afterUpdate",this.onAfterUpdate)}redraw(){const e=this.graphics;if(!e)return;e.clear();const t=a.default.Composite.allBodies(this.engine.world);for(let s=0;s<t.length;s++){const i=t[s];if(!1===i.render?.visible)continue;const n=i.vertices;if(!n?.length)continue;const o=n[0];e.moveTo(o.x,o.y);for(let t=1;t<n.length;t++)e.lineTo(n[t].x,n[t].y);e.closePath(),e.stroke({width:1,color:58998,alpha:.9})}}destroy(){a.default.Events.off(this.engine,"afterUpdate",this.onAfterUpdate),this.app&&(this.app.destroy(!0,{children:!0,texture:!0}),this.app=null),this.graphics=null}}class d{constructor(e,t){this.debugRenderer=null,this.enabled=!1,this.Engine=a.default.Engine,this.World=a.default.World,this.bodiesFactory=new h,this.Runner=a.default.Runner,this.Constraint=a.default.Constraint,this.game=e,this.collisionEvents=["collisionStart","collisionActive","collisionEnd"],this.bodyEvents=["tick","beforeUpdate","afterUpdate","beforeRender","afterRender","afterTick"],this.options=t,this.runner=this.Runner.create({delta:1e3/(this.options.fps||60),frameDeltaSmoothing:(this.options.deltaSampleSize??1)>1})}start(){this.engine=this.Engine.create();const e=this.World.create(this.options.world);if(this.engine.world=e,this.options.isTest){const e=!this.options.canvas,t=this.options.canvas??document.createElement("canvas");e&&this.options.element&&this.options.element.appendChild(t);const s=this.options.resolution||1;this.debugRenderer=new c({engine:this.engine,canvas:t,width:this.game.canvas.width/s,height:this.game.canvas.height/s,resolution:s}),this.debugRenderer.init().catch(e=>{console.error("[plugin-matterjs] MatterPixiDebugRenderer init failed",e)}),this.Runner.run(this.runner,this.engine)}this.enabled=!0,this.initMouse(),this.initCollisionEvents(),this.initBodyEvents()}update(e){this.engine&&(this.options.isTest||this.Runner.tick(this.runner,this.engine,e.currentTime))}stop(){this.enabled=!1,this.runner.enabled=!1}destroy(){this.debugRenderer?.destroy(),this.debugRenderer=null,this.engine&&(a.default.Runner.stop(this.runner),a.default.Engine.clear(this.engine))}awake(){this.enabled=!0,this.runner.enabled=!0}add(e){const t=this.createBodies(e);this.World.add(this.engine.world,[t]),e.body=t,e.Body=a.default.Body,e.PhysicsEngine=this.engine,e.Constraint=this.Constraint,e.mouseConstraint=this.mouseConstraint,e.World=this.World,t.component=e}change(e){const t=this.createBodies(e);this.World.remove(this.engine.world,e.body,!0),this.World.add(this.engine.world,[t]),e.body=t}remove(e){this.World.remove(this.engine.world,e.body,!0),e.body=void 0}createBodies(e){return this.bodiesFactory.create(e)}initCollisionEvents(){this.collisionEvents.forEach(e=>{a.default.Events.on(this.engine,e,t=>{const s=t.pairs??[];for(let t=0;t<s.length;t++){const i=s[t],{bodyA:n,bodyB:o}=i,a=n.component,r=o.component;a.emit(e,r.gameObject,a.gameObject),r.emit(e,a.gameObject,r.gameObject)}})})}initMouse(){if(this.options.mouse&&this.options.mouse.open){const e=a.default.Mouse.create(this.game.canvas);let t=this.options.mouse.constraint?{mouse:e,constraint:this.options.mouse.constraint}:{mouse:e};this.mouseConstraint=a.default.MouseConstraint.create(this.engine,t),this.World.add(this.engine.world,this.mouseConstraint)}}initBodyEvents(){this.bodyEvents.forEach(e=>{a.default.Events.on(this.engine,e,t=>{t.source.world.bodies.forEach(t=>{const s=t;s.component?.emit(e,t,s.component.gameObject)})})})}}let l=class extends t.System{static{this.systemName="PhysicsSystem"}init(e){this.engine=new d(this.game,e),this.game.canvas.setAttribute("data-pixel-ratio",e.resolution||"1")}awake(){}start(){this.engine.start()}update(e){const t=this.componentObserver.clear();for(const e of t)e&&this.componentChanged(e);this.engine.update(e)}componentChanged(e){if(e.component instanceof r)switch(e.type){case t.OBSERVER_TYPE.ADD:e.gameObject.transform.parent&&!e.gameObject.getComponent(r).body&&this.engine.add(e.component);break;case t.OBSERVER_TYPE.CHANGE:this.engine.change(e.component);case t.OBSERVER_TYPE.REMOVE:}else if(e.type===t.OBSERVER_TYPE.CHANGE)if(e.component.parent){let t=e.gameObject.getComponent(r);t&&!t.body&&this.engine.add(t)}else{let t=e.gameObject.getComponent(r);t&&this.engine.remove(t)}}lateUpdate(){}onResume(){this.engine.enabled||this.engine.awake()}onPause(){this.engine.stop()}onDestroy(){this.engine?.destroy()}};l=e.__decorate([t.decorators.componentObserver({Physics:[{prop:["bodyParams"],deep:!0}],Transform:["_parent"]})],l);var p=l;Object.assign(p,{packageName:"@combos-fun/plugin-matterjs",packageVersion:"0.0.28"}),exports.Physics=r,exports.PhysicsSystem=p;
@@ -21,52 +21,38 @@ declare class PhysicsSystem extends System<PhysicsSystemParams> {
21
21
  static systemName: string;
22
22
  private engine;
23
23
  /**
24
- * System 初始化用,可以配置参数,游戏未开始
25
- *
26
- * System init, set params, game is not begain
24
+ * System init: configure params before the game starts.
27
25
  * @param param init params
28
26
  */
29
27
  init(param?: PhysicsSystemParams): void;
30
28
  /**
31
- * System 被安装的时候,如果游戏还没有开始,那么会在游戏开始的时候调用。用于前置操作,初始化数据等。
32
- *
33
- * Called while the System installed, if game is not begain, it will be called while begain. use to pre operation, init data.
29
+ * Called when the System is installed; if the game has not started, it runs when the
30
+ * game starts. Use it for setup work such as initializing data.
34
31
  */
35
32
  awake(): void;
36
33
  /**
37
- * System 被安装后,所有的 awake 执行完后
38
- *
39
- * Called while the System installed, after all of systems' awake been called
34
+ * Called after the System is installed and all systems' `awake` have run.
40
35
  */
41
36
  start(): void;
42
37
  /**
43
- * 每一次游戏循环调用,可以做一些游戏操作,控制改变一些组件属性。
44
- *
45
- * Called by every loop, can do some operation, change some property or other component property.
38
+ * Called on every game loop; can perform operations and change component properties.
46
39
  */
47
40
  update(e: any): void;
48
41
  componentChanged(changed: ComponentChanged): void;
49
42
  /**
50
- * update?() 类似,在所有System和组件的 update?() 执行以后调用。
51
- *
52
- * Like update, called all of gameobject update.
43
+ * Like `update`, but called after every System's and component's `update` has run.
53
44
  */
54
45
  lateUpdate(): void;
55
46
  /**
56
- * 游戏开始和游戏暂停后开始播放的时候调用。
57
- *
58
- * Called while the game to play when game pause.
47
+ * Called when the game starts or resumes playing after a pause.
59
48
  */
60
49
  onResume(): void;
61
50
  /**
62
- * 游戏暂停的时候调用。
63
- *
64
- * Called while the game paused.
51
+ * Called when the game is paused.
65
52
  */
66
53
  onPause(): void;
67
54
  /**
68
- * System 被销毁的时候调用。
69
- * Called while the system be destroyed.
55
+ * Called when the system is destroyed.
70
56
  */
71
57
  onDestroy(): void;
72
58
  }
@@ -276,9 +276,7 @@ class PhysicsEngine {
276
276
  let PhysicsSystem = class PhysicsSystem extends System {
277
277
  static { this.systemName = 'PhysicsSystem'; }
278
278
  /**
279
- * System 初始化用,可以配置参数,游戏未开始
280
- *
281
- * System init, set params, game is not begain
279
+ * System init: configure params before the game starts.
282
280
  * @param param init params
283
281
  */
284
282
  init(param) {
@@ -286,23 +284,18 @@ let PhysicsSystem = class PhysicsSystem extends System {
286
284
  this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1'));
287
285
  }
288
286
  /**
289
- * System 被安装的时候,如果游戏还没有开始,那么会在游戏开始的时候调用。用于前置操作,初始化数据等。
290
- *
291
- * Called while the System installed, if game is not begain, it will be called while begain. use to pre operation, init data.
287
+ * Called when the System is installed; if the game has not started, it runs when the
288
+ * game starts. Use it for setup work such as initializing data.
292
289
  */
293
290
  awake() { }
294
291
  /**
295
- * System 被安装后,所有的 awake 执行完后
296
- *
297
- * Called while the System installed, after all of systems' awake been called
292
+ * Called after the System is installed and all systems' `awake` have run.
298
293
  */
299
294
  start() {
300
295
  this.engine.start();
301
296
  }
302
297
  /**
303
- * 每一次游戏循环调用,可以做一些游戏操作,控制改变一些组件属性。
304
- *
305
- * Called by every loop, can do some operation, change some property or other component property.
298
+ * Called on every game loop; can perform operations and change component properties.
306
299
  */
307
300
  update(e) {
308
301
  const changes = this.componentObserver.clear();
@@ -349,15 +342,11 @@ let PhysicsSystem = class PhysicsSystem extends System {
349
342
  }
350
343
  }
351
344
  /**
352
- * update?() 类似,在所有System和组件的 update?() 执行以后调用。
353
- *
354
- * Like update, called all of gameobject update.
345
+ * Like `update`, but called after every System's and component's `update` has run.
355
346
  */
356
347
  lateUpdate() { }
357
348
  /**
358
- * 游戏开始和游戏暂停后开始播放的时候调用。
359
- *
360
- * Called while the game to play when game pause.
349
+ * Called when the game starts or resumes playing after a pause.
361
350
  */
362
351
  onResume() {
363
352
  if (!this.engine.enabled) {
@@ -365,16 +354,13 @@ let PhysicsSystem = class PhysicsSystem extends System {
365
354
  }
366
355
  }
367
356
  /**
368
- * 游戏暂停的时候调用。
369
- *
370
- * Called while the game paused.
357
+ * Called when the game is paused.
371
358
  */
372
359
  onPause() {
373
360
  this.engine.stop();
374
361
  }
375
362
  /**
376
- * System 被销毁的时候调用。
377
- * Called while the system be destroyed.
363
+ * Called when the system is destroyed.
378
364
  */
379
365
  onDestroy() {
380
366
  this.engine?.destroy();
@@ -391,7 +377,7 @@ var PhysicsSystem$1 = PhysicsSystem;
391
377
  /** Auto-generated by scripts/build-package.mjs — do not edit. */
392
378
  Object.assign(PhysicsSystem$1, {
393
379
  packageName: "@combos-fun/plugin-matterjs",
394
- packageVersion: "0.0.27",
380
+ packageVersion: "0.0.28",
395
381
  });
396
382
 
397
383
  export { Physics, PhysicsSystem$1 as PhysicsSystem, PhysicsType };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-matterjs.esm.js","sources":["../lib/Physics.ts","../lib/BodiesFactory.ts","../lib/MatterPixiDebugRenderer.ts","../lib/PhysicsEngine.ts","../lib/PhysicsSystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport Matter from 'matter-js';\nexport enum PhysicsType {\n RECTANGLE = 'rectangle',\n CIRCLE = 'circle',\n POLYGON = 'polygon',\n}\nexport interface PhysicsParams {\n type?: PhysicsType\n bodyOptions?: {\n isStatic?: boolean,\n restitution?: number,\n density?: number,\n [propName: string]: any,\n },\n position?: {\n x?: number\n y?: number\n }\n sides?: number\n radius?: number\n stopRotation?: boolean\n}\n\nexport class Physics extends Component<PhysicsParams> {\n static componentName: string = 'Physics';\n public bodyParams: PhysicsParams;\n public body: Matter.Body;\n private PhysicsEngine: Matter.Engine;\n\n init(params: PhysicsParams) {\n this.bodyParams = params;\n }\n\n update() {\n if (this.body && this.gameObject) {\n this.gameObject.transform.anchor.x = 0;\n this.gameObject.transform.anchor.y = 0;\n this.gameObject.transform.position.x = this.body.position.x;\n this.gameObject.transform.position.y = this.body.position.y;\n if (!this.bodyParams.stopRotation) {\n this.gameObject.transform.rotation = this.body.angle;\n }\n }\n }\n onDestroy() {\n Matter.World.remove(this.PhysicsEngine.world, this.body, true);\n }\n}\n","import Matter from 'matter-js';\nimport { PhysicsType, Physics } from './Physics';\nimport { GameObject } from '@combos-fun/engine';\ndeclare interface BodyOptions {\n chamfer?: number; // 斜切角\n angle?: number; // 旋转角\n isStatic?: boolean;\n density?: number; // 密度;\n restitution?: number; // 回弹系数\n velocity?: number; // 速率\n speed?: number; // 速度\n motion?: number; // 势能\n mass?: number;\n}\n\nexport interface RectangleParams {\n x: number;\n y: number;\n width: number;\n height: number;\n options: BodyOptions;\n}\n\nexport interface Verctor {\n x: number;\n y: number;\n}\nexport default class BodiesFactory {\n private Bodies: typeof Matter.Bodies;\n constructor() {\n this.Bodies = Matter.Bodies;\n }\n public create(component: Physics): Matter.Body {\n let body: Matter.Body = null;\n const { gameObject, bodyParams } = component;\n const coordinate = this.getCoordinate(gameObject);\n const x = bodyParams.position ? bodyParams.position.x : coordinate.x;\n const y = bodyParams.position ? bodyParams.position.y : coordinate.y;\n const halfW =\n (gameObject.transform.size.width * gameObject.transform.scale.x) / 2;\n const halfH =\n (gameObject.transform.size.height * gameObject.transform.scale.y) / 2;\n /** Matter.circle approximates with a polygon; NaN/0 radius breaks vertices. */\n const defaultRadius = Math.max(1, Math.min(halfW, halfH));\n switch (bodyParams.type) {\n case PhysicsType.RECTANGLE: {\n const width = gameObject.transform.size.width * gameObject.transform.scale.x;\n const height = gameObject.transform.size.height * gameObject.transform.scale.y;\n body = this.Bodies.rectangle(x, y, width, height, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.CIRCLE: {\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.circle(x, y, radius, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.POLYGON: {\n const sides = Math.max(3, bodyParams.sides ?? 6);\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.polygon(x, y, sides, radius, bodyParams.bodyOptions);\n break;\n }\n }\n return body;\n }\n\n private getCoordinate(gameObject: GameObject): Verctor {\n const x = gameObject.transform.position.x + gameObject.transform.anchor.x * gameObject.parent.transform.size.width;\n const y = gameObject.transform.position.y + gameObject.transform.anchor.y * gameObject.parent.transform.size.height;\n return {\n x,\n y,\n };\n }\n}\n","import Matter from 'matter-js';\nimport { Application, Graphics } from 'pixi.js';\n\nexport interface MatterPixiDebugOptions {\n engine: Matter.Engine;\n canvas: HTMLCanvasElement;\n width: number;\n height: number;\n resolution?: number;\n}\n\n/** WebGL wireframe overlay for Matter bodies in test mode. */\nexport class MatterPixiDebugRenderer {\n private readonly engine: Matter.Engine;\n private readonly opts: MatterPixiDebugOptions;\n private app: Application | null = null;\n private graphics: Graphics | null = null;\n private readonly onAfterUpdate: () => void;\n\n constructor(opts: MatterPixiDebugOptions) {\n this.opts = opts;\n this.engine = opts.engine;\n this.onAfterUpdate = () => this.redraw();\n }\n\n async init(): Promise<void> {\n const { canvas, width, height, resolution = 1 } = this.opts;\n const app = new Application();\n await app.init({\n canvas,\n width,\n height,\n resolution,\n autoDensity: true,\n antialias: true,\n backgroundAlpha: 0.12,\n preference: 'webgl',\n });\n this.app = app;\n this.graphics = new Graphics();\n app.stage.addChild(this.graphics);\n Matter.Events.on(this.engine, 'afterUpdate', this.onAfterUpdate);\n }\n\n private redraw(): void {\n const g = this.graphics;\n if (!g) {\n return;\n }\n g.clear();\n const bodies = Matter.Composite.allBodies(this.engine.world);\n for (let b = 0; b < bodies.length; b++) {\n const body = bodies[b];\n if (body.render?.visible === false) {\n continue;\n }\n const verts = body.vertices;\n if (!verts?.length) {\n continue;\n }\n const v0 = verts[0];\n g.moveTo(v0.x, v0.y);\n for (let i = 1; i < verts.length; i++) {\n g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n g.stroke({ width: 1, color: 0x00e676, alpha: 0.9 });\n }\n }\n\n destroy(): void {\n Matter.Events.off(this.engine, 'afterUpdate', this.onAfterUpdate);\n if (this.app) {\n this.app.destroy(true, { children: true, texture: true });\n this.app = null;\n }\n this.graphics = null;\n }\n}\n","import Matter from 'matter-js';\n\nimport BodiesFactory from './BodiesFactory';\nimport { Component, Game } from '@combos-fun/engine';\nimport type { PhysicsSystemParams } from './PhysicsSystem';\nimport type { Physics } from './Physics';\nimport { MatterPixiDebugRenderer } from './MatterPixiDebugRenderer';\n\nexport interface PhysicsLinkedBody extends Matter.Body {\n component: Physics;\n}\n\nexport default class PhysicsEngine {\n private Engine: typeof Matter.Engine;\n private World: typeof Matter.World;\n private engine: Matter.Engine;\n private bodiesFactory: BodiesFactory;\n private collisionEvents: string[];\n private bodyEvents: string[];\n private options: PhysicsSystemParams;\n private game: Game;\n private Runner: typeof Matter.Runner;\n private Constraint: typeof Matter.Constraint;\n private mouseConstraint: Matter.MouseConstraint;\n private runner: Matter.Runner;\n private debugRenderer: MatterPixiDebugRenderer | null = null;\n public enabled: boolean = false;\n constructor(game: Game, options: PhysicsSystemParams) {\n this.Engine = Matter.Engine;\n this.World = Matter.World;\n this.bodiesFactory = new BodiesFactory();\n this.Runner = Matter.Runner;\n this.Constraint = Matter.Constraint;\n this.game = game;\n\n this.collisionEvents = ['collisionStart', 'collisionActive', 'collisionEnd'];\n this.bodyEvents = ['tick', 'beforeUpdate', 'afterUpdate', 'beforeRender', 'afterRender', 'afterTick'];\n this.options = options;\n this.runner = this.Runner.create({\n delta: 1000 / (this.options.fps || 60),\n frameDeltaSmoothing: (this.options.deltaSampleSize ?? 1) > 1,\n });\n }\n\n public start() {\n this.engine = this.Engine.create();\n const world = this.World.create(this.options.world as Matter.IWorldDefinition);\n this.engine.world = world;\n if (this.options.isTest) {\n const ownCanvas = !this.options.canvas;\n const canvas = this.options.canvas ?? document.createElement('canvas');\n if (ownCanvas && this.options.element) {\n this.options.element.appendChild(canvas);\n }\n const resolution = this.options.resolution || 1;\n this.debugRenderer = new MatterPixiDebugRenderer({\n engine: this.engine,\n canvas,\n width: this.game.canvas.width / resolution,\n height: this.game.canvas.height / resolution,\n resolution,\n });\n void this.debugRenderer.init().catch(err => {\n console.error('[plugin-matterjs] MatterPixiDebugRenderer init failed', err);\n });\n this.Runner.run(this.runner, this.engine);\n }\n this.enabled = true;\n this.initMouse();\n this.initCollisionEvents();\n this.initBodyEvents();\n }\n\n public update(e) {\n if (!this.engine) {\n return;\n }\n if (!this.options.isTest) {\n this.Runner.tick(this.runner, this.engine, e.currentTime);\n }\n }\n\n public stop() {\n this.enabled = false;\n this.runner.enabled = false;\n }\n\n public destroy() {\n this.debugRenderer?.destroy();\n this.debugRenderer = null;\n if (this.engine) {\n Matter.Runner.stop(this.runner);\n Matter.Engine.clear(this.engine);\n }\n }\n\n public awake() {\n this.enabled = true;\n this.runner.enabled = true;\n }\n public add(component) {\n const body = this.createBodies(component);\n this.World.add(this.engine.world, [body]);\n component.body = body;\n component.Body = Matter.Body;\n component.PhysicsEngine = this.engine;\n component.Constraint = this.Constraint;\n component.mouseConstraint = this.mouseConstraint;\n component.World = this.World;\n body.component = component;\n }\n\n public change(component: Physics) {\n const newBody = this.createBodies(component);\n this.World.remove(this.engine.world, component.body, true);\n this.World.add(this.engine.world, [newBody]);\n component.body = newBody;\n }\n public remove(component: Physics) {\n this.World.remove(this.engine.world, component.body, true);\n component.body = undefined;\n }\n\n private createBodies(params): any {\n const body = this.bodiesFactory.create(params) as PhysicsLinkedBody;\n return body;\n }\n\n private initCollisionEvents() {\n (this.collisionEvents as Array<'collisionStart' | 'collisionActive' | 'collisionEnd'>).forEach(eventName => {\n Matter.Events.on(this.engine, eventName, (event: Matter.IEventCollision<Matter.Engine>) => {\n const pairs = event.pairs ?? [];\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n const { bodyA, bodyB } = pair;\n const componentA: Component = (bodyA as PhysicsLinkedBody).component;\n const componentB: Component = (bodyB as PhysicsLinkedBody).component;\n componentA.emit(eventName, componentB.gameObject, componentA.gameObject);\n componentB.emit(eventName, componentA.gameObject, componentB.gameObject);\n }\n });\n });\n }\n\n private initMouse() {\n if (this.options.mouse && this.options.mouse.open) {\n const mouse = Matter.Mouse.create(this.game.canvas);\n let options = this.options.mouse.constraint ? {\n mouse,\n constraint: this.options.mouse.constraint\n } : {\n mouse\n };\n this.mouseConstraint = Matter.MouseConstraint.create(this.engine, options);\n this.World.add(this.engine.world, this.mouseConstraint);\n }\n }\n\n private initBodyEvents() {\n this.bodyEvents.forEach(eventName => {\n Matter.Events.on(this.engine, eventName, e => {\n const bodies = e.source.world.bodies;\n bodies.forEach(body => {\n const linked = body as PhysicsLinkedBody;\n linked.component?.emit(eventName, body, linked.component.gameObject);\n });\n });\n });\n }\n}\n","import { System, decorators, OBSERVER_TYPE, Transform } from '@combos-fun/engine';\nimport type { ComponentChanged } from \"@combos-fun/engine\";\nimport PhysicsEngine from './PhysicsEngine';\nimport { Physics } from './Physics';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends Object ? DeepPartial<T[P]> : T[P];\n}\n\nexport interface PhysicsSystemParams {\n resolution?: number\n fps?: number\n isTest?: boolean\n element?: HTMLElement\n canvas?: HTMLCanvasElement\n deltaSampleSize?: number\n mouse?: {\n open: boolean\n constraint?: Matter.Constraint\n }\n world: DeepPartial<Matter.IWorldDefinition>\n}\n\n@decorators.componentObserver({\n Physics: [{ prop: ['bodyParams'], deep: true }],\n Transform: ['_parent'],\n})\nexport default class PhysicsSystem extends System<PhysicsSystemParams> {\n static systemName = 'PhysicsSystem';\n private engine: PhysicsEngine;\n\n /**\n * System 初始化用,可以配置参数,游戏未开始\n *\n * System init, set params, game is not begain\n * @param param init params\n */\n init(param?: PhysicsSystemParams) {\n this.engine = new PhysicsEngine(this.game, param);\n this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1') as string);\n }\n /**\n * System 被安装的时候,如果游戏还没有开始,那么会在游戏开始的时候调用。用于前置操作,初始化数据等。\n *\n * Called while the System installed, if game is not begain, it will be called while begain. use to pre operation, init data.\n */\n awake() { }\n\n /**\n * System 被安装后,所有的 awake 执行完后\n *\n * Called while the System installed, after all of systems' awake been called\n */\n start() {\n this.engine.start();\n }\n /**\n * 每一次游戏循环调用,可以做一些游戏操作,控制改变一些组件属性。\n *\n * Called by every loop, can do some operation, change some property or other component property.\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 Physics) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.transform.parent && !changed.gameObject.getComponent(Physics).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 switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).parent) {\n let physics = changed.gameObject.getComponent(Physics);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n /**\n * 和 update?() 类似,在所有System和组件的 update?() 执行以后调用。\n *\n * Like update, called all of gameobject update.\n */\n lateUpdate() { }\n /**\n * 游戏开始和游戏暂停后开始播放的时候调用。\n *\n * Called while the game to play when game pause.\n */\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n /**\n * 游戏暂停的时候调用。\n *\n * Called while the game paused.\n */\n onPause() {\n this.engine.stop();\n }\n /**\n * System 被销毁的时候调用。\n * Called while the system be destroyed.\n */\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport PhysicsSystem from './PhysicsSystem';\n\nObject.assign(PhysicsSystem, {\n packageName: \"@combos-fun/plugin-matterjs\",\n packageVersion: \"0.0.27\",\n});\n"],"names":["PhysicsSystem"],"mappings":";;;;;IAEY;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,WAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;AAsBjB,MAAO,OAAQ,SAAQ,SAAwB,CAAA;aAC5C,IAAA,CAAA,aAAa,GAAW,SAAS,CAAC;AAKzC,IAAA,IAAI,CAAC,MAAqB,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;IAC1B;IAEA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;AACjC,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK;YACtD;QACF;IACF;IACA,SAAS,GAAA;AACP,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IAChE;;;ACpBY,MAAO,aAAa,CAAA;AAEhC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;IAC7B;AACO,IAAA,MAAM,CAAC,SAAkB,EAAA;QAC9B,IAAI,IAAI,GAAgB,IAAI;AAC5B,QAAA,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,SAAS;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;AACjD,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AACpE,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;QACpE,MAAM,KAAK,GACT,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QACtE,MAAM,KAAK,GACT,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;;AAEvE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzD,QAAA,QAAQ,UAAU,CAAC,IAAI;AACrB,YAAA,KAAK,WAAW,CAAC,SAAS,EAAE;AAC1B,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5E,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9E,gBAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;gBACzE;YACF;AACA,YAAA,KAAK,WAAW,CAAC,MAAM,EAAE;AACvB,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,aAAa;AACjD,gBAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;gBAC/D;YACF;AACA,YAAA,KAAK,WAAW,CAAC,OAAO,EAAE;AACxB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AAChD,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,aAAa;AACjD,gBAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC;gBACvE;YACF;;AAEF,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,UAAsB,EAAA;QAC1C,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK;QAClH,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM;QACnH,OAAO;YACL,CAAC;YACD,CAAC;SACF;IACH;AACD;;AC/DD;MACa,uBAAuB,CAAA;AAOlC,IAAA,WAAA,CAAY,IAA4B,EAAA;QAJhC,IAAA,CAAA,GAAG,GAAuB,IAAI;QAC9B,IAAA,CAAA,QAAQ,GAAoB,IAAI;AAItC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;QACzB,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE;IAC1C;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;AAC3D,QAAA,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE;QAC7B,MAAM,GAAG,CAAC,IAAI,CAAC;YACb,MAAM;YACN,KAAK;YACL,MAAM;YACN,UAAU;AACV,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,UAAU,EAAE,OAAO;AACpB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,EAAE;QAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;IAClE;IAEQ,MAAM,GAAA;AACZ,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ;QACvB,IAAI,CAAC,CAAC,EAAE;YACN;QACF;QACA,CAAC,CAAC,KAAK,EAAE;AACT,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,KAAK,EAAE;gBAClC;YACF;AACA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;AAC3B,YAAA,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBAClB;YACF;AACA,YAAA,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACpB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC;YACA,CAAC,CAAC,SAAS,EAAE;AACb,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACrD;IACF;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;AACjE,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACzD,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AACD;;AClEa,MAAO,aAAa,CAAA;IAehC,WAAA,CAAY,IAAU,EAAE,OAA4B,EAAA;QAF5C,IAAA,CAAA,aAAa,GAAmC,IAAI;QACrD,IAAA,CAAA,OAAO,GAAY,KAAK;AAE7B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE;AACxC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;AACnC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAEhB,IAAI,CAAC,eAAe,GAAG,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,CAAC;AAC5E,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC;AACrG,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;YACtC,mBAAmB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC;AAC7D,SAAA,CAAC;IACJ;IAEO,KAAK,GAAA;QACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAgC,CAAC;AAC9E,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACvB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AACtC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YACtE,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;YAC1C;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC;AAC/C,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAuB,CAAC;gBAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU;gBAC1C,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU;gBAC5C,UAAU;AACX,aAAA,CAAC;YACF,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,IAAG;AACzC,gBAAA,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,GAAG,CAAC;AAC7E,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAC3C;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,mBAAmB,EAAE;QAC1B,IAAI,CAAC,cAAc,EAAE;IACvB;AAEO,IAAA,MAAM,CAAC,CAAC,EAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC;QAC3D;IACF;IAEO,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK;IAC7B;IAEO,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAClC;IACF;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI;IAC5B;AACO,IAAA,GAAG,CAAC,SAAS,EAAA;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AACzC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,SAAS,CAAC,IAAI,GAAG,IAAI;AACrB,QAAA,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AAC5B,QAAA,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;AACrC,QAAA,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AACtC,QAAA,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe;AAChD,QAAA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;IAC5B;AAEO,IAAA,MAAM,CAAC,SAAkB,EAAA;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,SAAS,CAAC,IAAI,GAAG,OAAO;IAC1B;AACO,IAAA,MAAM,CAAC,SAAkB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1D,QAAA,SAAS,CAAC,IAAI,GAAG,SAAS;IAC5B;AAEQ,IAAA,YAAY,CAAC,MAAM,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAsB;AACnE,QAAA,OAAO,IAAI;IACb;IAEQ,mBAAmB,GAAA;AACxB,QAAA,IAAI,CAAC,eAAgF,CAAC,OAAO,CAAC,SAAS,IAAG;AACzG,YAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,KAA4C,KAAI;AACxF,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE;AAC/B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,oBAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI;AAC7B,oBAAA,MAAM,UAAU,GAAe,KAA2B,CAAC,SAAS;AACpE,oBAAA,MAAM,UAAU,GAAe,KAA2B,CAAC,SAAS;AACpE,oBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;AACxE,oBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC;gBAC1E;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;AACjD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACnD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG;gBAC5C,KAAK;AACL,gBAAA,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAChC,aAAA,GAAG;gBACA;aACD;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAC1E,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC;QACzD;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,IAAG;AAClC,YAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,IAAG;gBAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AACpC,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,IAAG;oBACpB,MAAM,MAAM,GAAG,IAAyB;AACxC,oBAAA,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;AACtE,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AACD;;AC9Ic,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,MAA2B,CAAA;aAC7D,IAAA,CAAA,UAAU,GAAG,eAAH,CAAmB;AAGpC;;;;;AAKG;AACH,IAAA,IAAI,CAAC,KAA2B,EAAA;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAkB,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,EAAY;IACxF;AACA;;;;AAIG;AACH,IAAA,KAAK,KAAK;AAEV;;;;AAIG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;AACA;;;;AAIG;AACH,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,OAAO,EAAE;AACxC,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,OAAO,CAAC,CAAC,IAAI,EAAE;wBACzF,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;gBACF;;QAEJ;aAAO;AACL,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,OAAO,CAAC;AACtD,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,OAAO,CAAC;wBACtD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;oBACxC;gBACF;;QAEJ;IACF;AACA;;;;AAIG;AACH,IAAA,UAAU,KAAK;AACf;;;;AAIG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACrB;IACF;AACA;;;;AAIG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AACA;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;IACxB;;AA3GmB,aAAa,GAAA,UAAA,CAAA;IAJjC,UAAU,CAAC,iBAAiB,CAAC;AAC5B,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC/C,SAAS,EAAE,CAAC,SAAS,CAAC;KACvB;AACoB,CAAA,EAAA,aAAa,CA4GjC;sBA5GoB,aAAa;;AC3BlC;AAIA,MAAM,CAAC,MAAM,CAACA,eAAa,EAAE;AAC3B,IAAA,WAAW,EAAE,6BAA6B;AAC1C,IAAA,cAAc,EAAE,QAAQ;AACzB,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"plugin-matterjs.esm.js","sources":["../lib/Physics.ts","../lib/BodiesFactory.ts","../lib/MatterPixiDebugRenderer.ts","../lib/PhysicsEngine.ts","../lib/PhysicsSystem.ts","../lib/__combosPackageMeta.gen.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport Matter from 'matter-js';\nexport enum PhysicsType {\n RECTANGLE = 'rectangle',\n CIRCLE = 'circle',\n POLYGON = 'polygon',\n}\nexport interface PhysicsParams {\n type?: PhysicsType\n bodyOptions?: {\n isStatic?: boolean,\n restitution?: number,\n density?: number,\n [propName: string]: any,\n },\n position?: {\n x?: number\n y?: number\n }\n sides?: number\n radius?: number\n stopRotation?: boolean\n}\n\nexport class Physics extends Component<PhysicsParams> {\n static componentName: string = 'Physics';\n public bodyParams: PhysicsParams;\n public body: Matter.Body;\n private PhysicsEngine: Matter.Engine;\n\n init(params: PhysicsParams) {\n this.bodyParams = params;\n }\n\n update() {\n if (this.body && this.gameObject) {\n this.gameObject.transform.anchor.x = 0;\n this.gameObject.transform.anchor.y = 0;\n this.gameObject.transform.position.x = this.body.position.x;\n this.gameObject.transform.position.y = this.body.position.y;\n if (!this.bodyParams.stopRotation) {\n this.gameObject.transform.rotation = this.body.angle;\n }\n }\n }\n onDestroy() {\n Matter.World.remove(this.PhysicsEngine.world, this.body, true);\n }\n}\n","import Matter from 'matter-js';\nimport { PhysicsType, Physics } from './Physics';\nimport { GameObject } from '@combos-fun/engine';\ndeclare interface BodyOptions {\n chamfer?: number; // chamfer (bevel) size\n angle?: number; // rotation angle\n isStatic?: boolean;\n density?: number; // density\n restitution?: number; // restitution (bounciness)\n velocity?: number; // velocity\n speed?: number; // speed\n motion?: number; // motion (kinetic energy)\n mass?: number;\n}\n\nexport interface RectangleParams {\n x: number;\n y: number;\n width: number;\n height: number;\n options: BodyOptions;\n}\n\nexport interface Verctor {\n x: number;\n y: number;\n}\nexport default class BodiesFactory {\n private Bodies: typeof Matter.Bodies;\n constructor() {\n this.Bodies = Matter.Bodies;\n }\n public create(component: Physics): Matter.Body {\n let body: Matter.Body = null;\n const { gameObject, bodyParams } = component;\n const coordinate = this.getCoordinate(gameObject);\n const x = bodyParams.position ? bodyParams.position.x : coordinate.x;\n const y = bodyParams.position ? bodyParams.position.y : coordinate.y;\n const halfW =\n (gameObject.transform.size.width * gameObject.transform.scale.x) / 2;\n const halfH =\n (gameObject.transform.size.height * gameObject.transform.scale.y) / 2;\n /** Matter.circle approximates with a polygon; NaN/0 radius breaks vertices. */\n const defaultRadius = Math.max(1, Math.min(halfW, halfH));\n switch (bodyParams.type) {\n case PhysicsType.RECTANGLE: {\n const width = gameObject.transform.size.width * gameObject.transform.scale.x;\n const height = gameObject.transform.size.height * gameObject.transform.scale.y;\n body = this.Bodies.rectangle(x, y, width, height, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.CIRCLE: {\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.circle(x, y, radius, bodyParams.bodyOptions);\n break;\n }\n case PhysicsType.POLYGON: {\n const sides = Math.max(3, bodyParams.sides ?? 6);\n const radius = bodyParams.radius ?? defaultRadius;\n body = this.Bodies.polygon(x, y, sides, radius, bodyParams.bodyOptions);\n break;\n }\n }\n return body;\n }\n\n private getCoordinate(gameObject: GameObject): Verctor {\n const x = gameObject.transform.position.x + gameObject.transform.anchor.x * gameObject.parent.transform.size.width;\n const y = gameObject.transform.position.y + gameObject.transform.anchor.y * gameObject.parent.transform.size.height;\n return {\n x,\n y,\n };\n }\n}\n","import Matter from 'matter-js';\nimport { Application, Graphics } from 'pixi.js';\n\nexport interface MatterPixiDebugOptions {\n engine: Matter.Engine;\n canvas: HTMLCanvasElement;\n width: number;\n height: number;\n resolution?: number;\n}\n\n/** WebGL wireframe overlay for Matter bodies in test mode. */\nexport class MatterPixiDebugRenderer {\n private readonly engine: Matter.Engine;\n private readonly opts: MatterPixiDebugOptions;\n private app: Application | null = null;\n private graphics: Graphics | null = null;\n private readonly onAfterUpdate: () => void;\n\n constructor(opts: MatterPixiDebugOptions) {\n this.opts = opts;\n this.engine = opts.engine;\n this.onAfterUpdate = () => this.redraw();\n }\n\n async init(): Promise<void> {\n const { canvas, width, height, resolution = 1 } = this.opts;\n const app = new Application();\n await app.init({\n canvas,\n width,\n height,\n resolution,\n autoDensity: true,\n antialias: true,\n backgroundAlpha: 0.12,\n preference: 'webgl',\n });\n this.app = app;\n this.graphics = new Graphics();\n app.stage.addChild(this.graphics);\n Matter.Events.on(this.engine, 'afterUpdate', this.onAfterUpdate);\n }\n\n private redraw(): void {\n const g = this.graphics;\n if (!g) {\n return;\n }\n g.clear();\n const bodies = Matter.Composite.allBodies(this.engine.world);\n for (let b = 0; b < bodies.length; b++) {\n const body = bodies[b];\n if (body.render?.visible === false) {\n continue;\n }\n const verts = body.vertices;\n if (!verts?.length) {\n continue;\n }\n const v0 = verts[0];\n g.moveTo(v0.x, v0.y);\n for (let i = 1; i < verts.length; i++) {\n g.lineTo(verts[i].x, verts[i].y);\n }\n g.closePath();\n g.stroke({ width: 1, color: 0x00e676, alpha: 0.9 });\n }\n }\n\n destroy(): void {\n Matter.Events.off(this.engine, 'afterUpdate', this.onAfterUpdate);\n if (this.app) {\n this.app.destroy(true, { children: true, texture: true });\n this.app = null;\n }\n this.graphics = null;\n }\n}\n","import Matter from 'matter-js';\n\nimport BodiesFactory from './BodiesFactory';\nimport { Component, Game } from '@combos-fun/engine';\nimport type { PhysicsSystemParams } from './PhysicsSystem';\nimport type { Physics } from './Physics';\nimport { MatterPixiDebugRenderer } from './MatterPixiDebugRenderer';\n\nexport interface PhysicsLinkedBody extends Matter.Body {\n component: Physics;\n}\n\nexport default class PhysicsEngine {\n private Engine: typeof Matter.Engine;\n private World: typeof Matter.World;\n private engine: Matter.Engine;\n private bodiesFactory: BodiesFactory;\n private collisionEvents: string[];\n private bodyEvents: string[];\n private options: PhysicsSystemParams;\n private game: Game;\n private Runner: typeof Matter.Runner;\n private Constraint: typeof Matter.Constraint;\n private mouseConstraint: Matter.MouseConstraint;\n private runner: Matter.Runner;\n private debugRenderer: MatterPixiDebugRenderer | null = null;\n public enabled: boolean = false;\n constructor(game: Game, options: PhysicsSystemParams) {\n this.Engine = Matter.Engine;\n this.World = Matter.World;\n this.bodiesFactory = new BodiesFactory();\n this.Runner = Matter.Runner;\n this.Constraint = Matter.Constraint;\n this.game = game;\n\n this.collisionEvents = ['collisionStart', 'collisionActive', 'collisionEnd'];\n this.bodyEvents = ['tick', 'beforeUpdate', 'afterUpdate', 'beforeRender', 'afterRender', 'afterTick'];\n this.options = options;\n this.runner = this.Runner.create({\n delta: 1000 / (this.options.fps || 60),\n frameDeltaSmoothing: (this.options.deltaSampleSize ?? 1) > 1,\n });\n }\n\n public start() {\n this.engine = this.Engine.create();\n const world = this.World.create(this.options.world as Matter.IWorldDefinition);\n this.engine.world = world;\n if (this.options.isTest) {\n const ownCanvas = !this.options.canvas;\n const canvas = this.options.canvas ?? document.createElement('canvas');\n if (ownCanvas && this.options.element) {\n this.options.element.appendChild(canvas);\n }\n const resolution = this.options.resolution || 1;\n this.debugRenderer = new MatterPixiDebugRenderer({\n engine: this.engine,\n canvas,\n width: this.game.canvas.width / resolution,\n height: this.game.canvas.height / resolution,\n resolution,\n });\n void this.debugRenderer.init().catch(err => {\n console.error('[plugin-matterjs] MatterPixiDebugRenderer init failed', err);\n });\n this.Runner.run(this.runner, this.engine);\n }\n this.enabled = true;\n this.initMouse();\n this.initCollisionEvents();\n this.initBodyEvents();\n }\n\n public update(e) {\n if (!this.engine) {\n return;\n }\n if (!this.options.isTest) {\n this.Runner.tick(this.runner, this.engine, e.currentTime);\n }\n }\n\n public stop() {\n this.enabled = false;\n this.runner.enabled = false;\n }\n\n public destroy() {\n this.debugRenderer?.destroy();\n this.debugRenderer = null;\n if (this.engine) {\n Matter.Runner.stop(this.runner);\n Matter.Engine.clear(this.engine);\n }\n }\n\n public awake() {\n this.enabled = true;\n this.runner.enabled = true;\n }\n public add(component) {\n const body = this.createBodies(component);\n this.World.add(this.engine.world, [body]);\n component.body = body;\n component.Body = Matter.Body;\n component.PhysicsEngine = this.engine;\n component.Constraint = this.Constraint;\n component.mouseConstraint = this.mouseConstraint;\n component.World = this.World;\n body.component = component;\n }\n\n public change(component: Physics) {\n const newBody = this.createBodies(component);\n this.World.remove(this.engine.world, component.body, true);\n this.World.add(this.engine.world, [newBody]);\n component.body = newBody;\n }\n public remove(component: Physics) {\n this.World.remove(this.engine.world, component.body, true);\n component.body = undefined;\n }\n\n private createBodies(params): any {\n const body = this.bodiesFactory.create(params) as PhysicsLinkedBody;\n return body;\n }\n\n private initCollisionEvents() {\n (this.collisionEvents as Array<'collisionStart' | 'collisionActive' | 'collisionEnd'>).forEach(eventName => {\n Matter.Events.on(this.engine, eventName, (event: Matter.IEventCollision<Matter.Engine>) => {\n const pairs = event.pairs ?? [];\n for (let i = 0; i < pairs.length; i++) {\n const pair = pairs[i];\n const { bodyA, bodyB } = pair;\n const componentA: Component = (bodyA as PhysicsLinkedBody).component;\n const componentB: Component = (bodyB as PhysicsLinkedBody).component;\n componentA.emit(eventName, componentB.gameObject, componentA.gameObject);\n componentB.emit(eventName, componentA.gameObject, componentB.gameObject);\n }\n });\n });\n }\n\n private initMouse() {\n if (this.options.mouse && this.options.mouse.open) {\n const mouse = Matter.Mouse.create(this.game.canvas);\n let options = this.options.mouse.constraint ? {\n mouse,\n constraint: this.options.mouse.constraint\n } : {\n mouse\n };\n this.mouseConstraint = Matter.MouseConstraint.create(this.engine, options);\n this.World.add(this.engine.world, this.mouseConstraint);\n }\n }\n\n private initBodyEvents() {\n this.bodyEvents.forEach(eventName => {\n Matter.Events.on(this.engine, eventName, e => {\n const bodies = e.source.world.bodies;\n bodies.forEach(body => {\n const linked = body as PhysicsLinkedBody;\n linked.component?.emit(eventName, body, linked.component.gameObject);\n });\n });\n });\n }\n}\n","import { System, decorators, OBSERVER_TYPE, Transform } from '@combos-fun/engine';\nimport type { ComponentChanged } from \"@combos-fun/engine\";\nimport PhysicsEngine from './PhysicsEngine';\nimport { Physics } from './Physics';\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends Object ? DeepPartial<T[P]> : T[P];\n}\n\nexport interface PhysicsSystemParams {\n resolution?: number\n fps?: number\n isTest?: boolean\n element?: HTMLElement\n canvas?: HTMLCanvasElement\n deltaSampleSize?: number\n mouse?: {\n open: boolean\n constraint?: Matter.Constraint\n }\n world: DeepPartial<Matter.IWorldDefinition>\n}\n\n@decorators.componentObserver({\n Physics: [{ prop: ['bodyParams'], deep: true }],\n Transform: ['_parent'],\n})\nexport default class PhysicsSystem extends System<PhysicsSystemParams> {\n static systemName = 'PhysicsSystem';\n private engine: PhysicsEngine;\n\n /**\n * System init: configure params before the game starts.\n * @param param init params\n */\n init(param?: PhysicsSystemParams) {\n this.engine = new PhysicsEngine(this.game, param);\n this.game.canvas.setAttribute('data-pixel-ratio', (param.resolution || '1') as string);\n }\n /**\n * Called when the System is installed; if the game has not started, it runs when the\n * game starts. Use it for setup work such as initializing data.\n */\n awake() { }\n\n /**\n * Called after the System is installed and all systems' `awake` have run.\n */\n start() {\n this.engine.start();\n }\n /**\n * Called on every game loop; can perform operations and change component properties.\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 Physics) {\n switch (changed.type) {\n case OBSERVER_TYPE.ADD: {\n if (changed.gameObject.transform.parent && !changed.gameObject.getComponent(Physics).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 switch (changed.type) {\n case OBSERVER_TYPE.CHANGE: {\n if ((changed.component as Transform).parent) {\n let physics = changed.gameObject.getComponent(Physics);\n if (physics && !physics.body) {\n this.engine.add(physics);\n }\n } else {\n let physics = changed.gameObject.getComponent(Physics);\n physics && this.engine.remove(physics);\n }\n }\n }\n }\n }\n /**\n * Like `update`, but called after every System's and component's `update` has run.\n */\n lateUpdate() { }\n /**\n * Called when the game starts or resumes playing after a pause.\n */\n onResume() {\n if (!this.engine.enabled) {\n this.engine.awake();\n }\n }\n /**\n * Called when the game is paused.\n */\n onPause() {\n this.engine.stop();\n }\n /**\n * Called when the system is destroyed.\n */\n onDestroy() {\n this.engine?.destroy();\n }\n}\n","/** Auto-generated by scripts/build-package.mjs — do not edit. */\n\nimport PhysicsSystem from './PhysicsSystem';\n\nObject.assign(PhysicsSystem, {\n packageName: \"@combos-fun/plugin-matterjs\",\n packageVersion: \"0.0.28\",\n});\n"],"names":["PhysicsSystem"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@combos-fun/plugin-matterjs",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "description": "2D physics",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-matterjs.esm.js",
@@ -40,7 +40,7 @@
40
40
  "matter-js": "^0.20.0",
41
41
  "pixi.js": "^8.18.1",
42
42
  "poly-decomp": "^0.3.0",
43
- "@combos-fun/engine": "0.0.27"
43
+ "@combos-fun/engine": "0.0.29"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "node ../../scripts/build-package.mjs"