Add cap sprite to child scene and update project configuration

This commit is contained in:
2025-04-26 03:52:45 +02:00
parent d95176fba0
commit 0c1192536c
374 changed files with 11968 additions and 1276 deletions

View File

@@ -0,0 +1,73 @@
@tool
## Shared information about current touch state. This simplifies implementation of the touch inputs
## and avoids having to process the same events multiple times.
# Cached finger positions
static var _finger_positions:Dictionary = {}
# Events processed this frame.
static var _processed_events:Dictionary = {}
# Last frame we were called
static var _last_frame:int = -1
## Processes an input event and updates touch state. Returns true, if the given event
## was touch-related.
static func process_input_event(event:InputEvent) -> bool:
if not event is InputEventScreenTouch and not event is InputEventScreenDrag:
return false
var this_frame = Engine.get_process_frames()
# if we are in a new frame, clear the processed events
if this_frame != _last_frame:
_last_frame = this_frame
_processed_events.clear()
# if the event already was processed, skip processing it again
if _processed_events.has(event):
return true
_processed_events[event] = true
var index:int = event.index
if event is InputEventScreenTouch:
if event.pressed:
_finger_positions[index] = event.position
else:
_finger_positions.erase(index)
if event is InputEventScreenDrag:
_finger_positions[index] = event.position
return true
## Gets the finger position of the finger at the given index.
## If finger_index is < 0, returns the average of all finger positions.
## Will only return a position if the amount of fingers
## currently touching matches finger_count.
##
## If no finger position can be determined, returns Vector2.INF.
static func get_finger_position(finger_index:int, finger_count:int) -> Vector2:
# if we have no finger positions right now, we can cut it short here
if _finger_positions.is_empty():
return Vector2.INF
# If the finger count doesn't match we have no position right now
if _finger_positions.size() != finger_count:
return Vector2.INF
# if a finger index is set, use this fingers position, if available
if finger_index > -1:
return _finger_positions.get(finger_index, Vector2.INF)
var result = Vector2.ZERO
for value in _finger_positions.values():
result += value
result /= float(finger_count)
return result