diff --git a/UI/hover.gd b/UI/hover.gd new file mode 100644 index 0000000..60721ac --- /dev/null +++ b/UI/hover.gd @@ -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 diff --git a/UI/hover.gd.uid b/UI/hover.gd.uid new file mode 100644 index 0000000..ff2c3be --- /dev/null +++ b/UI/hover.gd.uid @@ -0,0 +1 @@ +uid://c3jwnn1dj2tg5 diff --git a/UI/player interface.tscn b/UI/player interface.tscn index 9c54245..8605cdd 100644 --- a/UI/player interface.tscn +++ b/UI/player interface.tscn @@ -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") diff --git a/core/base-classes/player.tscn b/core/base-classes/player.tscn index 2a9eb26..388ed8f 100644 --- a/core/base-classes/player.tscn +++ b/core/base-classes/player.tscn @@ -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") diff --git a/core/scripts/player_selection_manager.gd b/core/scripts/player_selection_manager.gd index c2026ed..50d1f47 100644 --- a/core/scripts/player_selection_manager.gd +++ b/core/scripts/player_selection_manager.gd @@ -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,7 +98,10 @@ 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 - return space_state.intersect_ray(query) + if space_state: + return space_state.intersect_ray(query) + + return {} ## Deselects all currently selected entities