No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

HoverControl.gd 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. extends Control
  2. var selection_object: Control
  3. var infobox_position := "left"
  4. onready var hover_tween = $HoverTween
  5. onready var info_panel = $Control/InfoPanel
  6. func _ready():
  7. info_panel.modulate = Color(1, 1, 1, 0)
  8. connect("mouse_entered", self, '_on_mouse_entered')
  9. connect("mouse_exited", self, '_on_mouse_exited')
  10. hover_tween.connect("tween_completed", self, "_on_HoverTween_tween_completed")
  11. func _on_mouse_exited():
  12. hover_tween.interpolate_property(selection_object, "modulate", null, Color(1, 1, 1, 1), 0.3, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
  13. hover_tween.interpolate_property(info_panel, "modulate", null, Color(1, 1, 1, 0), 0.3, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
  14. hover_tween.start()
  15. func _on_mouse_entered():
  16. hover_tween.stop_all()
  17. if _can_show_info_panel():
  18. mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
  19. set_infobox_position()
  20. info_panel.show()
  21. hover_tween.interpolate_property(selection_object, "modulate", null, Color("#615ea4"), 0.3, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
  22. hover_tween.interpolate_property(info_panel, "modulate", null, Color(1, 1, 1, 1), 0.3, Tween.TRANS_CUBIC, Tween.EASE_IN_OUT)
  23. hover_tween.start()
  24. else:
  25. mouse_default_cursor_shape = Control.CURSOR_ARROW
  26. func _can_show_info_panel():
  27. return not info_panel.content.empty()
  28. func set_infobox_position():
  29. var s = rect_size
  30. var info_s = info_panel.rect_size
  31. var offset = 30
  32. match infobox_position:
  33. "top":
  34. info_panel.rect_position = Vector2((s.x - info_s.x)/2, -(info_s.y + offset))
  35. "bottom":
  36. info_panel.rect_position = Vector2((s.x - info_s.x)/2, s.y + offset)
  37. "left":
  38. info_panel.rect_position = Vector2(-(info_s.x + offset), (s.y - info_s.y)/2)
  39. "right":
  40. info_panel.rect_position = Vector2(s.x + offset, (s.y - info_s.y)/2)
  41. func _on_HoverTween_tween_completed(object: Object, key: NodePath):
  42. if object == info_panel and info_panel.modulate == Color(1, 1, 1, 0):
  43. info_panel.hide()