From 604cb7857fe96bd33543257ed643e60c13cfe7a3 Mon Sep 17 00:00:00 2001 From: itzmarkoni Date: Tue, 5 May 2026 18:08:14 -0400 Subject: [PATCH] updated --- programs/roulette.lua | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/programs/roulette.lua b/programs/roulette.lua index 47de789..6b902d3 100644 --- a/programs/roulette.lua +++ b/programs/roulette.lua @@ -44,12 +44,25 @@ end local function makeGpuBackend(gpu) gpu.refreshSize() - -- Per-block pixel resolution. 32 gives a nice balance between - -- pocket density and per-pixel performance on multi-block screens. - gpu.setSize(32) + -- Try a high per-block resolution; older/cheaper GPU tiers may cap + -- this so fall back if it errors. + local trySizes = { 64, 32, 16, 8 } + for _, s in ipairs(trySizes) do + if pcall(gpu.setSize, s) then break end + end + local pw, ph = gpu.getSize() - -- Pocket cell size in pixels. Bigger = chunkier pockets. - local cell = 16 + print(("[roulette] GPU pixel size: %sx%s"):format(tostring(pw), tostring(ph))) + + if not pw or not ph or pw < 8 or ph < 8 then + error(("GPU reports unusable pixel size %sx%s. Place at least one screen block adjacent to the GPU.") + :format(tostring(pw), tostring(ph))) + end + + -- Pick a cell size that gives at least 16x16 cells, capped at 16 px. + local cell = math.max(2, math.min(16, math.floor(math.min(pw, ph) / 16))) + print(("[roulette] Using cell size: %d px -> %dx%d cells"):format( + cell, math.floor(pw / cell), math.floor(ph / cell))) return { kind = "gpu", @@ -69,10 +82,9 @@ local function makeGpuBackend(gpu) local px = (x - 1) * cell + 1 local py = (y - 1) * cell + 1 -- drawText(x, y, text, textColor, bgColor, size, padding) - gpu.drawText(px, py, str, fg, bg, 1, 0) + pcall(gpu.drawText, px, py, str, fg, bg, 1, 0) end, clear = function(col) - -- gpu.fill() with no args clears to black; with a color clears to that color. if col then gpu.fill(col) else gpu.fill() end end, sync = function() @@ -269,8 +281,9 @@ local function start() math.randomseed(os.epoch("utc")) gfx = initBackend() W, H = gfx.size() - if W < 4 or H < 4 then - error(("Screen too small: %dx%d cells"):format(W, H)) + print(("[roulette] Wheel grid: %dx%d cells"):format(W, H)) + if W < 3 or H < 3 then + error(("Screen too small: %dx%d cells. Add more screen blocks."):format(W, H)) end buildPerimeter() ballIndex = 1