{"version":3,"file":"dill-pixel-plugin-matter-physics.mjs","sources":["../src/System.ts","../src/version.ts","../src/MatterPhysicsPlugin.ts","../src/CompositeEntity.ts","../src/Entity.ts"],"sourcesContent":["import { Application, IApplication, Logger } from 'dill-pixel';\nimport Matter, { Bodies, Body, Engine, Runner, World } from 'matter-js';\nimport { Container, Graphics, Rectangle, Ticker } from 'pixi.js';\n\nimport { IMatterPhysicsObject } from './interfaces';\nimport { MatterPhysicsPluginOptions } from './MatterPhysicsPlugin';\nimport { MatterBodyLike } from './types';\n\nexport class System {\n  public static pluginOptions: Partial<MatterPhysicsPluginOptions>;\n  public static container: Container;\n\n  private static _options: Partial<MatterPhysicsPluginOptions>;\n  private static _objects: Set<IMatterPhysicsObject> = new Set();\n  private static _debugGraphics: Graphics | null = null;\n  private static _walls: Body[];\n  private static _debug: boolean = false;\n\n  private static _ceiling: Body;\n  private static _floor: Body;\n  private static _leftWall: Body;\n  private static _rightWall: Body;\n\n  static get ceiling() {\n    return System._ceiling;\n  }\n\n  static get floor() {\n    return System._floor;\n  }\n\n  static get leftWall() {\n    return System._leftWall;\n  }\n\n  static get rightWall() {\n    return System._rightWall;\n  }\n\n  static get walls() {\n    return System._walls;\n  }\n\n  static get debug() {\n    return System._debug;\n  }\n\n  static set debug(value: boolean) {\n    System._debug = value;\n    if (!System._debug && System._debugGraphics) {\n      System._debugGraphics.destroy();\n      System._debugGraphics.parent?.removeChild(System._debugGraphics);\n      System._debugGraphics = null;\n    }\n  }\n\n  private static _enabled: boolean = false;\n\n  static get enabled() {\n    return System._enabled;\n  }\n\n  static set enabled(value: boolean) {\n    System._enabled = value;\n    System.app.ticker.remove(System.update);\n    if (System._enabled) {\n      if (System._engine) {\n        Runner.run(System._engine);\n      }\n      System.app.ticker.add(System.update);\n    } else {\n      if (System._runner) {\n        Runner.stop(System._runner);\n      }\n      System.app.ticker.remove(System.update);\n    }\n  }\n\n  private static _runner: Runner;\n\n  static get world() {\n    return World;\n  }\n\n  static get api() {\n    return {\n      axes: Matter.Axes,\n      bodies: Matter.Bodies,\n      body: Matter.Body,\n      common: Matter.Common,\n      composite: Matter.Composite,\n      composites: Matter.Composites,\n      constraint: Matter.Constraint,\n      contact: Matter.Contact,\n      engine: Matter.Engine,\n      events: Matter.Events,\n      runner: Matter.Runner,\n      sleeping: Matter.Sleeping,\n      vector: Matter.Vector,\n      vertices: Matter.Vertices,\n      world: Matter.World,\n    };\n  }\n\n  static get runner() {\n    return System._runner;\n  }\n\n  private static _engine: Engine;\n\n  static get engine() {\n    return System._engine;\n  }\n\n  private static _bounds: Rectangle;\n\n  static get bounds() {\n    return System._bounds;\n  }\n\n  static set bounds(bounds: Rectangle) {\n    System._bounds = bounds;\n  }\n\n  private static get app(): IApplication {\n    return Application.getInstance();\n  }\n\n  static destroy() {\n    Logger.warn('MatterPhysicsPlugin:: Destroying Matter Physics System');\n    System.enabled = false;\n    try {\n      World.clear(System._engine?.world, false);\n    } catch (e) {\n      Logger.warn(e);\n    }\n    try {\n      Engine.clear(System._engine);\n    } catch (e) {\n      Logger.warn(e);\n    }\n    try {\n      Runner.stop(System._runner);\n    } catch (e) {\n      Logger.warn(e);\n    }\n    try {\n      System._objects.clear();\n      System._debugGraphics?.destroy({ children: true });\n      System._debugGraphics = null;\n    } catch (e) {\n      Logger.warn(e);\n    }\n  }\n\n  static initialize(options: Partial<MatterPhysicsPluginOptions>) {\n    System._options = { ...System.pluginOptions, ...options };\n    System._engine = Engine.create(System._options.engine);\n    System._runner = Runner.create(System._options.runner);\n    Runner.run(System._engine);\n\n    if (System._options.container) {\n      System.container = System._options.container;\n    }\n\n    if (System._options.worldBounds) {\n      System.bounds = System._options.worldBounds;\n    }\n    if (System._options.createWalls) {\n      const thickness = System._options.createWalls.thickness ?? 10;\n      const { width, height } = System.bounds;\n      const walls = [];\n      const wallOptions = {\n        isStatic: true,\n        density: 1000,\n        friction: 0,\n        frictionStatic: 0,\n      };\n\n      if (System._options.createWalls.top) {\n        const ceiling = Bodies.rectangle(width / 2, -thickness / 2, width, thickness, wallOptions);\n        walls.push(ceiling);\n        System._ceiling = ceiling;\n      }\n      if (System._options.createWalls.bottom) {\n        const floor = Bodies.rectangle(width / 2, height + thickness / 2, width, thickness, wallOptions);\n        walls.push(floor);\n        System._floor = floor;\n      }\n      if (System._options.createWalls.left) {\n        const leftWall = Bodies.rectangle(-thickness / 2, height / 2, thickness, height + thickness, wallOptions);\n        walls.push(leftWall);\n        System._leftWall = leftWall;\n      }\n      if (System._options.createWalls.right) {\n        const rightWall = Bodies.rectangle(\n          width + thickness / 2,\n          height / 2,\n          thickness,\n          height + thickness,\n          wallOptions,\n        );\n        walls.push(rightWall);\n        System._rightWall = rightWall;\n      }\n      System._walls = walls;\n      System.addToWorld(...walls);\n    }\n\n    if (System._options.debug) {\n      System.debug = true;\n    }\n  }\n\n  static addToWorld(...objects: (IMatterPhysicsObject | MatterBodyLike)[]) {\n    objects.forEach((obj) => {\n      let body: MatterBodyLike;\n      // eslint-disable-next-line no-prototype-builtins\n      if (obj.hasOwnProperty('body')) {\n        body = (obj as IMatterPhysicsObject).body;\n        this._objects.add(obj as IMatterPhysicsObject);\n      } else {\n        body = obj as MatterBodyLike;\n      }\n      World.add(System._engine.world, body);\n    });\n  }\n\n  static removeFromWorld(...objects: (IMatterPhysicsObject | MatterBodyLike)[]) {\n    objects.forEach((obj) => {\n      let body: MatterBodyLike;\n      // eslint-disable-next-line no-prototype-builtins\n      if (obj.hasOwnProperty('body')) {\n        body = (obj as IMatterPhysicsObject).body;\n        this._objects.add(obj as IMatterPhysicsObject);\n      } else {\n        body = obj as MatterBodyLike;\n      }\n      World.remove(this._engine.world, body);\n      System._objects.delete(obj as IMatterPhysicsObject);\n    });\n  }\n\n  static drawDebug() {\n    if (!System.enabled) {\n      return;\n    }\n    if (!System._debugGraphics) {\n      System._debugGraphics = new Graphics();\n      System._debugGraphics.zIndex = 1000;\n      System._debugGraphics.sortableChildren = true;\n    }\n    if (System.container && !System._debugGraphics.parent) {\n      System.container.addChild(System._debugGraphics);\n    }\n    System._debugGraphics.clear();\n    System._objects.forEach((obj) => {\n      const body = obj.body as Body;\n      const color = obj?.debugColor || 0x29c5f6;\n\n      // For compound bodies, draw each part\n      if (body.parts && body.parts.length > 1) {\n        // Skip index 0 as it's the parent body\n        for (let i = 1; i < body.parts.length; i++) {\n          const part = body.parts[i];\n          if (System._debugGraphics && part.vertices.length > 0) {\n            System._debugGraphics.moveTo(part.vertices[0].x, part.vertices[0].y);\n\n            for (let j = 1; j < part.vertices.length; j++) {\n              System._debugGraphics.lineTo(part.vertices[j].x, part.vertices[j].y);\n            }\n\n            System._debugGraphics.lineTo(part.vertices[0].x, part.vertices[0].y);\n            System._debugGraphics.fill({ color, alpha: 0.25 });\n            System._debugGraphics.stroke({ color: 0xff0000, pixelLine: true });\n          }\n        }\n      } else {\n        // Original single body drawing\n        const vertices = body.vertices;\n        if (System._debugGraphics && vertices.length > 0) {\n          System._debugGraphics.moveTo(vertices[0].x, vertices[0].y);\n\n          for (let j = 1; j < vertices.length; j++) {\n            System._debugGraphics.lineTo(vertices[j].x, vertices[j].y);\n          }\n\n          System._debugGraphics.lineTo(vertices[0].x, vertices[0].y);\n          System._debugGraphics.fill({ color, alpha: 0.25 });\n          System._debugGraphics.stroke({ color: 0xff0000, pixelLine: true });\n        }\n      }\n    });\n    System._walls?.forEach((wall) => {\n      const body = wall as Body;\n      const vertices = body.vertices;\n      if (System._debugGraphics && vertices.length > 0) {\n        System._debugGraphics.moveTo(vertices[0].x, vertices[0].y);\n        for (let j = 1; j < vertices.length; j++) {\n          System._debugGraphics.lineTo(vertices[j].x, vertices[j].y);\n        }\n        System._debugGraphics.lineTo(vertices[0].x, vertices[0].y);\n        System._debugGraphics.fill({ color: 0x00ff00, alpha: 1 });\n        System._debugGraphics.stroke({ color: 0xff0000, pixelLine: true });\n      }\n    });\n  }\n\n  private static update(ticker: Ticker) {\n    if (!System._enabled) {\n      return;\n    }\n    if (System._engine) {\n      System._objects.forEach((obj) => {\n        obj.update();\n      });\n      if (System.debug) {\n        System.drawDebug();\n      }\n      Engine.update(System._engine, 16.666666666666668, ticker.deltaTime);\n    }\n  }\n}\n","export const version = '6.2.3';\nexport const matterVersion = '0.20.0';","import { Container as DillPixelContainer, IPlugin, Plugin } from 'dill-pixel';\nimport Matter, { IEngineDefinition, IRunnerOptions } from 'matter-js';\nimport { Container, Rectangle } from 'pixi.js';\nimport { System } from './System';\nimport { matterVersion, version } from './version';\nexport interface IMatterPhysicPlugin extends IPlugin {}\nexport interface IMatterPhysicsPlugin extends IPlugin<MatterPhysicsPluginOptions> {\n  readonly system: typeof System;\n  readonly matter: typeof Matter;\n  pause(): void;\n  resume(): void;\n}\n\nexport type MatterPhysicsPluginOptions = {\n  debug: boolean;\n  autoInit: boolean;\n  container?: Container;\n  worldBounds?: Rectangle;\n  createWalls?: { thickness: number; top?: boolean; bottom?: boolean; left?: boolean; right?: boolean };\n  engine: Partial<IEngineDefinition>;\n  runner: Partial<IRunnerOptions>;\n};\n\nconst defaultOptions = {\n  debug: false,\n  autoInit: false,\n  engine: {},\n  runner: {\n    delta: 1000 / 60,\n    isFixed: false,\n    enabled: true,\n  },\n};\n\nexport class MatterPhysicsPlugin extends Plugin<MatterPhysicsPluginOptions> implements IMatterPhysicPlugin {\n  get system(): typeof System {\n    return System;\n  }\n\n  get matter(): typeof Matter {\n    return Matter;\n  }\n\n  pause() {\n    this.system.enabled = false;\n  }\n\n  resume() {\n    this.system.enabled = true;\n  }\n\n  get add() {\n    if (!this.system.container) {\n      throw new Error('Container not set');\n    }\n    try {\n      return (this.system.container as DillPixelContainer).add;\n    } catch (e) {\n      throw new Error('Container is not a Dill Pixel Container');\n    }\n  }\n\n  private hello() {\n    const hello = `%c Dill Pixel Matter Physics Plugin v${version} | %cMatter.js v${matterVersion}`;\n    console.log(\n      hello,\n      'background: rgba(31, 41, 55, 1);color: #74b64c',\n      'background: rgba(31, 41, 55, 1);color: #e91e63',\n    );\n  }\n\n  initialize(options?: Partial<MatterPhysicsPluginOptions>): void | Promise<void> {\n    this._options = {\n      ...defaultOptions,\n      ...options,\n      runner: { ...defaultOptions.runner, ...options?.runner },\n      engine: { ...defaultOptions.engine, ...options?.engine },\n    };\n\n    if (this._options.autoInit) {\n      this.system.initialize(this._options);\n    }\n\n    this.hello();\n  }\n\n  destroy() {\n    if (this.system) {\n      this.system.destroy();\n    }\n    super.destroy();\n  }\n}\n","import { Container } from 'dill-pixel';\nimport { IMatterCompositeObject } from './interfaces';\nimport { System } from './System';\nimport { MatterBodyLike } from './types';\n\nexport class CompositeEntity extends Container implements IMatterCompositeObject {\n  debugColor: number;\n  bodies: MatterBodyLike[] = [];\n  joints: Matter.Constraint[] = [];\n\n  constructor() {\n    super();\n  }\n\n  public get system(): typeof System {\n    return System;\n  }\n\n  createBodies(): void {}\n\n  createJoints(): void {}\n\n  added() {\n    this.createBodies();\n    this.createJoints();\n\n    this.system.api.composite.add(this.system.engine.world, [...this.bodies, ...this.joints]);\n  }\n\n  onRemoved(): void {\n    this.system.api.composite.remove(this.system.engine.world, this.bodies);\n  }\n\n  update(): void {}\n}\n","import { Container, PointLike, resolvePointLike, resolveSizeLike, Size, SizeLike } from 'dill-pixel';\nimport Matter, { Bodies, Body, IBodyDefinition, Vector } from 'matter-js';\n\nimport { Container as PIXIContainer } from 'pixi.js';\nimport { IMatterPhysicsObject } from './interfaces';\nimport { System } from './System';\nimport { MatterBodyType } from './types';\n\nexport type CollisionCallback = (other: Matter.Body) => void;\n\nexport type PartConfig = {\n  type: MatterBodyType;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n\n  bodyDefinition?: Partial<IBodyDefinition>;\n};\n\nexport type EntityConfig = {\n  bodyType?: MatterBodyType;\n  size?: Size;\n  view?: PIXIContainer;\n  bodyDefinition?: Partial<IBodyDefinition>;\n  debugColor?: number;\n  parts?: PartConfig[];\n  rotationBehavior?: 'none' | 'follow' | 'firstPart';\n  offset?: PointLike;\n};\n\nexport class Entity extends Container implements IMatterPhysicsObject {\n  public static readonly DEFAULT_DEBUG_COLOR: number = 0x29c5f6;\n  body: Matter.Body;\n  public view: PIXIContainer;\n  public bodyType: MatterBodyType;\n  public bodyDefinition: Partial<IBodyDefinition> = {};\n  public debugColor: number;\n  protected _offset: { x: number; y: number };\n  protected _isDestroyed: boolean = false;\n  protected isGrounded: boolean = false;\n  protected onLandCallbacks: CollisionCallback[] = [];\n  protected groundSensorHeight: number = 2; // Height of the ground detection sensor\n  protected rotationBehavior: 'none' | 'follow' | 'firstPart' = 'follow';\n\n  public get system(): typeof System {\n    return System;\n  }\n\n  public get velocity(): Vector {\n    return this.body.velocity;\n  }\n\n  public get matter(): typeof Matter {\n    return Matter;\n  }\n\n  public set offset(value: PointLike) {\n    this._offset = resolvePointLike(value);\n  }\n\n  public get offset(): { x: number; y: number } {\n    return this._offset;\n  }\n\n  constructor(public config: Partial<EntityConfig> = {}) {\n    super();\n    if (config.view) {\n      this.view = this.add.existing(config.view);\n    }\n    if (config.bodyType) {\n      this.bodyType = config.bodyType;\n    }\n    if (config.bodyDefinition) {\n      this.bodyDefinition = config.bodyDefinition;\n    }\n\n    if (config.debugColor) {\n      this.debugColor = config.debugColor;\n    }\n    if (config.rotationBehavior) {\n      this.rotationBehavior = config.rotationBehavior;\n    }\n\n    if (config.offset) {\n      this.offset = config.offset;\n    } else {\n      this.offset = { x: 0, y: 0 };\n    }\n  }\n\n  added() {\n    this.createBody();\n    this.system.addToWorld(this);\n    this.setupCollisionDetection();\n  }\n\n  onRemoved(): void {\n    this.system.removeFromWorld(this.body);\n  }\n\n  destroy() {\n    this._isDestroyed = true;\n    this.system.removeFromWorld(this.body);\n    super.destroy();\n  }\n\n  setSize(width: number, height: number) {\n    this.size = [width, height];\n  }\n\n  set size(size: SizeLike) {\n    const s = resolveSizeLike(size);\n    this.config.size = { width: s.width, height: s.height };\n    this.createBody();\n  }\n\n  createBody() {\n    if (this.config.parts && this.config.parts.length > 0) {\n      // Create compound body from parts\n      const parts = this.config.parts.map((part) => {\n        switch (part.type) {\n          case 'rectangle':\n            return Bodies.rectangle(this.x + part.x, this.y + part.y, part.width, part.height, part.bodyDefinition);\n          case 'circle':\n            return Bodies.circle(this.x + part.x, this.y + part.y, part.width * 0.5, part.bodyDefinition);\n          case 'trapezoid':\n            return Bodies.trapezoid(\n              this.x + part.x,\n              this.y + part.y,\n              part.width,\n              part.height,\n              0.5,\n              part.bodyDefinition,\n            );\n          default:\n            return Bodies.rectangle(this.x + part.x, this.y + part.y, part.width, part.height, part.bodyDefinition);\n        }\n      });\n\n      this.body = Body.create({\n        parts,\n        ...this.bodyDefinition,\n      });\n    } else {\n      // Create single body as before\n      const w = this.config.size?.width || this.view.width;\n      const h = this.config.size?.height || this.view.height;\n\n      switch (this.bodyType) {\n        case 'rectangle':\n          this.body = Bodies.rectangle(this.x, this.y, w, h, {\n            ...this.bodyDefinition,\n          });\n          break;\n        case 'circle':\n          this.body = Bodies.circle(this.x, this.y, w * 0.5, {\n            ...this.bodyDefinition,\n          });\n          break;\n        case 'convex':\n          // this.body = Bodies.fromVertices(this.sprite.x, this.sprite.y, this.sprite.width, this.sprite.height);\n          break;\n        case 'trapezoid':\n          this.body = Bodies.trapezoid(this.x, this.y, w, h, 0.5, {\n            ...this.bodyDefinition,\n          });\n          break;\n      }\n    }\n  }\n\n  public setVelocity(v: PointLike) {\n    const velocity = resolvePointLike(v);\n    Matter.Body.setVelocity(this.body, velocity);\n  }\n\n  public setVelocityX(x: number) {\n    Matter.Body.setVelocity(this.body, { x, y: this.body.velocity.y });\n  }\n\n  public setVelocityY(y: number) {\n    Matter.Body.setVelocity(this.body, { x: this.body.velocity.x, y });\n  }\n\n  /**\n   * Sets up collision detection for the entity\n   */\n  protected setupCollisionDetection() {\n    Matter.Events.on(this.system.engine, 'collisionStart', (event) => {\n      event.pairs.forEach((pair) => {\n        if (pair.bodyA === this.body || pair.bodyB === this.body) {\n          const otherBody = pair.bodyA === this.body ? pair.bodyB : pair.bodyA;\n          this.handleCollisionStart(otherBody, pair);\n        }\n      });\n    });\n\n    Matter.Events.on(this.system.engine, 'collisionEnd', (event) => {\n      event.pairs.forEach((pair) => {\n        if (pair.bodyA === this.body || pair.bodyB === this.body) {\n          const otherBody = pair.bodyA === this.body ? pair.bodyB : pair.bodyA;\n          this.handleCollisionEnd(otherBody, pair);\n        }\n      });\n    });\n  }\n\n  /**\n   * Handles the start of a collision\n   */\n  protected handleCollisionStart(otherBody: Matter.Body, pair: Matter.Pair) {\n    // Get collision normal\n    const collision = pair.collision;\n    const normal = collision.normal;\n\n    // Determine if we need to flip the normal based on which body we are\n    const normalY = pair.bodyA === this.body ? normal.y : -normal.y;\n\n    // Consider it a ground collision if the normal is pointing mostly upward relative to us\n    if (normalY < -0.5) {\n      this.isGrounded = true;\n      this.onLandCallbacks.forEach((callback) => callback(otherBody));\n    }\n  }\n\n  /**\n   * Handles the end of a collision\n   */\n  protected handleCollisionEnd(otherBody: Matter.Body, pair: Matter.Pair) {\n    const collision = pair.collision;\n    const normal = collision.normal;\n\n    // Determine if we need to flip the normal based on which body we are\n    const normalY = pair.bodyA === this.body ? normal.y : -normal.y;\n\n    // Only unset grounded if we're ending a ground collision\n    if (normalY < -0.5) {\n      this.isGrounded = false;\n    }\n  }\n\n  /**\n   * Register a callback for when the entity lands\n   */\n  public onLand(callback: CollisionCallback) {\n    this.onLandCallbacks.push(callback);\n  }\n\n  /**\n   * Returns whether the entity is currently on the ground\n   */\n  public getIsGrounded(): boolean {\n    return this.isGrounded;\n  }\n\n  /**\n   * Locks the rotation of the physics body, keeping it upright\n   */\n  public lockRotation() {\n    if (this.body) {\n      Matter.Body.setInertia(this.body, Infinity);\n      Matter.Body.setAngularVelocity(this.body, 0);\n    }\n  }\n\n  update() {\n    if (this._isDestroyed) return;\n    if (this.view && this.body) {\n      // Calculate rotated offset\n      const angle = this.body.angle;\n      if (this.offset.x !== 0 || this.offset.y !== 0) {\n        const cos = Math.cos(angle);\n        const sin = Math.sin(angle);\n        const rotatedOffsetX = this.offset.x * cos - this.offset.y * sin;\n        const rotatedOffsetY = this.offset.x * sin + this.offset.y * cos;\n\n        this.x = this.body.position.x + rotatedOffsetX;\n        this.y = this.body.position.y + rotatedOffsetY;\n      } else {\n        this.x = this.body.position.x;\n        this.y = this.body.position.y;\n      }\n\n      // Handle rotation based on configuration\n      if (this.rotationBehavior !== 'none') {\n        if (this.config.parts && this.config.parts.length > 0) {\n          if (this.rotationBehavior === 'firstPart') {\n            // Use the first part's rotation if it exists\n            this.rotation = this.body.parts[1]?.angle || 0; // parts[0] is the compound body itself\n          } else {\n            // Use the compound body's overall rotation\n            this.rotation = this.body.angle;\n          }\n        } else {\n          // Single body behavior remains unchanged\n          this.rotation = this.body.angle;\n        }\n      }\n    }\n  }\n}\n"],"names":["_System","value","_a","Runner","World","Matter","bounds","Application","Logger","e","Engine","_b","options","thickness","width","height","walls","wallOptions","ceiling","Bodies","floor","leftWall","rightWall","objects","obj","body","Graphics","color","i","part","j","vertices","wall","ticker","System","version","matterVersion","defaultOptions","MatterPhysicsPlugin","Plugin","hello","CompositeEntity","Container","_Entity","config","resolvePointLike","size","s","resolveSizeLike","parts","Body","w","h","v","velocity","x","y","event","pair","otherBody","normal","callback","angle","cos","sin","rotatedOffsetX","rotatedOffsetY","Entity"],"mappings":"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"}