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")]
|
[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)
|
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"]
|
[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)
|
transform = Transform3D(5.015, 0, 0, 0, 1, 0, 0, 0, 6.05, 3.7530127, -0.5165728, 11.776872)
|
||||||
material_override = ExtResource("1_b53sv")
|
material_override = ExtResource("1_b53sv")
|
||||||
|
|
13
UI/hover.gd
13
UI/hover.gd
|
@ -1,12 +1,13 @@
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
var tooltip_offset = Vector2(25,10)
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
pass # Replace with function body.
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
func _unhandled_input(e: InputEvent) -> void:
|
||||||
func _process(delta: float) -> void:
|
if e is InputEventMouseMotion:
|
||||||
var mouse = get_viewport().get_mouse_position() + Vector2(25,10) #magic number
|
var tooltip_position = e.position + tooltip_offset
|
||||||
position = mouse
|
position = tooltip_position
|
||||||
|
|
|
@ -23,33 +23,46 @@ mouse_filter = 2
|
||||||
accessibility_name = "Player interface"
|
accessibility_name = "Player interface"
|
||||||
script = ExtResource("1_nbn0p")
|
script = ExtResource("1_nbn0p")
|
||||||
|
|
||||||
[node name="Button" type="Button" parent="."]
|
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 1
|
||||||
|
anchors_preset = 2
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
offset_left = 35.0
|
offset_left = 50.0
|
||||||
offset_top = -62.559998
|
offset_top = -90.0
|
||||||
offset_right = 169.0
|
offset_right = 184.0
|
||||||
offset_bottom = -22.559937
|
offset_bottom = -50.0
|
||||||
grow_vertical = 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")
|
theme = SubResource("Theme_ur0rc")
|
||||||
text = "Test Button"
|
text = "Test Button"
|
||||||
icon = ExtResource("1_ur0rc")
|
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_mode = 3
|
||||||
process_priority = -1
|
process_priority = -1
|
||||||
anchors_preset = 0
|
anchors_preset = 0
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
script = ExtResource("3_u7fvt")
|
script = ExtResource("3_u7fvt")
|
||||||
hover = NodePath("../HoverLabel")
|
hover = NodePath("../HoverLabel")
|
||||||
|
selecteddisplay = NodePath("../VBoxContainer/Button")
|
||||||
rect_style = ExtResource("4_u7fvt")
|
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"
|
editor_description = "Control that displayed the hovered informations"
|
||||||
top_level = true
|
top_level = true
|
||||||
|
custom_minimum_size = Vector2(250, 150)
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_right = 40.0
|
offset_right = 40.0
|
||||||
offset_bottom = 23.0
|
offset_bottom = 23.0
|
||||||
|
fit_content = true
|
||||||
|
threaded = true
|
||||||
script = ExtResource("5_fvvd0")
|
script = ExtResource("5_fvvd0")
|
||||||
|
|
|
@ -135,7 +135,7 @@ func cam_zoom(delta:float) -> void:
|
||||||
if zoom_disabled:return
|
if zoom_disabled:return
|
||||||
|
|
||||||
var new_zoom: float = clamp(cam.position.z + (zoom_speed * zoom_direction * delta),zoom_min,zoom_max)
|
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
|
cam.position.z = new_zoom
|
||||||
zoom_direction *= zoom_speed_damp #Smooth the deceleration
|
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:
|
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)
|
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
|
#endregion
|
||||||
|
|
|
@ -4,6 +4,7 @@ class_name SelectionManager
|
||||||
|
|
||||||
@export_category("Controls")
|
@export_category("Controls")
|
||||||
@export var hover:Control
|
@export var hover:Control
|
||||||
|
@export var selecteddisplay:Control
|
||||||
@export_category("Settings")
|
@export_category("Settings")
|
||||||
@export var rect_style: StyleBoxFlat
|
@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 optimized_rect: bool = ProjectSettings.get_setting("game/interface/optimized_rectangle", false)
|
||||||
|
|
||||||
@onready var cam = get_viewport().get_camera_3d()
|
@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)
|
@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:
|
func _unhandled_input(e: InputEvent) -> void:
|
||||||
if e is InputEventMouseButton and e.button_index == MOUSE_BUTTON_LEFT:
|
if e is InputEventMouseButton and e.button_index == MOUSE_BUTTON_LEFT:
|
||||||
if e.pressed:
|
if e.pressed:
|
||||||
|
@ -74,8 +80,10 @@ func check_hover(mouse_pos:Vector2):
|
||||||
hover.text = hovered_entity.name
|
hover.text = hovered_entity.name
|
||||||
|
|
||||||
var selected = get_selected()
|
var selected = get_selected()
|
||||||
|
selecteddisplay.text = ""
|
||||||
if selected.size() > 0:
|
if selected.size() > 0:
|
||||||
selecteddisplay.text = selected[0].name
|
for s in selected:
|
||||||
|
selecteddisplay.text += ","+s.name
|
||||||
else:
|
else:
|
||||||
selecteddisplay.text = ""
|
selecteddisplay.text = ""
|
||||||
|
|
||||||
|
@ -93,7 +101,7 @@ func get_selected() -> Array[Entity]:
|
||||||
## [param collision_mask] is 32768 by default, so the collision channel 16
|
## [param collision_mask] is 32768 by default, so the collision channel 16
|
||||||
func check_raycast(mouse_pos: Vector2, collision_mask: int = 32768) -> Dictionary:
|
func check_raycast(mouse_pos: Vector2, collision_mask: int = 32768) -> Dictionary:
|
||||||
var from = cam.project_ray_origin(mouse_pos)
|
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)
|
var query = PhysicsRayQueryParameters3D.create(from,to,collision_mask)
|
||||||
query.collide_with_areas = true
|
query.collide_with_areas = true
|
||||||
query.collide_with_bodies = false
|
query.collide_with_bodies = false
|
||||||
|
|
Loading…
Reference in a new issue