Action.gd 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. extends ServiceBase
  2. var isEnabled : bool = true
  3. var supportMouse : bool = true
  4. var clickTimer : Timer = null
  5. var previousMove : Vector2 = Vector2.ZERO
  6. const stickDeadzone : float = 0.2
  7. var consumed : Array = []
  8. signal deviceChanged
  9. #
  10. func Enable(enable : bool):
  11. isEnabled = enable
  12. func IsEnabled() -> bool:
  13. return isEnabled
  14. func IsUsable(action : String) -> bool:
  15. return IsEnabled() and not consumed.has(action)
  16. #
  17. func HasConsumed() -> bool:
  18. return not consumed.is_empty()
  19. func ConsumeAction(action : String, setHandled : bool = false):
  20. consumed.push_back(action)
  21. if setHandled:
  22. get_viewport().set_input_as_handled()
  23. func TryConsume(event : InputEvent, action : String, forceMode : bool = false) -> bool:
  24. if event.is_action_pressed(action, false, true) and Launcher.Action.IsActionPressed(action, forceMode):
  25. ConsumeAction(action)
  26. return true
  27. return false
  28. func TryJustPressed(event : InputEvent, action : String, forceMode : bool = false) -> bool:
  29. if event.is_action_pressed(action, false, true) and IsActionJustPressed(action, forceMode):
  30. ConsumeAction(action, true)
  31. return true
  32. return false
  33. func TryPressed(event : InputEvent, action : String, forceMode : bool = false) -> bool:
  34. if event.is_action_pressed(action, false, true) and IsActionPressed(action, forceMode):
  35. ConsumeAction(action, true)
  36. return true
  37. return false
  38. func TryOnlyPressed(event : InputEvent, action : String, forceMode : bool = false) -> bool:
  39. if event.is_action_pressed(action, false, true) and IsActionOnlyPressed(action, forceMode):
  40. ConsumeAction(action, true)
  41. return true
  42. return false
  43. func TryJustReleased(event : InputEvent, action : String, forceMode : bool = false) -> bool:
  44. if event.is_action_released(action) and IsActionJustReleased(action, forceMode):
  45. ConsumeAction(action, true)
  46. return true
  47. return false
  48. #
  49. func IsActionJustPressed(action : String, forceMode : bool = false) -> bool:
  50. return Input.is_action_just_pressed(action) if forceMode or IsUsable(action) else false
  51. func IsActionPressed(action : String, forceMode : bool = false) -> bool:
  52. return Input.is_action_pressed(action) if forceMode or IsUsable(action) else false
  53. func IsActionOnlyPressed(action : String, forceMode : bool = false) -> bool:
  54. return Input.is_action_pressed(action) && not Input.is_action_just_pressed(action) if forceMode or IsUsable(action) else false
  55. func IsActionJustReleased(action : String, forceMode : bool = false) -> bool:
  56. return Input.is_action_just_released(action) if forceMode or IsUsable(action) else false
  57. func GetMove(forceMode : bool = false) -> Vector2:
  58. var moveVector : Vector2 = Vector2.ZERO
  59. if IsEnabled() || forceMode:
  60. moveVector.x = Input.get_action_strength("gp_move_right") - Input.get_action_strength("gp_move_left")
  61. moveVector.y = Input.get_action_strength("gp_move_down") - Input.get_action_strength("gp_move_up")
  62. moveVector += Launcher.GUI.sticks.GetMove()
  63. moveVector = moveVector.normalized()
  64. var moveLength : float = moveVector.length()
  65. if moveLength < stickDeadzone:
  66. moveVector = Vector2.ZERO;
  67. else:
  68. moveVector = moveVector.normalized() * ((moveLength - stickDeadzone) / (1 - stickDeadzone))
  69. return moveVector
  70. # Local player movement
  71. func _unhandled_input(event):
  72. if event.is_action("gp_click_to") and supportMouse:
  73. if FSM.IsGameState() and clickTimer:
  74. if clickTimer.is_stopped() and IsActionPressed("gp_click_to"):
  75. var mousePos : Vector2 = Launcher.Camera.mainCamera.get_global_mouse_position()
  76. Network.SetClickPos(mousePos)
  77. clickTimer.start()
  78. if not HasConsumed() and Launcher.Camera:
  79. if event is InputEventMagnifyGesture:
  80. if event.factor > 1.0:
  81. ConsumeAction("gp_zoom_in", true)
  82. Launcher.Camera.ZoomIn()
  83. elif event.factor < 1.0:
  84. ConsumeAction("gp_zoom_out", true)
  85. Launcher.Camera.ZoomOut()
  86. elif TryJustPressed(event, "gp_zoom_in"): Launcher.Camera.ZoomIn()
  87. elif TryJustPressed(event, "gp_zoom_out"): Launcher.Camera.ZoomOut()
  88. elif TryJustPressed(event, "gp_zoom_reset"): Launcher.Camera.ZoomReset()
  89. func _physics_process(_deltaTime : float):
  90. if Launcher.Player:
  91. var move : Vector2 = GetMove()
  92. if move != Vector2.ZERO:
  93. if clickTimer.get_time_left() > 0:
  94. clickTimer.stop()
  95. if previousMove != move:
  96. Network.SetMovePos(move)
  97. else:
  98. if previousMove != move:
  99. Launcher.Player.entityVelocity = move
  100. Network.ClearNavigation()
  101. previousMove = move
  102. #
  103. func _input(event):
  104. if event.is_pressed():
  105. if event is InputEventJoypadButton and DeviceManager.currentDeviceType != DeviceManager.DeviceType.JOYSTICK:
  106. DeviceManager.DeviceChanged(DeviceManager.DeviceType.JOYSTICK)
  107. elif event is InputEventKey and DeviceManager.currentDeviceType != DeviceManager.DeviceType.KEYBOARD:
  108. DeviceManager.DeviceChanged(DeviceManager.DeviceType.KEYBOARD)
  109. if Launcher.Player and Launcher.GUI and Launcher.Map:
  110. if TryJustPressed(event, "smile_1"): Network.TriggerEmote(DB.GetCellHash("Dying"))
  111. elif TryJustPressed(event, "smile_2"): Network.TriggerEmote(DB.GetCellHash("Creeped"))
  112. elif TryJustPressed(event, "smile_3"): Network.TriggerEmote(DB.GetCellHash("Smile"))
  113. elif TryJustPressed(event, "smile_4"): Network.TriggerEmote(DB.GetCellHash("Sad"))
  114. elif TryJustPressed(event, "smile_5"): Network.TriggerEmote(DB.GetCellHash("Evil"))
  115. elif TryJustPressed(event, "smile_6"): Network.TriggerEmote(DB.GetCellHash("Wink"))
  116. elif TryJustPressed(event, "smile_7"): Network.TriggerEmote(DB.GetCellHash("Angel"))
  117. elif TryJustPressed(event, "smile_8"): Network.TriggerEmote(DB.GetCellHash("Embarrassed"))
  118. elif TryJustPressed(event, "smile_9"): Network.TriggerEmote(DB.GetCellHash("Amused"))
  119. elif TryJustPressed(event, "smile_10"): Network.TriggerEmote(DB.GetCellHash("Grin"))
  120. elif TryJustPressed(event, "smile_11"): Network.TriggerEmote(DB.GetCellHash("Angry"))
  121. elif TryJustPressed(event, "smile_12"): Network.TriggerEmote(DB.GetCellHash("Bored"))
  122. elif TryJustPressed(event, "smile_13"): Network.TriggerEmote(DB.GetCellHash("Bubble"))
  123. elif TryJustPressed(event, "smile_14"): Network.TriggerEmote(DB.GetCellHash("Dots"))
  124. elif TryJustPressed(event, "smile_15"): Network.TriggerEmote(DB.GetCellHash("Whatever"))
  125. elif TryJustPressed(event, "smile_16"): Network.TriggerEmote(DB.GetCellHash("Surprised"))
  126. elif TryJustPressed(event, "smile_17"): Network.TriggerEmote(DB.GetCellHash("Confused"))
  127. elif TryJustPressed(event, "gp_sit"): Network.TriggerSit()
  128. elif TryJustPressed(event, "gp_target"): Launcher.Player.Target(Launcher.Player.position, true, true)
  129. elif TryJustPressed(event, "gp_untarget"): Launcher.Player.ClearTarget()
  130. elif TryJustPressed(event, "gp_interact"): Launcher.Player.JustInteract()
  131. elif TryPressed(event, "gp_interact"): Launcher.Player.Interact()
  132. elif TryJustPressed(event, "gp_shortcut_1"): Launcher.GUI.actionBoxes.Trigger(0)
  133. elif TryJustPressed(event, "gp_shortcut_2"): Launcher.GUI.actionBoxes.Trigger(1)
  134. elif TryJustPressed(event, "gp_shortcut_3"): Launcher.GUI.actionBoxes.Trigger(2)
  135. elif TryJustPressed(event, "gp_shortcut_4"): Launcher.GUI.actionBoxes.Trigger(3)
  136. elif TryJustPressed(event, "gp_shortcut_5"): Launcher.GUI.actionBoxes.Trigger(4)
  137. elif TryJustPressed(event, "gp_shortcut_6"): Launcher.GUI.actionBoxes.Trigger(5)
  138. elif TryJustPressed(event, "gp_shortcut_7"): Launcher.GUI.actionBoxes.Trigger(6)
  139. elif TryJustPressed(event, "gp_shortcut_8"): Launcher.GUI.actionBoxes.Trigger(7)
  140. elif TryJustPressed(event, "gp_shortcut_9"): Launcher.GUI.actionBoxes.Trigger(8)
  141. elif TryJustPressed(event, "gp_shortcut_10"): Launcher.GUI.actionBoxes.Trigger(9)
  142. elif TryJustPressed(event, "gp_pickup"): Launcher.Map.PickupNearestDrop()
  143. elif TryJustPressed(event, "gp_morph"): Network.TriggerMorph()
  144. if not HasConsumed() and Launcher.GUI:
  145. if TryJustPressed(event, "ui_close"): Launcher.GUI.CloseWindow()
  146. elif TryJustPressed(event, "ui_close", true): Launcher.GUI.CloseCurrent()
  147. elif TryJustPressed(event, "ui_menu"): Launcher.GUI.menu._on_button_pressed()
  148. elif FSM.IsGameState():
  149. if TryJustPressed(event, "ui_inventory"): Launcher.GUI.ToggleControl(Launcher.GUI.inventoryWindow)
  150. elif TryJustPressed(event, "ui_minimap"): Launcher.GUI.ToggleControl(Launcher.GUI.minimapWindow)
  151. elif TryJustPressed(event, "ui_chat"): Launcher.GUI.ToggleControl(Launcher.GUI.chatWindow)
  152. elif TryJustPressed(event, "ui_emote"): Launcher.GUI.ToggleControl(Launcher.GUI.emoteWindow)
  153. elif TryJustPressed(event, "ui_skill"): Launcher.GUI.ToggleControl(Launcher.GUI.skillWindow)
  154. elif TryJustPressed(event, "ui_settings"): Launcher.GUI.ToggleControl(Launcher.GUI.settingsWindow)
  155. elif TryJustPressed(event, "ui_stat"): Launcher.GUI.ToggleControl(Launcher.GUI.statWindow)
  156. elif TryJustPressed(event, "ui_validate"): Launcher.GUI.ToggleChatNewLine()
  157. elif TryJustPressed(event, "ui_screenshot"): FileSystem.SaveScreenshot()
  158. consumed.clear()
  159. #
  160. func _ready():
  161. clickTimer = Timer.new()
  162. clickTimer.set_name("ClickTimer")
  163. clickTimer.set_wait_time(0.2)
  164. clickTimer.set_one_shot(true)
  165. add_child.call_deferred(clickTimer)
  166. DeviceManager.Init()
  167. func Destroy():
  168. if clickTimer:
  169. remove_child.call_deferred(clickTimer)
  170. clickTimer = null