quicktimeEvent.gd 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. extends Node2D
  2. @onready var outline := $Outline
  3. @onready var qte := $qte
  4. @onready var label := $qte/Label
  5. @onready var timer := $Timer
  6. var initial_time = 0
  7. var success_callback: Callable
  8. var fail_callback: Callable
  9. var keycode = KEY_0
  10. func set_time(time):
  11. timer.wait_time = time
  12. func set_text(text):
  13. label.text = text
  14. func set_key(key):
  15. keycode = key
  16. func set_success_callback(cbk):
  17. success_callback = cbk
  18. func set_fail_callback(cbk):
  19. fail_callback = cbk
  20. var failed = false
  21. func fail():
  22. if not failed:
  23. failed = true
  24. qte.self_modulate = Color(255, 0, 0)
  25. fail_callback.call()
  26. await get_tree().create_timer(1).timeout
  27. queue_free()
  28. # Called when the node enters the scene tree for the first time.
  29. func _ready():
  30. initial_time = timer.wait_time
  31. # Called every frame. 'delta' is the elapsed time since the previous frame.
  32. var min_scale = 0.334
  33. var max_scale = 1.304
  34. func _process(_delta):
  35. if timer.time_left <= 0:
  36. fail()
  37. else:
  38. if Input.is_key_pressed(keycode):
  39. success_callback.call()
  40. queue_free()
  41. var final_scale = Vector2(min_scale, min_scale)
  42. var initial_scale = Vector2(max_scale, max_scale)
  43. var progress = timer.time_left / initial_time
  44. # Set the scale directly based on progress
  45. outline.scale = initial_scale.lerp(final_scale, 1.0 - progress)
  46. func _on_touch_screen_button_pressed():
  47. if timer.time_left > 0:
  48. success_callback.call()
  49. queue_free()