diff --git a/fcore/block.sml b/fcore/block.sml index 3f2a33d..8ba180d 100644 --- a/fcore/block.sml +++ b/fcore/block.sml @@ -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 diff --git a/fcore/player.sml b/fcore/player.sml index aab4e30..ca5f9b8 100644 --- a/fcore/player.sml +++ b/fcore/player.sml @@ -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 diff --git a/fcore/wall.sml b/fcore/wall.sml index 2aa1fc3..5ba2ff1 100644 --- a/fcore/wall.sml +++ b/fcore/wall.sml @@ -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