add scale parameter for collisions, so that we can easily use collisions when object is larger than normal/native

This commit is contained in:
2025-07-13 15:14:19 +01:00
parent d98b815516
commit de16e816b4
3 changed files with 64 additions and 7 deletions

BIN
dotscape

Binary file not shown.

View File

@@ -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"]

55
green.sml Normal file
View File

@@ -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