diff --git a/dotscape b/dotscape index 0da08b5..3b4b98d 100755 Binary files a/dotscape and b/dotscape differ diff --git a/fcore/quad-tree.sml b/fcore/quad-tree.sml index f354b5d..85f5dca 100644 --- a/fcore/quad-tree.sml +++ b/fcore/quad-tree.sml @@ -630,7 +630,7 @@ struct fun mapGrid grid = Vector.map (fn yAxis => Vector.map (fn item => mapItem item) yAxis) grid - fun toCollisionStringFolder ({x, ex, y, ey, data = _}, acc) = + fun toCollisionStringFolder scale ({x, ex, y, ey, data = _}, acc) = let val ex = ex + 1 val ey = if y = ey then ey + 1 else ey @@ -640,10 +640,10 @@ struct val height = ey - y val height = if height = 0 then height + 1 else height - val x = Int.toString x - val y = Int.toString y - val width = Int.toString width - val height = Int.toString height + val x = Int.toString (x * scale) + val y = Int.toString (y * scale) + val width = Int.toString (width * scale) + val height = Int.toString (height * scale) val item = String.concat [ "{x = " @@ -660,13 +660,15 @@ struct item :: acc end - fun toCollisionString (squares, canvasWidth, canvasHeight) = + fun toCollisionString (squares, canvasWidth, canvasHeight, scale) = let val size = Int.max (canvasWidth, canvasHeight) val qtree = buildTree (0, 0, size, squares) val bintree = merge (qtree, squares) - val collisions = BinTree.foldr (toCollisionStringFolder, bintree, []) + val scale = if scale = 0 then 1 else scale + val f = toCollisionStringFolder scale + val collisions = BinTree.foldr (f, bintree, []) val collisions = String.concatWith ",\n" collisions in String.concat ["val collisions = #[", collisions, "]\n"] diff --git a/green.sml b/green.sml new file mode 100644 index 0000000..32b611d --- /dev/null +++ b/green.sml @@ -0,0 +1,55 @@ +structure AAA = +struct + fun xToNdc (xOffset, xpos, scale, halfWidth) = + ((xpos * scale + xOffset) - halfWidth) / halfWidth + + fun endXToNdc (xOffset, startX, endX, scale, halfWidth) = + (((endX - startX) * scale + xOffset) - halfWidth) / halfWidth + + fun yToNdc (yOffset, ypos, scale, halfHeight) = + ~(((ypos * scale + yOffset) - halfHeight) / halfHeight) + + fun endYToNdc (yOffset, startY, endY, scale, halfHeight) = + ~((((endY - startY) * scale + yOffset) - halfHeight) / halfHeight) + + fun lerp (xOffset, yOffset, scale, windowWidth, windowHeight) = + let + val windowWidth = Real32.fromInt windowWidth + val halfWidth = windowWidth / 2.0 + val windowHeight = Real32.fromInt windowHeight + val halfHeight = windowHeight / 2.0 + in + #[ +xToNdc (xOffset, 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 2.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000, +endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 2.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000, +xToNdc (xOffset, 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 1.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000, +xToNdc (xOffset, 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 1.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000, +endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 2.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000, +endXToNdc (xOffset, xToNdc (xOffset, 1.000000000000000, scale, halfWidth), 1.000000000000000, scale, halfWidth), +yToNdc (yOffset, 1.000000000000000, scale, halfHeight), +0.000000000000000, +0.000000000000000, +0.000000000000000 + ] + end +end