From 6bdd598c668be70e6d4ebfb427046ec3904b9a5f Mon Sep 17 00:00:00 2001 From: lucastucious Date: Tue, 29 Jul 2025 14:59:56 +0200 Subject: [PATCH] improvments on hovering --- Maps/gym.tscn | 6 +++++ UI/hover.gd | 13 +++++----- UI/player interface.tscn | 31 +++++++++++++++++------- core/scripts/player.gd | 4 +-- core/scripts/player_selection_manager.gd | 14 ++++++++--- 5 files changed, 48 insertions(+), 20 deletions(-) diff --git a/Maps/gym.tscn b/Maps/gym.tscn index 247abbe..97c4123 100644 --- a/Maps/gym.tscn +++ b/Maps/gym.tscn @@ -217,6 +217,12 @@ skeleton = NodePath("../../root/@EditorNode@20441/@Panel@14/@VBoxContainer@15/Do [node name="dummy" parent="Env" instance=ExtResource("2_40027")] transform = Transform3D(0.232937, 0, -0.869333, 0, 0.9, 0, 0.869333, 0, 0.232937, 5.3893027, -0.39157277, 17.058931) +[node name="dummy3" parent="Env" instance=ExtResource("2_40027")] +transform = Transform3D(0.88088393, 0, -0.18450773, 0, 0.9000001, 0, 0.18450773, 0, 0.88088393, 5.3893027, -0.39157277, -2.998869) + +[node name="dummy2" parent="Env" instance=ExtResource("2_40027")] +transform = Transform3D(-0.84198815, 0, 0.3178923, 0, 0.9000001, 0, -0.3178923, 0, -0.84198815, -9.454242, -0.39157277, 17.058931) + [node name="CSGMesh3D" type="CSGMesh3D" parent="Env"] transform = Transform3D(5.015, 0, 0, 0, 1, 0, 0, 0, 6.05, 3.7530127, -0.5165728, 11.776872) material_override = ExtResource("1_b53sv") diff --git a/UI/hover.gd b/UI/hover.gd index 60721ac..c815a66 100644 --- a/UI/hover.gd +++ b/UI/hover.gd @@ -1,12 +1,13 @@ extends Control +var tooltip_offset = Vector2(25,10) + -# Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. + pass -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - var mouse = get_viewport().get_mouse_position() + Vector2(25,10) #magic number - position = mouse +func _unhandled_input(e: InputEvent) -> void: + if e is InputEventMouseMotion: + var tooltip_position = e.position + tooltip_offset + position = tooltip_position diff --git a/UI/player interface.tscn b/UI/player interface.tscn index 8605cdd..e49af87 100644 --- a/UI/player interface.tscn +++ b/UI/player interface.tscn @@ -23,33 +23,46 @@ mouse_filter = 2 accessibility_name = "Player interface" script = ExtResource("1_nbn0p") -[node name="Button" type="Button" parent="."] -layout_mode = 0 +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 2 anchor_top = 1.0 anchor_bottom = 1.0 -offset_left = 35.0 -offset_top = -62.559998 -offset_right = 169.0 -offset_bottom = -22.559937 +offset_left = 50.0 +offset_top = -90.0 +offset_right = 184.0 +offset_bottom = -50.0 grow_vertical = 0 -pivot_offset = Vector2(0, 40) +alignment = 1 + +[node name="Label" type="Label" parent="VBoxContainer"] +layout_mode = 2 +text = "Selected:" + +[node name="Button" type="Button" parent="VBoxContainer"] +layout_mode = 2 theme = SubResource("Theme_ur0rc") text = "Test Button" icon = ExtResource("1_ur0rc") -[node name="SelectionManager" type="Control" parent="." node_paths=PackedStringArray("hover")] +[node name="SelectionManager" type="Control" parent="." node_paths=PackedStringArray("hover", "selecteddisplay")] process_mode = 3 process_priority = -1 anchors_preset = 0 mouse_filter = 2 script = ExtResource("3_u7fvt") hover = NodePath("../HoverLabel") +selecteddisplay = NodePath("../VBoxContainer/Button") rect_style = ExtResource("4_u7fvt") -[node name="HoverLabel" type="Label" parent="."] +[node name="HoverLabel" type="RichTextLabel" parent="."] +unique_name_in_owner = true editor_description = "Control that displayed the hovered informations" top_level = true +custom_minimum_size = Vector2(250, 150) layout_mode = 0 offset_right = 40.0 offset_bottom = 23.0 +fit_content = true +threaded = true script = ExtResource("5_fvvd0") diff --git a/core/scripts/player.gd b/core/scripts/player.gd index 661dbed..37c8024 100644 --- a/core/scripts/player.gd +++ b/core/scripts/player.gd @@ -135,7 +135,7 @@ func cam_zoom(delta:float) -> void: if zoom_disabled:return var new_zoom: float = clamp(cam.position.z + (zoom_speed * zoom_direction * delta),zoom_min,zoom_max) - if new_zoom != cam.position.z and abs(zoom_direction) > 0.001: # TODO: Magic Number + if new_zoom != cam.position.z and abs(zoom_direction) > 0.001: # FIXME: Magic Number cam.position.z = new_zoom zoom_direction *= zoom_speed_damp #Smooth the deceleration @@ -173,5 +173,5 @@ func cam_edge_scroll(delta: float) -> void: func cam_rotation(mouse_relative:Vector2) -> void: rotation.y += mouse_velocity.x * get_process_delta_time() * rotation_speed_x * (-1 if invert_rotation_x else 1) - %camera_rot.rotation.z = clamp(%camera_rot.rotation.z + (mouse_relative.y * get_process_delta_time() * rotation_speed_y) * (-1 if invert_rotation_y else 1),-0.75,0.35) #= clamp(desired_rot.x,-0.75,0.35) #TODO: REMOVE MAGIC NUMBERS + %camera_rot.rotation.z = clamp(%camera_rot.rotation.z + (mouse_relative.y * get_process_delta_time() * rotation_speed_y) * (-1 if invert_rotation_y else 1),-0.75,0.35) #= clamp(desired_rot.x,-0.75,0.35) #FIXME: REMOVE MAGIC NUMBERS #endregion diff --git a/core/scripts/player_selection_manager.gd b/core/scripts/player_selection_manager.gd index 50d1f47..bea768e 100644 --- a/core/scripts/player_selection_manager.gd +++ b/core/scripts/player_selection_manager.gd @@ -4,6 +4,7 @@ class_name SelectionManager @export_category("Controls") @export var hover:Control +@export var selecteddisplay:Control @export_category("Settings") @export var rect_style: StyleBoxFlat @@ -17,10 +18,15 @@ var mouse_position:Vector2 # Storing mous eposition to use it on differents proc @onready var optimized_rect: bool = ProjectSettings.get_setting("game/interface/optimized_rectangle", false) @onready var cam = get_viewport().get_camera_3d() -@onready var selecteddisplay: Button = $"../Button" + @onready var debug_mode = get_tree().debug_collisions_hint #ProjectSettings.get_setting("debug/collisions/show_mouse_trace", false) +func _ready() -> void: + if !hover: + hover = %HoverLabel + + func _unhandled_input(e: InputEvent) -> void: if e is InputEventMouseButton and e.button_index == MOUSE_BUTTON_LEFT: if e.pressed: @@ -74,8 +80,10 @@ func check_hover(mouse_pos:Vector2): hover.text = hovered_entity.name var selected = get_selected() + selecteddisplay.text = "" if selected.size() > 0: - selecteddisplay.text = selected[0].name + for s in selected: + selecteddisplay.text += ","+s.name else: selecteddisplay.text = "" @@ -93,7 +101,7 @@ func get_selected() -> Array[Entity]: ## [param collision_mask] is 32768 by default, so the collision channel 16 func check_raycast(mouse_pos: Vector2, collision_mask: int = 32768) -> Dictionary: var from = cam.project_ray_origin(mouse_pos) - var to = from + cam.project_ray_normal(mouse_pos) * 1000 # Magic number + var to = from + cam.project_ray_normal(mouse_pos) * 1000 #FIXME: Magic number var query = PhysicsRayQueryParameters3D.create(from,to,collision_mask) query.collide_with_areas = true query.collide_with_bodies = false