UNPKG

miaam

Version:

Miaam Web Game Framework

57 lines (53 loc) 1.81 kB
import { Bodies, Body, Composite, Events } from 'matter-js'; import PhysicsManager from '../../manager/Physics.manager.js'; import { constructPropertiesMap } from '../../util/layer.js'; import Layer from './layer.js'; // FIXME: Object group class ObjectGroup extends Layer { constructBodies(map) { const { objects: objectsArray } = this.data; const objectsMap = {}; objectsArray.forEach((object) => { object.properties = constructPropertiesMap(object.properties); objectsMap[object.name] = object; if (this.properties.physics === true) { const { x, y, width, height } = object; const { isStatic, isSensor } = this.properties; const body = Bodies.rectangle( x + (width - map.tilewidth) / 2, y + (height - map.tileheight) / 2, width, height, { label: object.name, isStatic, } ); if (isSensor) { Body.set(body, 'isSensor', true); Events.on(PhysicsManager.instance.engine, 'collisionStart', (event) => { const pairs = event.pairs[0]; if (pairs.bodyA.label === object.name) { const eventTrigger = new CustomEvent(`collisionStart.${object.name}`, { detail: event }); // setTimeout(() => { PhysicsManager.instance.events.dispatchEvent(eventTrigger); // }, 0); } }); Events.on(PhysicsManager.instance.engine, 'collisionEnd', (event) => { const pairs = event.pairs[0]; if (pairs.bodyA.label === object.name) { const eventTrigger = new CustomEvent(`collisionEnd.${object.name}`, { detail: event }); // setTimeout(() => { PhysicsManager.instance.events.dispatchEvent(eventTrigger); // }, 0); } }); } Composite.add(this.composite, body); } }); this.data.objects = objectsMap; } } export default ObjectGroup;