diff --git a/CorsixTH/Lua/game_ui.lua b/CorsixTH/Lua/game_ui.lua index 9bb0a4a..207eea6 100644 --- a/CorsixTH/Lua/game_ui.lua +++ b/CorsixTH/Lua/game_ui.lua @@ -102,7 +102,7 @@ function GameUI:makeVisibleDiamond(scr_w, scr_h) -- The visible diamond is the region which the top-left corner of the screen -- is limited to, and ensures that the map always covers all of the screen. - -- Its verticies are at (x + w, y), (x - w, y), (x, y + h), (x, y - h). + -- Its vertices are at (x + w, y), (x - w, y), (x, y + h), (x, y - h). return { x = - scr_w / 2, y = 16 * map_h - scr_h / 2, @@ -113,27 +113,30 @@ end function GameUI:setZoom(factor) if factor <= 0 then - return + return false end local old_factor = self.zoom_factor if not factor or math.abs(factor - 1) < 0.001 then factor = 1 end + local scr_w = self.app.config.width local scr_h = self.app.config.height + local new_diamond = self:makeVisibleDiamond(scr_w / factor, scr_h / factor) + if new_diamond.w < 0 or new_diamond.h < 0 then + return false + end + + self.visible_diamond = new_diamond local refx, refy = self.cursor_x or scr_w / 2, self.cursor_y or scr_h / 2 local cx, cy = self:ScreenToWorld(refx, refy) self.zoom_factor = factor - self.visible_diamond = self:makeVisibleDiamond(scr_w / factor, scr_h / factor) - if self.visible_diamond.w < 0 or self.visible_diamond.h < 0 then - self:setZoom(old_factor) - return false - else - cx, cy = self.app.map:WorldToScreen(cx, cy) - self:scrollMap(cx - self.screen_offset_x - refx / factor, - cy - self.screen_offset_y - refy / factor) - return true - end + + cx, cy = self.app.map:WorldToScreen(cx, cy) + cx = cx - self.screen_offset_x - refx / factor + cy = cy - self.screen_offset_y - refy / factor + self:scrollMap(cx, cy) + return true end function GameUI:draw(canvas)