74 lines
1.7 KiB
JavaScript
74 lines
1.7 KiB
JavaScript
(() => {
|
|
const { Engine, Render, Runner } = Matter;
|
|
|
|
const create = ({
|
|
sceneEl,
|
|
width,
|
|
height,
|
|
background = "transparent",
|
|
wireframes = false,
|
|
showAngleIndicator = false,
|
|
}) => {
|
|
const engine = Engine.create();
|
|
const render = Render.create({
|
|
element: sceneEl,
|
|
engine,
|
|
options: {
|
|
width,
|
|
height,
|
|
wireframes,
|
|
background,
|
|
showAngleIndicator,
|
|
pixelRatio: window.devicePixelRatio || 1,
|
|
},
|
|
});
|
|
Render.run(render);
|
|
|
|
const runner = Runner.create();
|
|
Runner.run(runner, engine);
|
|
let runnerActive = true;
|
|
|
|
const startRunner = () => {
|
|
if (!runnerActive) {
|
|
Runner.run(runner, engine);
|
|
runnerActive = true;
|
|
}
|
|
};
|
|
|
|
const stopRunner = () => {
|
|
if (runnerActive) {
|
|
Runner.stop(runner);
|
|
runnerActive = false;
|
|
}
|
|
};
|
|
|
|
const setRenderSize = (nextWidth, nextHeight) => {
|
|
const pixelRatio = window.devicePixelRatio || 1;
|
|
render.options.width = nextWidth;
|
|
render.options.height = nextHeight;
|
|
render.options.pixelRatio = pixelRatio;
|
|
render.canvas.style.width = `${nextWidth}px`;
|
|
render.canvas.style.height = `${nextHeight}px`;
|
|
render.canvas.width = nextWidth * pixelRatio;
|
|
render.canvas.height = nextHeight * pixelRatio;
|
|
Render.setPixelRatio(render, pixelRatio);
|
|
render.bounds.min.x = 0;
|
|
render.bounds.min.y = 0;
|
|
render.bounds.max.x = nextWidth;
|
|
render.bounds.max.y = nextHeight;
|
|
Render.lookAt(render, render.bounds);
|
|
};
|
|
|
|
return {
|
|
engine,
|
|
render,
|
|
runner,
|
|
startRunner,
|
|
stopRunner,
|
|
setRenderSize,
|
|
};
|
|
};
|
|
|
|
window.PhysilinksEngine = { create };
|
|
})();
|