@@ -40,6 +40,7 @@ var mouse_pos := Vector2.ZERO
4040var drag := false
4141var rotation_slider : ValueSlider
4242var zoom_slider : ValueSlider
43+ var vertical_zoom_slider : ValueSlider
4344var should_tween := true
4445
4546@onready var viewport := get_viewport ()
@@ -55,6 +56,8 @@ func _ready() -> void:
5556 rotation_slider .value_changed .connect (_rotation_slider_value_changed )
5657 zoom_slider = Global .top_menu_container .get_node ("% ZoomSlider" )
5758 zoom_slider .value_changed .connect (_zoom_slider_value_changed )
59+ vertical_zoom_slider = Global .top_menu_container .get_node ("% VerticalZoomSlider" )
60+ vertical_zoom_slider .value_changed .connect (_vertical_zoom_slider_value_changed )
5861 zoom_changed .connect (_zoom_changed )
5962 rotation_changed .connect (_rotation_changed )
6063 viewport_container = get_viewport ().get_parent ()
@@ -182,7 +185,10 @@ func update_transparent_checker_offset() -> void:
182185func _update_viewport_transform () -> void :
183186 if not is_instance_valid (viewport ):
184187 return
185- var zoom_scale := Vector2 .ONE / zoom
188+ var zoom_scale := Vector2 (
189+ 1.0 / zoom .x ,
190+ 1.0 / (zoom .y * maxf (Global .vertical_zoom , 0.01 ))
191+ )
186192 var viewport_size := get_viewport_rect ().size
187193 var screen_offset := viewport_size * 0.5 * zoom_scale
188194 screen_offset = screen_offset .rotated (camera_angle )
@@ -198,6 +204,7 @@ func _zoom_changed() -> void:
198204 if index == Cameras .MAIN :
199205 should_tween = false
200206 zoom_slider .value = zoom .x * 100.0
207+ vertical_zoom_slider .value = Global .vertical_zoom * 100.0
201208 should_tween = true
202209 for guide in Global .current_project .guides :
203210 guide .width = 1.0 / zoom .x * 2
@@ -231,6 +238,14 @@ func _rotation_slider_value_changed(value: float) -> void:
231238 camera_angle = angle
232239
233240
241+ func _vertical_zoom_slider_value_changed (value : float ) -> void :
242+ # Convert percentage to factor
243+ var factor := value / 100.0
244+ if is_equal_approx (Global .vertical_zoom , factor ):
245+ return
246+ Global .vertical_zoom = factor
247+
248+
234249func _has_selection_tool () -> bool :
235250 for slot in Tools ._slots .values ():
236251 if slot .tool_node is BaseSelectionTool :
@@ -242,6 +257,9 @@ func _project_switched() -> void:
242257 offset = Global .current_project .cameras_offset [index ]
243258 camera_angle = Global .current_project .cameras_rotation [index ]
244259 zoom = Global .current_project .cameras_zoom [index ]
260+ # Restore session vertical zoom per project
261+ if index == Cameras .MAIN :
262+ Global .vertical_zoom = Global .current_project .vertical_zoom
245263
246264
247265func _rotate_camera_around_point (degrees : float , point : Vector2 ) -> void :
0 commit comments