improvments on hovering
This commit is contained in:
parent
833b170a0d
commit
6bdd598c66
5 changed files with 48 additions and 20 deletions
|
@ -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")
|
||||
|
|
13
UI/hover.gd
13
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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue