From 507c1c331cf370b349df20f4080ffd75a6fa29cb Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Tue, 17 Dec 2024 09:16:22 +0000 Subject: [PATCH] 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 --- fcore/block.sml | 2 -- fcore/player.sml | 36 +++++++++++++++++++++++++++++++++++- fcore/wall.sml | 27 --------------------------- 3 files changed, 35 insertions(+), 30 deletions(-) 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