Virtual-Joystick-Godot
Virtual-Joystick-Godot copied to clipboard
Only 8 directions when using input actions
When using input actions, using Input.get_vector()
(which apparently got fixed) as well as Input.get_axis()
results in vectors that are 8-directional. I updated the following methods to fix it:
func _update_joystick(touch_position: Vector2) -> void:
var _base_radius = _get_base_radius()
var center : Vector2 = _base.global_position + _base_radius
var vector : Vector2 = touch_position - center
vector = vector.limit_length(clampzone_size)
if joystick_mode == Joystick_mode.FOLLOWING and touch_position.distance_to(center) > clampzone_size:
_move_base(touch_position - vector)
_move_tip(center + vector)
if vector.length_squared() > deadzone_size * deadzone_size:
is_pressed = true
output = (vector - (vector.normalized() * deadzone_size)) / (clampzone_size - deadzone_size)
if use_input_actions:
if output.x > 0:
Input.action_press(action_right, output.x)
Input.action_release(action_left)
else:
Input.action_press(action_left, -output.x)
Input.action_release(action_right)
if output.y > 0:
Input.action_press(action_down, output.y)
Input.action_release(action_up)
else:
Input.action_press(action_up, -output.y)
Input.action_release(action_down)
else:
is_pressed = false
output = Vector2.ZERO
if use_input_actions:
_reset_input()
func _reset():
is_pressed = false
output = Vector2.ZERO
_touch_index = -1
_tip.modulate = _default_color
_base.position = _base_default_position
_tip.position = _tip_default_position
if use_input_actions:
_reset_input()
func _reset_input():
for action in [action_left, action_right, action_down, action_up]:
Input.action_release(action)