scale player.sml in the same way that wall.sml is being scaled, and also: make 'x' and 'y' arguments to Block.lerp Real32.real values rather than int values (with calling code making the necessary changes) as the code was converting between int and real multiple times

This commit is contained in:
2024-12-17 09:16:22 +00:00
parent 18bd81134b
commit 507c1c331c
3 changed files with 35 additions and 30 deletions

View File

@@ -2,8 +2,6 @@ structure Block =
struct
fun lerp (startX, startY, drawWidth, drawHeight, windowWidth, windowHeight, r, g, b) : Real32.real vector =
let
val startX = Real32.fromInt startX
val startY = Real32.fromInt startY
val endY = windowHeight - startY
val startY = windowHeight - (startY + drawHeight)
val endX = startX + drawWidth

View File

@@ -238,5 +238,39 @@ struct
(* block is placeholder asset *)
fun getDrawVec ({x, y, ...}: player, width, height) =
Block.lerp (x, y, realSize, realSize, width, height, 0.5, 0.5, 0.5)
let
val wratio = width / 1920.0
val hratio = height / 1080.0
in
if wratio < hratio then
let
val scale = 1080.0 * wratio
val yOffset =
if height > scale then (height - scale) / 2.0
else if height < scale then (scale - height) / 2.0
else 0.0
val x = Real32.fromInt x * wratio
val y = Real32.fromInt y * wratio + yOffset
val realSize = realSize * wratio
in
Block.lerp (x, y, realSize, realSize, width, height, 0.5, 0.5, 0.5)
end
else
let
val scale = 1920.0 * hratio
val xOffset =
if width > scale then (width - scale) / 2.0
else if width < scale then (scale - width) / 2.0
else 0.0
val x = Real32.fromInt x * hratio + xOffset
val y = Real32.fromInt y * hratio
val realSize = realSize * hratio
in
Block.lerp (x, y, realSize, realSize, width, height, 0.5, 0.5, 0.5)
end
end
end

View File

@@ -14,26 +14,6 @@ struct
fun generateTree wallVec = helpGenerateTree (0, wallVec, QuadTree.empty)
val preferredAspectRatio: Real32.real = 1920.0 / 1080.0
fun helpGetDrawVecPreferred (pos, wallVec, acc, winWidth, winHeight) =
if pos = Vector.length wallVec then
Vector.concat acc
else
let
val wall = Vector.sub (wallVec, pos)
val {x, y, width, height, id = _} = wall
val width = Real32.fromInt width
val height = Real32.fromInt height
val block = Block.lerp
(x, y, width, height, winWidth, winHeight, 0.0, 0.0, 0.0)
val acc = block :: acc
in
helpGetDrawVecPreferred (pos + 1, wallVec, acc, winWidth, winHeight)
end
(* when actual aspect ratio > preferredAspectRatio *)
fun helpGetDrawVecWider
(pos, wallVec, acc, winWidth, winHeight, ratio, yOffset) =
if pos = Vector.length wallVec then
@@ -44,10 +24,7 @@ struct
val {x, y, width, height, id = _} = wall
val x = Real32.fromInt x * ratio
val x = Real32.toInt IEEEReal.TO_NEAREST x
val y = Real32.fromInt y * ratio + yOffset
val y = Real32.toInt IEEEReal.TO_NEAREST y
val width = Real32.fromInt width * ratio
val height = Real32.fromInt height * ratio
@@ -60,7 +37,6 @@ struct
(pos + 1, wallVec, acc, winWidth, winHeight, ratio, yOffset)
end
(* when actual aspect ratio < preferredAspectRatio *)
fun helpGetDrawVecTaller
(pos, wallVec, acc, winWidth, winHeight, ratio, xOffset) =
if pos = Vector.length wallVec then
@@ -71,10 +47,7 @@ struct
val {x, y, width, height, id = _} = wall
val x = Real32.fromInt x * ratio + xOffset
val x = Real32.toInt IEEEReal.TO_NEAREST x
val y = Real32.fromInt y * ratio
val y = Real32.toInt IEEEReal.TO_NEAREST y
val width = Real32.fromInt width * ratio
val height = Real32.fromInt height * ratio