From 0f0ac9392189b09cd8b86ad41d123036ffbb001f Mon Sep 17 00:00:00 2001 From: liabru Date: Sun, 13 Aug 2023 12:56:50 +0100 Subject: [PATCH] added Example.stress4 --- examples/index.js | 1 + examples/stress4.js | 121 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 examples/stress4.js diff --git a/examples/index.js b/examples/index.js index 940f47b..6e1a615 100644 --- a/examples/index.js +++ b/examples/index.js @@ -40,6 +40,7 @@ module.exports = { stress: require('./stress.js'), stress2: require('./stress2.js'), stress3: require('./stress3.js'), + stress4: require('./stress4.js'), svg: require('./svg.js'), terrain: require('./terrain.js'), timescale: require('./timescale.js'), diff --git a/examples/stress4.js b/examples/stress4.js new file mode 100644 index 0000000..bcbf251 --- /dev/null +++ b/examples/stress4.js @@ -0,0 +1,121 @@ +var Example = Example || {}; + +Example.stress4 = function() { + var Engine = Matter.Engine, + Events = Matter.Events, + Render = Matter.Render, + Runner = Matter.Runner, + Composites = Matter.Composites, + Common = Matter.Common, + MouseConstraint = Matter.MouseConstraint, + Mouse = Matter.Mouse, + Composite = Matter.Composite, + Bodies = Matter.Bodies; + + // create engine + var engine = Engine.create({ + positionIterations: 25, + velocityIterations: 35 + }); + + var world = engine.world; + + // create renderer + var render = Render.create({ + element: document.body, + engine: engine, + options: { + width: 800, + height: 600, + showStats: true, + showPerformance: true + } + }); + + Render.run(render); + + // create runner + var runner = Runner.create({ + isFixed: true + }); + + Runner.run(runner, engine); + + // add bodies + var stack = function(scale, columns, rows) { + return Composites.stack(40, 40, columns, rows, 0, 0, function(x, y) { + var sides = Math.round(Common.random(1, 8)); + + switch (Math.round(Common.random(0, 1))) { + case 0: + if (Common.random() < 0.8) { + return Bodies.rectangle(x, y, Common.random(25, 50) * scale, Common.random(25, 50) * scale); + } else { + return Bodies.rectangle(x, y, Common.random(80, 120) * scale, Common.random(25, 30) * scale); + } + case 1: + return Bodies.polygon(x, y, sides, Common.random(25, 50) * scale); + } + }); + }; + + Composite.add(world, [ + stack(0.2, 61, 15), + stack(0.3, 31, 12), + Bodies.rectangle(400, 0, 800, 50, { isStatic: true, render: { visible: false } }), + Bodies.rectangle(400, 600, 800, 50, { isStatic: true, render: { visible: false } }), + Bodies.rectangle(800, 300, 50, 600, { isStatic: true, render: { visible: false } }), + Bodies.rectangle(0, 300, 50, 600, { isStatic: true, render: { visible: false } }) + ]); + + // scene animation + engine.timing.timeScale = 0.9; + engine.gravity.scale = 0.0007; + + Events.on(engine, 'beforeUpdate', function() { + engine.gravity.x = Math.cos(engine.timing.timestamp * 0.0005); + engine.gravity.y = Math.sin(engine.timing.timestamp * 0.0005); + }); + + // add mouse control + var mouse = Mouse.create(render.canvas), + mouseConstraint = MouseConstraint.create(engine, { + mouse: mouse, + constraint: { + stiffness: 0.2, + render: { + visible: false + } + } + }); + + Composite.add(world, mouseConstraint); + + // keep the mouse in sync with rendering + render.mouse = mouse; + + // fit the render viewport to the scene + Render.lookAt(render, { + min: { x: 0, y: 0 }, + max: { x: 800, y: 600 } + }); + + // context for MatterTools.Demo + return { + engine: engine, + runner: runner, + render: render, + canvas: render.canvas, + stop: function() { + Matter.Render.stop(render); + Matter.Runner.stop(runner); + } + }; +}; + +Example.stress4.title = 'Stress 4'; +Example.stress4.for = '>=0.14.2'; + +if (typeof module !== 'undefined') { + module.exports = Example.stress4; +}