diff --git a/examples/bunnymark/bunny.png b/examples/bunnymark/bunny.png new file mode 100644 index 00000000..79c31675 Binary files /dev/null and b/examples/bunnymark/bunny.png differ diff --git a/examples/bunnymark/config.js b/examples/bunnymark/config.js new file mode 100644 index 00000000..58000d55 --- /dev/null +++ b/examples/bunnymark/config.js @@ -0,0 +1,5 @@ +return { + title:"Bunnymark", + width:1200, + height:600, +} diff --git a/examples/bunnymark/main.js b/examples/bunnymark/main.js new file mode 100644 index 00000000..ec98310b --- /dev/null +++ b/examples/bunnymark/main.js @@ -0,0 +1,69 @@ +var draw = use('draw2d') +var render = use('render') +var graphics = use('graphics') +var sprite = use('sprite') +var geom = use('geometry') +var input = use('controller') +var config = use('config') + +var bunnyTex = graphics.texture("bunny") + +// We'll store our bunnies in an array of objects: { x, y, vx, vy } +var bunnies = [] + +// Start with some initial bunnies: +for (var i = 0; i < 100; i++) { + bunnies.push({ + x: Math.random() * config.width, + y: Math.random() * config.height, + vx: (Math.random() * 300) - 150, + vy: (Math.random() * 300) - 150 + }) +} + +var fpsSamples = [] +var fpsAvg = 0 + +this.update = function(dt) { + // Compute FPS average over the last 60 frames: + var currentFPS = 1 / dt + fpsSamples.push(currentFPS) + if (fpsSamples.length > 60) fpsSamples.shift() + var sum = 0 + for (var f of fpsSamples) sum += f + fpsAvg = sum / fpsSamples.length + + // If left mouse is down, spawn some more bunnies: + var mouse = input.mousestate() + if (mouse.left) + for (var i = 0; i < 50; i++) { + bunnies.push({ + x: mouse.x, + y: mouse.y, + vx: (Math.random() * 300) - 150, + vy: (Math.random() * 300) - 150 + }) + } + + // Update bunny positions and bounce them inside the screen: + for (var i = 0; i < bunnies.length; i++) { + var b = bunnies[i] + b.x += b.vx * dt + b.y += b.vy * dt + + // Bounce off left/right edges + if (b.x < 0) { b.x = 0; b.vx = -b.vx } + else if (b.x > config.width) { b.x = config.width; b.vx = -b.vx } + + // Bounce off bottom/top edges + if (b.y < 0) { b.y = 0; b.vy = -b.vy } + else if (b.y > config.height) { b.y = config.height; b.vy = -b.vy } + } +} + +this.hud = function() { + draw.images(bunnyTex, bunnies) + + var msg = 'FPS: ' + fpsAvg.toFixed(2) + ' Bunnies: ' + bunnies.length + draw.text(msg, {x:0, y:0, width:config.width, height:40}, undefined, 0, Color.white, 0) +}