gd: added input addon
This commit is contained in:
49
addons/guide/inputs/guide_input_touch_axis_base.gd
Normal file
49
addons/guide/inputs/guide_input_touch_axis_base.gd
Normal file
@ -0,0 +1,49 @@
|
||||
## Base class for axis-like touch input.
|
||||
@tool
|
||||
class_name GUIDEInputTouchAxisBase
|
||||
extends GUIDEInputTouchBase
|
||||
|
||||
var _last_position:Vector2 = Vector2.INF
|
||||
|
||||
# We use the reset call to calculate the position for this frame
|
||||
# so it can serve as reference for the next frame
|
||||
func _needs_reset() -> bool:
|
||||
return true
|
||||
|
||||
func _reset() -> void:
|
||||
_last_position = _state.get_finger_position(finger_index, finger_count)
|
||||
_apply_value(_calculate_value(_last_position))
|
||||
|
||||
func _begin_usage() -> void:
|
||||
# subscribe to relevant input events
|
||||
_state.touch_state_changed.connect(_refresh)
|
||||
_refresh()
|
||||
|
||||
func _end_usage() -> void:
|
||||
# unsubscribe from input events
|
||||
_state.touch_state_changed.disconnect(_refresh)
|
||||
|
||||
func _refresh() -> void:
|
||||
# calculate live position from the cache
|
||||
var new_position:Vector2 = _state.get_finger_position(finger_index, finger_count)
|
||||
|
||||
_apply_value(_calculate_value(new_position))
|
||||
|
||||
func _apply_value(value:Vector2):
|
||||
pass
|
||||
|
||||
func _calculate_value(new_position:Vector2) -> Vector2:
|
||||
# if we cannot calculate a delta because old or new position
|
||||
# are undefined, we say the delta is zero
|
||||
if not _last_position.is_finite() or not new_position.is_finite():
|
||||
return Vector2.ZERO
|
||||
|
||||
return new_position - _last_position
|
||||
|
||||
|
||||
func is_same_as(other:GUIDEInput):
|
||||
return other is GUIDEInputTouchAxis2D and \
|
||||
other.finger_count == finger_count and \
|
||||
other.finger_index == finger_index
|
||||
|
||||
|
Reference in New Issue
Block a user