0
0
Fork 0
mirror of https://github.com/liabru/matter-js.git synced 2024-11-30 10:20:52 -05:00

added Demo.timescale

This commit is contained in:
liabru 2014-05-04 16:57:27 +01:00
parent 186d839942
commit 1fac632f98
2 changed files with 83 additions and 3 deletions

View file

@ -35,6 +35,7 @@
<option value="wreckingBall">Wrecking Ball</option> <option value="wreckingBall">Wrecking Ball</option>
<option value="rounded">Rounded Corners (Chamfering)</option> <option value="rounded">Rounded Corners (Chamfering)</option>
<option value="views">Views</option> <option value="views">Views</option>
<option value="timescale">Time Scaling</option>
<option value="sprites">Sprites</option> <option value="sprites">Sprites</option>
<option value="pyramid">Pyramid</option> <option value="pyramid">Pyramid</option>
<option value="raycasting">Raycasting</option> <option value="raycasting">Raycasting</option>

View file

@ -123,8 +123,6 @@
Demo.reset(); Demo.reset();
//_engine.timing.timeScale = 0;
World.add(_world, [ World.add(_world, [
Bodies.rectangle(200, 200, 100, 100, { Bodies.rectangle(200, 200, 100, 100, {
chamfer: { chamfer: {
@ -576,7 +574,88 @@
var renderOptions = _engine.render.options; var renderOptions = _engine.render.options;
renderOptions.showVelocity = true; 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() { Demo.stack = function() {