Sticks.gd 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. extends HBoxContainer
  2. #
  3. @onready var buttonLeft : TouchScreenButton = $LeftAnchor/ButtonLeft
  4. @onready var direction : TouchScreenButton = $LeftAnchor/Direction
  5. @onready var buttonRight : TouchScreenButton = $RightAnchor/ButtonRight
  6. @onready var actions : Control = $RightAnchor/Actions
  7. @onready var directionButton : Control = $LeftAnchor/Direction/Button
  8. @onready var defaultStickPosition : Vector2 = directionButton.get_position()
  9. var leftStickPressed : bool = false
  10. var lastMove : Vector2 = Vector2.ZERO
  11. #
  12. func GetMove() -> Vector2:
  13. if leftStickPressed and defaultStickPosition.x != 0.0 and defaultStickPosition.y != 0.0:
  14. var move : Vector2 = directionButton.get_position() / defaultStickPosition - Vector2.ONE
  15. lastMove = move
  16. return move
  17. else:
  18. return Vector2.ZERO
  19. func Enable(isEnabled : bool):
  20. if isEnabled:
  21. var rescaledWindowSize : float = float(DisplayServer.window_get_size().x / Launcher.Root.get_content_scale_factor())
  22. var horizontalMargin : int = lerp(0, 160, max(0, rescaledWindowSize - Launcher.GUI.settingsWindow.GetVal("Render-MinWindowSize").x * 1.5) / rescaledWindowSize)
  23. Launcher.GUI.shortcuts.add_theme_constant_override("margin_left", horizontalMargin)
  24. Launcher.GUI.shortcuts.add_theme_constant_override("margin_right", horizontalMargin)
  25. buttonLeft.set_visible(isEnabled)
  26. direction.set_visible(isEnabled)
  27. buttonRight.set_visible(isEnabled)
  28. actions.set_visible(isEnabled)
  29. if Launcher.Action:
  30. Launcher.Action.supportMouse = not isEnabled
  31. #
  32. func _on_direction_button_down():
  33. leftStickPressed = true
  34. func _on_direction_button_up():
  35. leftStickPressed = false
  36. directionButton.position = defaultStickPosition
  37. func _physics_process(_delta):
  38. if leftStickPressed:
  39. var newPos : Vector2 = get_local_mouse_position() - directionButton.get_size() / 2
  40. newPos.x = clampf(newPos.x, 0.0, 100.0)
  41. newPos.y = clampf(newPos.y, 0.0, 100.0)
  42. directionButton.position = newPos
  43. func _press_button(buttonId : JoyButton):
  44. DeviceManager.SendEventJoy(buttonId, true)
  45. func _release_button(buttonId : JoyButton):
  46. DeviceManager.SendEventJoy(buttonId, false)