Minimap.gd 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. extends WindowPanel
  2. @onready var textureRect : TextureRect = $ScrollContainer/TextureRect
  3. @onready var scrollContainer : ScrollContainer = $ScrollContainer
  4. @onready var playerPoint : TextureRect = $ScrollContainer/TextureRect/PlayerPoint
  5. var textureSize : Vector2 = Vector2.ZERO
  6. #
  7. func Warped():
  8. if not textureRect or not Launcher.Map:
  9. return
  10. if Launcher.Map.currentMapID == DB.UnknownHash:
  11. assert(false, "Could not fetch the active map name")
  12. return
  13. var mapData : FileData = DB.MapsDB.get(Launcher.Map.currentMapID, null)
  14. if not mapData:
  15. assert(false, "Could not retrieve the map ID from our map daabase")
  16. return
  17. var resource : Texture2D = FileSystem.LoadMinimap(mapData._path)
  18. if not resource:
  19. assert(false, "Could not load the minimap resource")
  20. return
  21. textureRect.set_texture(resource)
  22. textureSize = textureRect.texture.get_size()
  23. if textureSize != Vector2.ZERO:
  24. maxSize = textureSize
  25. if size.x > maxSize.x:
  26. size.x = maxSize.x
  27. if size.y > maxSize.y:
  28. size.y = maxSize.y
  29. func Moved():
  30. if not Launcher.Map or not Launcher.Map.currentMapNode:
  31. return
  32. var mapSize : Vector2 = Launcher.Map.GetMapBoundaries()
  33. if mapSize.x != 0 and mapSize.y != 0:
  34. var posRatio : Vector2 = Launcher.Player.position / mapSize
  35. var minimapPlayerPos : Vector2 = posRatio * textureRect.size - Vector2(5, 5)
  36. if minimapPlayerPos.is_equal_approx(playerPoint.get_position()):
  37. return
  38. var scrollPos : Vector2i = Vector2i(minimapPlayerPos - scrollContainer.size / 2)
  39. scrollPos.x = clampi(scrollPos.x, 0, int(textureSize.x - scrollContainer.size.x))
  40. scrollPos.y = clampi(scrollPos.y, 0, int(textureSize.y - scrollContainer.size.y))
  41. scrollContainer.set_h_scroll(scrollPos.x)
  42. scrollContainer.set_v_scroll(scrollPos.y)
  43. playerPoint.set_position(minimapPlayerPos)
  44. #
  45. func _on_texture_rect_gui_input(event: InputEvent):
  46. if event is InputEventMouseButton:
  47. if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
  48. if textureSize.x != 0 and textureSize.y != 0:
  49. Launcher.Action.MoveTo(event.position / textureSize * Launcher.Map.GetMapBoundaries())
  50. func _ready():
  51. var HBar : HScrollBar = scrollContainer.get_h_scroll_bar()
  52. HBar.set_scale(Vector2.ZERO)
  53. HBar.set_allow_greater(false)
  54. var VBar : VScrollBar = scrollContainer.get_v_scroll_bar()
  55. VBar.set_scale(Vector2.ZERO)
  56. VBar.set_allow_greater(false)
  57. _post_launch()
  58. func _post_launch():
  59. if Launcher.Map:
  60. Launcher.Map.PlayerWarped.connect(Warped)
  61. Launcher.Map.PlayerMoved.connect(Moved)
  62. func Destroy():
  63. if Launcher.Map:
  64. if Launcher.Map.PlayerWarped.is_connected(Warped):
  65. Launcher.Map.PlayerWarped.disconnect(Warped)
  66. if Launcher.Map.PlayerMoved.is_connected(Moved):
  67. Launcher.Map.PlayerMoved.disconnect(Moved)