diff --git a/demo/dev.html b/demo/dev.html index ec8ec82..8cd6986 100644 --- a/demo/dev.html +++ b/demo/dev.html @@ -35,6 +35,7 @@ + diff --git a/demo/js/Demo.js b/demo/js/Demo.js index 31f9bbe..53d7de6 100644 --- a/demo/js/Demo.js +++ b/demo/js/Demo.js @@ -123,8 +123,6 @@ Demo.reset(); - //_engine.timing.timeScale = 0; - World.add(_world, [ Bodies.rectangle(200, 200, 100, 100, { chamfer: { @@ -576,7 +574,88 @@ var renderOptions = _engine.render.options; renderOptions.showVelocity = true; - //renderOptions.showAngleIndicator = false; + }; + + Demo.timescale = function() { + var _world = _engine.world; + + Demo.reset(); + + var explosion = function(engine) { + var bodies = Composite.allBodies(engine.world); + + for (var i = 0; i < bodies.length; i++) { + var body = bodies[i]; + + if (!body.isStatic && body.position.y >= 500) { + var forceMagnitude = 0.04 * body.mass; + + Body.applyForce(body, { x: 0, y: 0 }, { + x: (forceMagnitude + Math.random() * forceMagnitude) * Common.choose([1, -1]), + y: -forceMagnitude + Math.random() * -forceMagnitude + }); + } + } + }; + + var timeScaleTarget = 1, + counter = 0; + + _sceneEvents.push( + Events.on(_engine, 'tick', function(event) { + // tween the timescale for bullet time slow-mo + _engine.timing.timeScale += (timeScaleTarget - _engine.timing.timeScale) * 0.05; + + counter += 1; + + // every 1.5 sec + if (counter >= 60 * 1.5) { + + // flip the timescale + if (timeScaleTarget < 1) { + timeScaleTarget = 1; + } else { + timeScaleTarget = 0.05; + } + + // create some random forces + explosion(_engine); + + // reset counter + counter = 0; + } + }) + ); + + var bodyOptions = { + frictionAir: 0, + friction: 0.0001, + restitution: 0.8 + }; + + // add some small bouncy circles... remember Swordfish? + World.add(_world, Composites.stack(20, 100, 15, 3, 20, 40, function(x, y, column, row) { + return Bodies.circle(x, y, Common.random(10, 20), bodyOptions); + })); + + // add some larger random bouncy objects + World.add(_world, Composites.stack(50, 50, 8, 3, 0, 0, function(x, y, column, row) { + switch (Math.round(Common.random(0, 1))) { + + case 0: + if (Math.random() < 0.8) { + return Bodies.rectangle(x, y, Common.random(20, 50), Common.random(20, 50), bodyOptions); + } else { + return Bodies.rectangle(x, y, Common.random(80, 120), Common.random(20, 30), bodyOptions); + } + break; + case 1: + return Bodies.polygon(x, y, Math.round(Common.random(4, 8)), Common.random(20, 50), bodyOptions); + + } + })); + + var renderOptions = _engine.render.options; }; Demo.stack = function() {