main.gd 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. extends Control
  2. const trans_list = ["Linear", "Sine", "Quint", "Quart", "Quad", "Expo", "Elastic", "Cubic", "Circ", "Bounce", "Back"]
  3. const eases_list = ["In", "Out", "InOut", "OutIn"]
  4. const modes_list = ["Move", "Color", "Scale", "Rotate", "Callback", "Follow", "Repeat", "Pause"]
  5. var current_trans = Tween.TRANS_LINEAR
  6. var current_ease = Tween.EASE_IN
  7. onready var tween = $Tween
  8. onready var trans_vbox = $Controls/Transitions
  9. onready var eases_vbox = $Controls/Eases
  10. onready var modes_vbox = $Controls/Modes
  11. onready var timeline = $Top/Timeline
  12. onready var color_from_picker = $Controls/ColorFrom/ColorPicker
  13. onready var color_to_picker = $Controls/ColorTo/ColorPicker
  14. onready var area_label = $Top/Area/RichTextLabel
  15. onready var sprite = $Top/Area/Sprite
  16. onready var follow = $Top/Area/Follow
  17. onready var follow_2 = $Top/Area/Follow2
  18. onready var size = $Top/Area.get_size()
  19. onready var move_mode = modes_vbox.get_node(@"Move")
  20. onready var color_mode = modes_vbox.get_node(@"Color")
  21. onready var scale_mode = modes_vbox.get_node(@"Scale")
  22. onready var rotate_mode = modes_vbox.get_node(@"Rotate")
  23. onready var callback_mode = modes_vbox.get_node(@"Callback")
  24. onready var follow_mode = modes_vbox.get_node(@"Follow")
  25. onready var repeat_mode = modes_vbox.get_node(@"Repeat")
  26. onready var paused_mode = modes_vbox.get_node(@"Pause")
  27. func _ready():
  28. for index in range(trans_list.size()):
  29. trans_vbox.get_node(trans_list[index]).connect("pressed", self, "on_trans_changed", [index])
  30. for index in range(eases_list.size()):
  31. eases_vbox.get_node(eases_list[index]).connect("pressed", self, "on_eases_changed", [index])
  32. for index in range(modes_list.size()):
  33. modes_vbox.get_node(modes_list[index]).connect("pressed", self, "on_modes_changed", [index])
  34. color_from_picker.set_pick_color(Color.red)
  35. color_to_picker.set_pick_color(Color.cyan)
  36. for node in [trans_vbox, eases_vbox, modes_vbox]:
  37. node.get_child(1).set_pressed(true)
  38. modes_vbox.get_node(@"Repeat").set_pressed(true)
  39. reset_tween()
  40. func on_trans_changed(index):
  41. for i in range(trans_list.size()):
  42. var btn = trans_vbox.get_node(trans_list[i])
  43. btn.set_pressed(i == index)
  44. current_trans = index
  45. reset_tween()
  46. func on_eases_changed(index):
  47. for i in range(eases_list.size()):
  48. var btn = eases_vbox.get_node(eases_list[i])
  49. btn.set_pressed(i == index)
  50. current_ease = index
  51. reset_tween()
  52. func on_modes_changed(index):
  53. if modes_list[index] == "Pause":
  54. if paused_mode.is_pressed():
  55. tween.stop_all()
  56. else:
  57. tween.resume_all()
  58. else:
  59. reset_tween()
  60. func _on_ColorPicker_color_changed(_color):
  61. reset_tween()
  62. func reset_tween():
  63. var pos = tween.tell()
  64. tween.reset_all()
  65. tween.remove_all()
  66. if move_mode.is_pressed():
  67. # The first line moves from the top left to the bottom right, while
  68. # the second line moves backwards afterwards (there is a delay of 2).
  69. # These are different (_method vs _property) only for the sake of
  70. # showcasing interpolation of both methods and properties.
  71. # The syntax is (object, method/property name, from value, to value,
  72. # duration, transition type, ease type, delay), last 3 optional.
  73. tween.interpolate_method(sprite, "set_position", Vector2.ZERO, size, 2, current_trans, current_ease)
  74. tween.interpolate_property(sprite, "position", size, Vector2.ZERO, 2, current_trans, current_ease, 2)
  75. if color_mode.is_pressed():
  76. tween.interpolate_method(sprite, "set_modulate", color_from_picker.get_pick_color(), color_to_picker.get_pick_color(), 2, current_trans, current_ease)
  77. tween.interpolate_property(sprite, "modulate", color_to_picker.get_pick_color(), color_from_picker.get_pick_color(), 2, current_trans, current_ease, 2)
  78. else:
  79. sprite.set_modulate(Color.white)
  80. if scale_mode.is_pressed():
  81. tween.interpolate_method(sprite, "set_scale", Vector2(0.5, 0.5), Vector2(1.5, 1.5), 2, current_trans, current_ease)
  82. tween.interpolate_property(sprite, "scale", Vector2(1.5, 1.5), Vector2(0.5, 0.5), 2, current_trans, current_ease, 2)
  83. else:
  84. sprite.set_scale(Vector2.ONE)
  85. if rotate_mode.is_pressed():
  86. tween.interpolate_method(sprite, "set_rotation_degrees", 0, 360, 2, current_trans, current_ease)
  87. tween.interpolate_property(sprite, "rotation_degrees", 360, 0, 2, current_trans, current_ease, 2)
  88. if callback_mode.is_pressed():
  89. tween.interpolate_callback(self, 0.5, "on_callback", "0.5 seconds after")
  90. tween.interpolate_callback(self, 0.2, "on_callback", "1.2 seconds after")
  91. if follow_mode.is_pressed():
  92. follow.show()
  93. follow_2.show()
  94. tween.follow_method(follow, "set_position", Vector2(0, size.y), sprite, "get_position", 2, current_trans, current_ease)
  95. tween.targeting_method(follow, "set_position", sprite, "get_position", Vector2(0, size.y), 2, current_trans, current_ease, 2)
  96. tween.targeting_property(follow_2, "position", sprite, "position", Vector2(size.x, 0), 2, current_trans, current_ease)
  97. tween.follow_property(follow_2, "position", Vector2(size.x, 0), sprite, "position", 2, current_trans, current_ease, 2)
  98. else:
  99. follow.hide()
  100. follow_2.hide()
  101. tween.set_repeat(repeat_mode.is_pressed())
  102. tween.start()
  103. tween.seek(pos)
  104. if paused_mode.is_pressed():
  105. tween.stop_all()
  106. func _on_Tween_tween_step(_object, _key, elapsed, _value):
  107. var runtime = tween.get_runtime()
  108. var ratio = 100 * (elapsed / runtime)
  109. timeline.set_value(ratio)
  110. func _on_Timeline_value_changed(value):
  111. if not paused_mode.is_pressed():
  112. return
  113. var runtime = tween.get_runtime()
  114. tween.seek(runtime * value / 100)
  115. func on_callback(arg):
  116. area_label.add_text("on_callback -> " + arg + "\n")