diff --git a/fcore/player.sml b/fcore/player.sml index 87a8af1..aab4e30 100644 --- a/fcore/player.sml +++ b/fcore/player.sml @@ -236,7 +236,7 @@ struct end end - (* placeholder *) - fun getDrawVec ({x, y, ...}: player) = - Block.lerp (x, y, realSize, realSize, 1920.0, 1080.0, 0.5, 0.5, 0.5) + (* 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) end diff --git a/fcore/wall.sml b/fcore/wall.sml index 6dfe571..7c288f8 100644 --- a/fcore/wall.sml +++ b/fcore/wall.sml @@ -23,6 +23,7 @@ struct 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 @@ -30,6 +31,6 @@ struct helpGetDrawVec (pos + 1, wallVec, acc, winWidth, winHeight) end - fun getDrawVec wallVec = - helpGetDrawVec (0, wallVec, [], 1920.0, 1080.0) + fun getDrawVec (wallVec, width, height) = + helpGetDrawVec (0, wallVec, [], width, height) end diff --git a/ffi/export.h b/ffi/export.h index 83e8992..9c2eec7 100644 --- a/ffi/export.h +++ b/ffi/export.h @@ -158,6 +158,7 @@ extern "C" { #endif MLLIB_PUBLIC(void mltonKeyCallback (Int32 x0, Int32 x1, Int32 x2, Int32 x3);) +MLLIB_PUBLIC(void mltonFramebufferSizeCallback (Real32 x0, Real32 x1);) #undef MLLIB_PRIVATE #undef MLLIB_PUBLIC diff --git a/ffi/glfw-input.c b/ffi/glfw-input.c index dd62dfc..dd873d5 100644 --- a/ffi/glfw-input.c +++ b/ffi/glfw-input.c @@ -18,3 +18,13 @@ void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods void setKeyCallback(GLFWwindow* window) { glfwSetKeyCallback(window, keyCallback); } + +void framebufferSizeCallback(GLFWwindow* window, int width, int height) { + glViewport(0, 0, width, height); + mltonFramebufferSizeCallback((float) width, (float) height); +} + +void setFramebufferSizeCallback(GLFWwindow* window) { + glfwSetFramebufferSizeCallback(window, framebufferSizeCallback); +} + diff --git a/ffi/glfw-input.sml b/ffi/glfw-input.sml index 8e67975..5429f1c 100644 --- a/ffi/glfw-input.sml +++ b/ffi/glfw-input.sml @@ -31,4 +31,9 @@ struct _export "mltonKeyCallback" public : (int * int * int * int -> unit) -> unit; val setKeyCallback = _import "setKeyCallback" public : window -> unit; + + val exportFramebufferSizeCallback = + _export "mltonFramebufferSizeCallback" public : (Real32.real * Real32.real -> unit) -> unit; + val setFramebufferSizeCallback = + _import "setFramebufferSizeCallback" public : window -> unit; end diff --git a/shell/gl-draw.sml b/shell/gl-draw.sml index ea286fa..8010024 100644 --- a/shell/gl-draw.sml +++ b/shell/gl-draw.sml @@ -154,10 +154,13 @@ struct * *) val input = InputState.getSnapshot () + val width = InputState.getWidth () + val height = InputState.getHeight () + val game = GameUpdate.update (game, input) - val wallVec = Wall.getDrawVec (#walls game) - val playerVec = Player.getDrawVec (#player game) + val wallVec = Wall.getDrawVec (#walls game, width, height) + val playerVec = Player.getDrawVec (#player game, width, height) val shellState = uploadWall (shellState, wallVec) val shellState = uploadPlayer (shellState, playerVec) diff --git a/shell/input-state.sml b/shell/input-state.sml index b32b5ba..aea37c6 100644 --- a/shell/input-state.sml +++ b/shell/input-state.sml @@ -6,6 +6,8 @@ struct , rightHeld = ref false , upHeld = ref false , downHeld = ref false + , width = ref (1920.0 : Real32.real) + , height = ref (1080.0 : Real32.real) } fun getSnapshot () = @@ -15,19 +17,14 @@ struct , downHeld = !(#downHeld state) } - fun getPlayerXAxis () = - let - val lh = #leftHeld state - val rh = #rightHeld state + fun getWidth () = + !(#width state) - open Player - in - case (!lh, !rh) of - (false, false) => STAY_STILL - | (false, true) => MOVE_RIGHT - | (true, false) => MOVE_LEFT - | (true, true) => STAY_STILL - end + fun getHeight () = + !(#height state) + + fun sizeCallback (width, height) = + (#width state := width; #height state := height) open Input @@ -60,6 +57,9 @@ struct let val () = Input.exportKeyCallback keyCallback val () = Input.setKeyCallback window + + val () = Input.exportFramebufferSizeCallback sizeCallback + val () = Input.setFramebufferSizeCallback window in () end