UNPKG

@dill-pixel/plugin-matter-physics

Version:

Matter Physics

1 lines 35.4 kB
{"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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"}