Add basic hovering control
This commit is contained in:
parent
9e2bf5787f
commit
240e9f7216
5 changed files with 53 additions and 11 deletions
12
UI/hover.gd
Normal file
12
UI/hover.gd
Normal file
|
@ -0,0 +1,12 @@
|
|||
extends Control
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# 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
|
1
UI/hover.gd.uid
Normal file
1
UI/hover.gd.uid
Normal file
|
@ -0,0 +1 @@
|
|||
uid://c3jwnn1dj2tg5
|
|
@ -1,9 +1,10 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://c7hu51a2omayl"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://c7hu51a2omayl"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c6xp0y6y0gnjt" path="res://core/scripts/player_interface.gd" id="1_nbn0p"]
|
||||
[ext_resource type="Texture2D" uid="uid://dtnvfhpg0fmlk" path="res://packs/Kenney-cursors/Outline/steps.svg" id="1_ur0rc"]
|
||||
[ext_resource type="Script" uid="uid://bxo7f7f1th34m" path="res://core/scripts/player_selection_manager.gd" id="3_u7fvt"]
|
||||
[ext_resource type="StyleBox" uid="uid://nn1eq5h68x1b" path="res://ui/selection_rect_style.tres" id="4_u7fvt"]
|
||||
[ext_resource type="Script" uid="uid://c3jwnn1dj2tg5" path="res://ui/hover.gd" id="5_fvvd0"]
|
||||
|
||||
[sub_resource type="Theme" id="Theme_ur0rc"]
|
||||
|
||||
|
@ -19,6 +20,7 @@ pivot_offset = Vector2(960, 540)
|
|||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
accessibility_name = "Player interface"
|
||||
script = ExtResource("1_nbn0p")
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
|
@ -35,10 +37,19 @@ theme = SubResource("Theme_ur0rc")
|
|||
text = "Test Button"
|
||||
icon = ExtResource("1_ur0rc")
|
||||
|
||||
[node name="SelectionManager" type="Control" parent="."]
|
||||
[node name="SelectionManager" type="Control" parent="." node_paths=PackedStringArray("hover")]
|
||||
process_mode = 3
|
||||
process_priority = -1
|
||||
anchors_preset = 0
|
||||
mouse_filter = 2
|
||||
script = ExtResource("3_u7fvt")
|
||||
hover = NodePath("../HoverLabel")
|
||||
rect_style = ExtResource("4_u7fvt")
|
||||
|
||||
[node name="HoverLabel" type="Label" parent="."]
|
||||
editor_description = "Control that displayed the hovered informations"
|
||||
top_level = true
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 23.0
|
||||
script = ExtResource("5_fvvd0")
|
||||
|
|
|
@ -30,6 +30,7 @@ transform = Transform3D(-4.37114e-08, 0.573576, -0.819152, 0, 0.819152, 0.573576
|
|||
|
||||
[node name="camera_player" type="Camera3D" parent="camera_rot/camera_point"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("SphereMesh_ipmo0")
|
||||
|
|
|
@ -2,17 +2,22 @@ extends Control
|
|||
|
||||
class_name SelectionManager
|
||||
|
||||
@export_category("Controls")
|
||||
@export var hover:Control
|
||||
@export_category("Settings")
|
||||
@export var rect_style: StyleBoxFlat
|
||||
|
||||
var draw_selection := false
|
||||
var drag_start: Vector2
|
||||
var select_box: Rect2
|
||||
var perform_selection := false # Flag to trigger selection in _physics_process
|
||||
|
||||
var mouse_position:Vector2 # Storing mous eposition to use it on differents processes
|
||||
@onready var box_color: Color = ProjectSettings.get_setting("game/interface/selection_rectangle_color", Color("#00ff0066"))
|
||||
@onready var box_color_outline: Color = ProjectSettings.get_setting("game/interface/selection_rectangle_color_outline", Color("#00ff00"))
|
||||
@onready var optimized_rect: bool = ProjectSettings.get_setting("game/interface/optimized_rectangle", false)
|
||||
@export var rect_style: StyleBoxFlat
|
||||
|
||||
@onready var cam = get_viewport().get_camera_3d()
|
||||
@onready var hovercontrol: Button = $"../Button"
|
||||
@onready var selecteddisplay: Button = $"../Button"
|
||||
@onready var debug_mode = get_tree().debug_collisions_hint #ProjectSettings.get_setting("debug/collisions/show_mouse_trace", false)
|
||||
|
||||
|
||||
|
@ -48,24 +53,33 @@ func _unhandled_input(e: InputEvent) -> void:
|
|||
|
||||
queue_redraw()
|
||||
if !draw_selection and e is InputEventMouseMotion:
|
||||
check_hover()
|
||||
mouse_position = e.position
|
||||
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if perform_selection:
|
||||
update_selected_units()
|
||||
perform_selection = false
|
||||
else:
|
||||
check_hover(mouse_position)
|
||||
|
||||
|
||||
func check_hover():
|
||||
func check_hover(mouse_pos:Vector2):
|
||||
# TODO: Hovering and display names
|
||||
var raycast = check_raycast(mouse_pos)
|
||||
if raycast.is_empty():
|
||||
hover.text = ""
|
||||
elif raycast.collider:
|
||||
var hovered_entity = raycast.collider.get_parent()
|
||||
hover.text = hovered_entity.name
|
||||
|
||||
var selected = get_selected()
|
||||
if selected.size() > 0:
|
||||
hovercontrol.text = selected[0].name
|
||||
selecteddisplay.text = selected[0].name
|
||||
else:
|
||||
hovercontrol.text = ""
|
||||
selecteddisplay.text = ""
|
||||
|
||||
hovercontrol.queue_redraw()
|
||||
selecteddisplay.queue_redraw()
|
||||
|
||||
|
||||
## Returns an array of entities selected by the player, using multiplayer-unique group names
|
||||
|
@ -84,8 +98,11 @@ func check_raycast(mouse_pos: Vector2, collision_mask: int = 32768) -> Dictionar
|
|||
query.collide_with_areas = true
|
||||
query.collide_with_bodies = false
|
||||
var space_state = cam.get_world_3d().direct_space_state
|
||||
if space_state:
|
||||
return space_state.intersect_ray(query)
|
||||
|
||||
return {}
|
||||
|
||||
|
||||
## Deselects all currently selected entities
|
||||
func deselect_all() -> void:
|
||||
|
|
Loading…
Reference in a new issue