Skip to content
Snippets Groups Projects
Commit 2f8ceb9d authored by syuilo's avatar syuilo
Browse files

Better physics

parent e05ae5eb
No related branches found
No related tags found
No related merge requests found
......@@ -165,10 +165,6 @@ export default defineComponent({
this.easterEggReady = false;
this.$refs.icon.vanillaTilt.destroy();
this.easterEggEngine = physics(this.$refs.about);
setTimeout(() => {
this.easterEggEngine.stop();
}, 1000 * 60 * 3);
}
}
});
......
import Matter from 'matter-js';
import * as Matter from 'matter-js';
export function physics(container: HTMLElement) {
const containerWidth = container.offsetWidth;
......@@ -12,8 +12,13 @@ export function physics(container: HTMLElement) {
container.style.height = `${containerHeight}px`;
// create engine
const engine = Matter.Engine.create();
const world = engine.world;
const engine = Matter.Engine.create({
constraintIterations: 4,
positionIterations: 8,
velocityIterations: 8,
});
const world = engine.world;
// create renderer
const render = Matter.Render.create({
......@@ -24,20 +29,6 @@ export function physics(container: HTMLElement) {
height: containerHeight,
background: 'transparent', // transparent to hide
wireframeBackground: 'transparent', // transparent to hide
hasBounds: false,
enabled: true,
wireframes: false,
showSleeping: true,
showDebug: false,
showBroadphase: false,
showBounds: false,
showVelocity: false,
showCollisions: false,
showAxes: false,
showPositions: false,
showAngleIndicator: false,
showIds: false,
showShadows: false
}
});
......@@ -48,20 +39,13 @@ export function physics(container: HTMLElement) {
const runner = Matter.Runner.create();
Matter.Runner.run(runner, engine);
// add walls
const wallopts = {
isStatic: true,
restitution: 0.2,
friction: 1
};
const groundopts = {
const groundThickness = 1024;
const ground = Matter.Bodies.rectangle(containerCenterX, containerHeight + (groundThickness / 2), containerWidth, groundThickness, {
isStatic: true,
restitution: 0.1,
friction: 2
};
});
const groundThickness = 100;
const ground = Matter.Bodies.rectangle(containerCenterX, containerHeight + (groundThickness / 2), containerWidth, groundThickness, groundopts);
//const wallRight = Matter.Bodies.rectangle(window.innerWidth+50, window.innerHeight/2, 100, window.innerHeight, wallopts);
//const wallLeft = Matter.Bodies.rectangle(-50, window.innerHeight/2, 100, window.innerHeight, wallopts);
......@@ -80,13 +64,6 @@ export function physics(container: HTMLElement) {
objEl.offsetLeft + (objEl.offsetWidth / 2),
objEl.offsetTop + (objEl.offsetHeight / 2),
Math.max(objEl.offsetWidth, objEl.offsetHeight) / 2,
{
restitution: 0.1,
friction: 4,
frictionAir: 0,
frictionStatic: 50,
density: 100,
}
);
} else {
const style = window.getComputedStyle(objEl);
......@@ -96,12 +73,7 @@ export function physics(container: HTMLElement) {
objEl.offsetWidth,
objEl.offsetHeight,
{
restitution: 0.1,
friction: 4,
frictionAir: 0,
frictionStatic: 50,
density: 100,
chamfer: { radius: parseInt(style.borderRadius, 10) },
chamfer: { radius: parseInt(style.borderRadius, 10) },
}
);
}
......@@ -117,7 +89,7 @@ export function physics(container: HTMLElement) {
const mouseConstraint = Matter.MouseConstraint.create(engine, {
mouse: mouse,
constraint: {
stiffness: 1,
stiffness: 0.05,
render: {
visible: false
}
......@@ -159,10 +131,18 @@ export function physics(container: HTMLElement) {
}
}
// 奈落に落ちたオブジェクトは消す
const intervalId = setInterval(() => {
for (const obj of objs) {
if (obj.position.y > (containerHeight + 1024)) Matter.World.remove(world, obj);
}
}, 1000 * 10);
return {
stop: () => {
stop = true;
Matter.Runner.stop(runner);
clearInterval(intervalId);
}
};
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment