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

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