From d7b16b8126ffd851e7741f51c2c4a820a41c5bdf Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 18 Oct 2019 00:40:47 +0200 Subject: [PATCH] Improve the camera zoom behavior MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Invert the scroll wheel action to be more consistent with most 3D programs out there (Godot, Blender, …). - Clamp the camera distance to reasonable values. --- addons/material_maker/preview.gd | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/material_maker/preview.gd b/addons/material_maker/preview.gd index b4047e2..2266454 100644 --- a/addons/material_maker/preview.gd +++ b/addons/material_maker/preview.gd @@ -7,6 +7,9 @@ const ENVIRONMENTS = [ "experiment", "lobby", "night", "park", "schelde" ] +const CAMERA_DISTANCE_MIN = 1.0 +const CAMERA_DISTANCE_MAX = 10.0 + onready var objects = $MaterialPreview/Preview3d/Objects onready var current_object = objects.get_child(0) @@ -77,9 +80,17 @@ func on_gui_input(event): $Config/Rotate.pressed = false match event.button_index: BUTTON_WHEEL_UP: - camera.translation.z *= 1.01 if event.shift else 1.1 + camera.translation.z = clamp( + camera.translation.z / (1.01 if event.shift else 1.1), + CAMERA_DISTANCE_MIN, + CAMERA_DISTANCE_MAX + ) BUTTON_WHEEL_DOWN: - camera.translation.z /= 1.01 if event.shift else 1.1 + camera.translation.z = clamp( + camera.translation.z * (1.01 if event.shift else 1.1), + CAMERA_DISTANCE_MIN, + CAMERA_DISTANCE_MAX + ) elif event is InputEventMouseMotion: var motion = 0.01*event.relative var camera_basis = camera.global_transform.basis