- Edited
Well i got this far:
The problem is that the tooltip that displays item name, when ever node is in motion, it translates slower than the parent.
Not sure why it does that or how to avoid that.
I want to keep the tooltip on top of the AABB of the item mesh (i got that part figured out) but also keep it in that position when the parent node is moving.
Right now when i throw the item or pick it up for some reason the tooltip gets moved real far away from apparent mesh AABB.
Inside the tooltip:
extends Node3D
class_name ToolTip3D
@onready var v_offset:Vector3 =Vector3.UP * vertical_offset
var v_mesh_end:Vector3
@export var owner_path: NodePath
@onready var owner_node = get_node(owner_path)
func _ready() -> void:
label.text = text_value
top_level = true
if not owner_node: owner_node = get_parent()
offset = to_local(owner_node.global_transform.origin)
get_item_data_update_label()
set_node_size_and_position()
pass # Replace with function body.
func _process(delta: float) -> void:
set_node_size_and_position()
func get_mesh_end(_owner_node:Item):
var item_mesh:MeshInstance3D = _owner_node.item_mesh
if not item_mesh == null:
var end:Vector3
var aabb = _owner_node.item_visual_node.global_transform * item_mesh.get_aabb().abs()
var size = aabb.size
var tooltip_rect = sprite_3d.get_aabb().abs().size
var tooltip_size = Vector3.UP * (tooltip_rect )
end = Vector3.UP * (tooltip_size + (aabb.end ))
return end
func set_node_size_and_position():
if owner_node is Item:
if not owner_node.item_mesh == null:
v_mesh_end = get_mesh_end(owner_node)
sub_viewport.size = panel_container.get_rect().size
self.global_transform.origin = owner_node.global_transform.origin + v_offset + v_mesh_end #- offset
With item:
EDIT:
Maybe its related to top_level = true
. But if i dont set it to true then whenever the parent rotates the tooltip rotates with it , and sometimes it gets stuck under the floor, depending on rotation.
Maybe im doing this simple thing completely wrong?