2025-08-27 13:30:50 +08:00
|
|
|
class_name TickTool
|
|
|
|
|
|
2025-09-14 08:23:26 +08:00
|
|
|
static func millseconds(ms: float):
|
2025-08-27 16:33:21 +08:00
|
|
|
return await WorldManager.tree.create_timer(ms / 1000.0).timeout
|
|
|
|
|
static func frame(count: int = 1):
|
|
|
|
|
for i in range(count):
|
|
|
|
|
await WorldManager.tree.physics_frame
|
2025-08-29 13:56:31 +08:00
|
|
|
static func until(predicate: Callable):
|
2026-01-28 22:51:28 +08:00
|
|
|
while is_instance_valid(predicate.get_object()):
|
2026-01-24 08:23:41 +08:00
|
|
|
if predicate.call():
|
|
|
|
|
break
|
2026-01-28 22:51:12 +08:00
|
|
|
await frame()
|
2025-09-14 08:23:26 +08:00
|
|
|
static func modifyAnimationKey(animator: AnimationPlayer, name: String, track: NodePath, trackType: Animation.TrackType, time: float, value: Variant):
|
|
|
|
|
var animation = animator.get_animation(name)
|
|
|
|
|
var trackIdx = animation.find_track(track, trackType)
|
|
|
|
|
var keyIdx = animation.track_find_key(trackIdx, time)
|
|
|
|
|
if trackType == Animation.TrackType.TYPE_BEZIER:
|
2026-01-24 08:24:48 +08:00
|
|
|
var inHandle = animation.bezier_track_get_key_in_handle(trackIdx, keyIdx)
|
|
|
|
|
var outHandle = animation.bezier_track_get_key_out_handle(trackIdx, keyIdx)
|
2025-09-14 08:23:26 +08:00
|
|
|
animation.track_set_key_value(trackIdx, keyIdx, [value, inHandle.x, inHandle.y, outHandle.x, outHandle.y])
|
|
|
|
|
else:
|
|
|
|
|
animation.track_set_key_value(trackIdx, keyIdx, [value])
|