Files
cell/tests/bunnymark.js
John Alanbrook ff2ee3d6db
Some checks failed
Build and Deploy / build-macos (push) Failing after 5s
Build and Deploy / build-windows (CLANG64) (push) Has been cancelled
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled
Build and Deploy / build-linux (push) Has been cancelled
add animation test; help qr API
2025-05-09 12:57:54 -05:00

104 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// bunnymark
var render = use('render')
var os = use('os')
var dim = [500,500]
render.initialize({
width:dim.x,
height:dim.y,
resolution_x:dim.x,
resolution_y:dim.y,
mode:"letterboxed",
refresh: 60,
})
var camera = {
size: [500,500],
transform: os.make_transform(),
fov:50,
near_z: 0,
far_z: 1000,
surface: undefined,
viewport: {x:0,y:0,width:1,height:1},
ortho:true,
anchor:[0,0],
}
var draw = use('draw2d')
var sprite = use('lcdsprite')
var graphics = use('graphics')
var bunny = graphics.texture('tests/bunny')
var center = [0.5,0.5]
var vel = 50
function hsl_to_rgb(h, s, l) {
var c = (1 - Math.abs(2 * l - 1)) * s
var x = c * (1 - Math.abs((h / 60) % 2 - 1))
var m = l - c / 2
var r = 0, g = 0, b = 0
if (h < 60) { r = c; g = x }
else if (h < 120) { r = x; g = c }
else if (h < 180) { g = c; b = x }
else if (h < 240) { g = x; b = c }
else if (h < 300) { r = x; b = c }
else { r = c; b = x }
return [r + m, g + m, b + m, 1] // 01 floats, alpha = 1
}
var bunny_count = 20
for (var i = 0; i < bunny_count; i++) {
var pct = i/bunny_count
var hue = 270 * i / bunny_count
var sp = sprite.create(bunny, {
pos: [Math.random()*dim.x*pct, Math.random()*dim.y*pct],
center,
color: hsl_to_rgb(hue, 0.5, 0.5)
})
sp.dir = [Math.random()*vel, Math.random()*vel]
}
var dt = 0
var fps_samples = []
var fps_window = 10
var fps_update_period = 0.5
var last_fps_update = os.now()
function loop()
{
var now = os.now()
render.clear([22/255,120/255,194/255,255/255])
render.camera(camera)
sprite.forEach(x => x.move(x.dir.scale(dt)))
var queue = sprite.queue()
//console.log(json.encode(queue))
for (var q of queue) {
if (!q.image) continue
render.geometry(q.image.texture, q.mesh)
}
render.present()
dt = os.now() - now
fps_samples.push(dt)
if (fps_samples.length > fps_window) fps_samples.shift()
if (now - last_fps_update >= fps_update_period) {
var sum = 0
for (var i = 0; i < fps_samples.length; i++) sum += fps_samples[i]
prosperon.window.title = `Bunnymark [fps: ${(fps_samples.length/sum).toFixed(1)}]`;
last_fps_update = now
}
var delay = (1/60) - dt
$_.delay(loop, delay)
}
loop()