@combos-fun/plugin-matterjs 0.0.13 → 0.0.14

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.
@@ -279,7 +279,7 @@ class PhysicsEngine {
279
279
  }
280
280
  }
281
281
 
282
- let PhysicsSystem = class PhysicsSystem extends engine.System {
282
+ let PhysicsSystem$1 = class PhysicsSystem extends engine.System {
283
283
  static { this.systemName = 'PhysicsSystem'; }
284
284
  /**
285
285
  * System 初始化用,可以配置参数,游戏未开始
@@ -386,14 +386,20 @@ let PhysicsSystem = class PhysicsSystem extends engine.System {
386
386
  this.engine?.destroy();
387
387
  }
388
388
  };
389
- PhysicsSystem = tslib.__decorate([
389
+ PhysicsSystem$1 = tslib.__decorate([
390
390
  engine.decorators.componentObserver({
391
391
  Physics: [{ prop: ['bodyParams'], deep: true }],
392
392
  Transform: ['_parent'],
393
393
  })
394
- ], PhysicsSystem);
395
- var PhysicsSystem_default = PhysicsSystem;
394
+ ], PhysicsSystem$1);
395
+ var PhysicsSystem = PhysicsSystem$1;
396
+
397
+ /** Auto-generated by scripts/build-package.mjs — do not edit. */
398
+ Object.assign(PhysicsSystem, {
399
+ packageName: "@combos-fun/plugin-matterjs",
400
+ packageVersion: "0.0.14",
401
+ });
396
402
 
397
403
  exports.Physics = Physics;
398
- exports.PhysicsSystem = PhysicsSystem_default;
404
+ exports.PhysicsSystem = PhysicsSystem;
399
405
  //# sourceMappingURL=plugin-matterjs.cjs.js.map
@@ -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"],"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"],"names":["PhysicsType","Component","Matter","Application","Graphics","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; // 斜切角\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.14\",\n});\n"],"names":["PhysicsType","Component","Matter","Application","Graphics","PhysicsSystem","System","OBSERVER_TYPE","__decorate","decorators"],"mappings":";;;;;;;;;;;AAEYA;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,EAJWA,mBAAW,KAAXA,mBAAW,GAAA,EAAA,CAAA,CAAA;AAsBjB,MAAO,OAAQ,SAAQC,gBAAwB,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,QAAAC,uBAAM,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,GAAGA,uBAAM,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,KAAKF,mBAAW,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,KAAKA,mBAAW,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,KAAKA,mBAAW,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,IAAIG,mBAAW,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,IAAIC,gBAAQ,EAAE;QAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAAF,uBAAM,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,GAAGA,uBAAM,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,QAAAA,uBAAM,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,GAAGA,uBAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAGA,uBAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE;AACxC,QAAA,IAAI,CAAC,MAAM,GAAGA,uBAAM,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAGA,uBAAM,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;YACfA,uBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/BA,uBAAM,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,GAAGA,uBAAM,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,YAAAA,uBAAM,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,GAAGA,uBAAM,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,GAAGA,uBAAM,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,YAAAA,uBAAM,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,IAAMG,eAAa,GAAnB,MAAM,aAAc,SAAQC,aAA2B,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,KAAKC,oBAAa,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,KAAKA,oBAAa,CAAC,MAAM,EAAE;oBACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;oBACrC;gBACF;AACA,gBAAA,KAAKA,oBAAa,CAAC,MAAM,EAAE;oBACzB;gBACF;;QAEJ;aAAO;AACL,YAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAKA,oBAAa,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;;AA3GmBF,eAAa,GAAAG,gBAAA,CAAA;IAJjCC,iBAAU,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,EAAAJ,eAAa,CA4GjC;oBA5GoBA,eAAa;;AC3BlC;AAIA,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;AAC3B,IAAA,WAAW,EAAE,6BAA6B;AAC1C,IAAA,cAAc,EAAE,QAAQ;AACzB,CAAA,CAAC;;;;;"}
@@ -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,r=n(s);exports.PhysicsType=void 0,(o=exports.PhysicsType||(exports.PhysicsType={})).RECTANGLE="rectangle",o.CIRCLE="circle",o.POLYGON="polygon";class a 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(){r.default.World.remove(this.PhysicsEngine.world,this.body,!0)}}class h{constructor(){this.Bodies=r.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,r=i.position?i.position.y:n.y,a=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(a,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,r,e,n,i.bodyOptions);break}case exports.PhysicsType.CIRCLE:{const e=i.radius??c;t=this.Bodies.circle(o,r,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,r,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),r.default.Events.on(this.engine,"afterUpdate",this.onAfterUpdate)}redraw(){const e=this.graphics;if(!e)return;e.clear();const t=r.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(){r.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=r.default.Engine,this.World=r.default.World,this.bodiesFactory=new h,this.Runner=r.default.Runner,this.Constraint=r.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&&(r.default.Runner.stop(this.runner),r.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=r.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=>{r.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,r=n.component,a=o.component;r.emit(e,a.gameObject,r.gameObject),a.emit(e,r.gameObject,a.gameObject)}})})}initMouse(){if(this.options.mouse&&this.options.mouse.open){const e=r.default.Mouse.create(this.game.canvas);let t=this.options.mouse.constraint?{mouse:e,constraint:this.options.mouse.constraint}:{mouse:e};this.mouseConstraint=r.default.MouseConstraint.create(this.engine,t),this.World.add(this.engine.world,this.mouseConstraint)}}initBodyEvents(){this.bodyEvents.forEach(e=>{r.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 a)switch(e.type){case t.OBSERVER_TYPE.ADD:e.gameObject.transform.parent&&!e.gameObject.getComponent(a).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(a);t&&!t.body&&this.engine.add(t)}else{let t=e.gameObject.getComponent(a);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;exports.Physics=a,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.14"}),exports.Physics=r,exports.PhysicsSystem=p;
@@ -386,7 +386,13 @@ PhysicsSystem = __decorate([
386
386
  Transform: ['_parent'],
387
387
  })
388
388
  ], PhysicsSystem);
389
- var PhysicsSystem_default = PhysicsSystem;
389
+ var PhysicsSystem$1 = PhysicsSystem;
390
390
 
391
- export { Physics, PhysicsSystem_default as PhysicsSystem, PhysicsType };
391
+ /** Auto-generated by scripts/build-package.mjs do not edit. */
392
+ Object.assign(PhysicsSystem$1, {
393
+ packageName: "@combos-fun/plugin-matterjs",
394
+ packageVersion: "0.0.14",
395
+ });
396
+
397
+ export { Physics, PhysicsSystem$1 as PhysicsSystem, PhysicsType };
392
398
  //# sourceMappingURL=plugin-matterjs.esm.js.map
@@ -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"],"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"],"names":[],"mappings":"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"}
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.14\",\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.13",
3
+ "version": "0.0.14",
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.13"
43
+ "@combos-fun/engine": "0.0.14"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "node ../../scripts/build-package.mjs"