tooltips and ui

This commit was merged in pull request #42.
This commit is contained in:
2026-07-02 20:57:06 +00:00
parent c296531214
commit 15f38c096b
91 changed files with 2105 additions and 556 deletions

View File

@@ -24,8 +24,6 @@ signal camera_changed(camera: Camera3D)
var is_zoomed : bool = false
var zoom_tween : Tween
var is_moving_enabled : bool = true
var is_cinematic_mode : bool = false
var cinematic_timer : float = 0.0
var cinematic_index : int = 0
@@ -34,6 +32,8 @@ var array_camera : Array[Camera3D] = []
var initial_pivot_transformation : Transform3D
func _ready():
UIEvents.change_camera_request.connect(on_change_camera_request)
if pivot:
initial_pivot_transformation = pivot.transform
@@ -46,111 +46,90 @@ func _ready():
if camera_iso:
set_camera(camera_iso)
func sync_zoom(new_size: float, new_fov: float, photo_is_zoomed: bool = false) -> void:
if camera_iso:
if zoom_tween and zoom_tween.is_valid():
zoom_tween.kill()
camera_iso.size = new_size
camera_iso.fov = new_fov
is_zoomed = photo_is_zoomed
var target_size = zoom_size if is_zoomed else normal_size
if not is_equal_approx(camera_iso.size, target_size):
zoom_tween = create_tween()
zoom_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
zoom_tween.tween_property(camera_iso, "size", target_size, zoom_time)
zoom_tween.parallel().tween_property(camera_iso, "fov", target_size, zoom_time)
func set_camera(camera: Camera3D):
camera.make_current()
emit_signal("camera_changed", camera)
func _input(event):
if event is InputEventKey and event.pressed and not event.echo:
#R-> Reset isometric camera
if event.keycode == KEY_R and is_moving_enabled and pivot:
pivot.transform = initial_pivot_transformation
print("Isometric camera resetted!")
return
func _process(delta: float) -> void:
var current_cam = get_viewport().get_camera_3d()
var is_photo_mode = current_cam != null and not current_cam in array_camera
if not is_photo_mode:
if is_cinematic_mode and array_camera.size() > 0:
cinematic_timer += delta
if cinematic_timer >= change_camera_time:
cinematic_timer = 0.0
cinematic_index = (cinematic_index + 1) % array_camera.size()
var next_cam = array_camera[cinematic_index]
set_camera(next_cam)
#C-> Toggle cinematic mode
if event.keycode == KEY_C:
is_cinematic_mode = !is_cinematic_mode
if is_cinematic_mode:
cinematic_timer = 0.0
for i in range(array_camera.size()):
if array_camera[i].current:
cinematic_index = i
break
print("Cinematic Mode: enabled")
else:
print("Cinematic Mode: disabled")
return
#Z-> soft zoom
if event.keycode == KEY_Z and camera_iso:
is_zoomed = !is_zoomed
var target_size = zoom_size if is_zoomed else normal_size
if zoom_tween and zoom_tween.is_valid():
zoom_tween.kill()
zoom_tween = create_tween()
zoom_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
zoom_tween.tween_property(camera_iso, "size", target_size, zoom_time)
return
#manual controls (1-5)
var manual_action = false
if event.keycode == KEY_1 and camera_iso:
set_camera(camera_iso)
is_moving_enabled = true
manual_action = true
elif event.keycode == KEY_2 and camera_front:
set_camera(camera_front)
is_moving_enabled = false
manual_action = true
elif event.keycode == KEY_3 and camera_side1:
set_camera(camera_side1)
is_moving_enabled = false
manual_action = true
elif event.keycode == KEY_4 and camera_side2:
set_camera(camera_side2)
is_moving_enabled = false
manual_action = true
elif event.keycode == KEY_5 and camera_top:
set_camera(camera_top)
is_moving_enabled = false
manual_action = true
if manual_action and is_cinematic_mode:
is_cinematic_mode = false
print("Cinematic Mode: Disabled")
if is_moving_enabled and pivot:
if event is InputEventMouseMotion and Input.is_mouse_button_pressed(MOUSE_BUTTON_RIGHT):
pivot.rotate_y(deg_to_rad(-event.relative.x * rotation_speed))
func _process(delta):
if is_cinematic_mode and array_camera.size() > 0:
cinematic_timer += delta
if cinematic_timer >= change_camera_time:
cinematic_timer = 0.0
cinematic_index = (cinematic_index + 1) % array_camera.size()
var next_cam = array_camera[cinematic_index]
set_camera(next_cam)
is_moving_enabled = (next_cam == camera_iso)
if not is_moving_enabled or pivot == null:
if camera_iso == null or current_cam != camera_iso:
return
var input_dir = Vector3.ZERO
if Input.is_key_pressed(KEY_W): input_dir.z -= 1
if Input.is_key_pressed(KEY_S): input_dir.z += 1
if Input.is_key_pressed(KEY_A): input_dir.x -= 1
if Input.is_key_pressed(KEY_D): input_dir.x += 1
if input_dir != Vector3.ZERO:
input_dir = input_dir.normalized()
if Input.is_action_just_pressed("zoom_in"):
if is_zoomed == false:
return
is_zoomed = false
var target_size = normal_size
var forward = pivot.transform.basis.z
var right = pivot.transform.basis.x
forward.y = 0
right.y = 0
if zoom_tween and zoom_tween.is_valid():
zoom_tween.kill()
zoom_tween = create_tween()
zoom_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
zoom_tween.tween_property(camera_iso, "size", target_size, zoom_time)
zoom_tween.parallel().tween_property(camera_iso, "fov", target_size, zoom_time)
elif Input.is_action_just_pressed("zoom_out"):
if is_zoomed == true:
return
is_zoomed = true
var target_size = zoom_size
forward = forward.normalized()
right = right.normalized()
if zoom_tween and zoom_tween.is_valid():
zoom_tween.kill()
zoom_tween = create_tween()
zoom_tween.set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT)
zoom_tween.tween_property(camera_iso, "size", target_size, zoom_time)
zoom_tween.parallel().tween_property(camera_iso, "fov", target_size, zoom_time)
func on_change_camera_request(camera_index: int) -> void:
var next_cam = array_camera[camera_index]
set_camera(next_cam)
func _unhandled_input(event: InputEvent) -> void:
var current_cam = get_viewport().get_camera_3d()
var is_photo_mode = current_cam != null and not current_cam in array_camera
if is_photo_mode:
return
var motion = (forward * input_dir.z + right * input_dir.x)
pivot.position += motion * move_speed * delta
if event is InputEventKey and event.pressed and not event.echo:
match event.keycode:
KEY_1:
if array_camera.size() > 0: set_camera(array_camera[0])
KEY_2:
if array_camera.size() > 1: set_camera(array_camera[1])
KEY_3:
if array_camera.size() > 2: set_camera(array_camera[2])
KEY_4:
if array_camera.size() > 3: set_camera(array_camera[3])
KEY_5:
if array_camera.size() > 4: set_camera(array_camera[4])