main.gd 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. extends Control
  2. # Member variables
  3. var trans = ["linear", "sine", "quint", "quart", "quad", "expo", "elastic", "cubic", "circ", "bounce", "back"]
  4. var eases = ["in", "out", "in_out", "out_in"]
  5. var modes = ["move", "color", "scale", "rotate", "callback", "follow", "repeat", "pause"]
  6. var state = {
  7. trans = Tween.TRANS_LINEAR,
  8. eases = Tween.EASE_IN,
  9. }
  10. func _ready():
  11. for index in range(trans.size()):
  12. var name = trans[index]
  13. get_node("trans/" + name).connect("pressed", self, "on_trans_changed", [name, index])
  14. for index in range(eases.size()):
  15. var name = eases[index]
  16. get_node("eases/" + name).connect("pressed", self, "on_eases_changed", [name, index])
  17. for index in range(modes.size()):
  18. var name = modes[index]
  19. get_node("modes/" + name).connect("pressed", self, "on_modes_changed", [name])
  20. get_node("colors/color_from/picker").set_color(Color(1, 0, 0, 1))
  21. get_node("colors/color_from/picker").connect("color_changed", self, "on_color_changed")
  22. get_node("colors/color_to/picker").set_color(Color(0, 1, 1, 1))
  23. get_node("colors/color_to/picker").connect("color_changed", self, "on_color_changed")
  24. get_node("trans/linear").set_pressed(true)
  25. get_node("eases/in").set_pressed(true)
  26. get_node("modes/move").set_pressed(true)
  27. get_node("modes/repeat").set_pressed(true)
  28. reset_tween()
  29. func on_trans_changed(name, index):
  30. for index in range(trans.size()):
  31. var pressed = trans[index] == name
  32. var btn = get_node("trans/" + trans[index])
  33. btn.set_pressed(pressed)
  34. btn.set_ignore_mouse(pressed)
  35. state.trans = index
  36. reset_tween()
  37. func on_eases_changed(name, index):
  38. for index in range(eases.size()):
  39. var pressed = eases[index] == name
  40. var btn = get_node("eases/" + eases[index])
  41. btn.set_pressed(pressed)
  42. btn.set_ignore_mouse(pressed)
  43. state.eases = index
  44. reset_tween()
  45. func on_modes_changed(name):
  46. var tween = get_node("tween")
  47. if name == "pause":
  48. if get_node("modes/pause").is_pressed():
  49. tween.stop_all()
  50. get_node("timeline").set_ignore_mouse(false)
  51. else:
  52. tween.resume_all()
  53. get_node("timeline").set_ignore_mouse(true)
  54. else:
  55. reset_tween()
  56. func on_color_changed(color):
  57. reset_tween()
  58. func reset_tween():
  59. var tween = get_node("tween")
  60. var pos = tween.tell()
  61. tween.reset_all()
  62. tween.remove_all()
  63. var sprite = get_node("tween/area/sprite")
  64. var follow = get_node("tween/area/follow")
  65. var follow_2 = get_node("tween/area/follow_2")
  66. var size = get_node("tween/area").get_size()
  67. if get_node("modes/move").is_pressed():
  68. tween.interpolate_method(sprite, "set_pos", Vector2(0, 0), Vector2(size.width, size.height), 2, state.trans, state.eases)
  69. tween.interpolate_property(sprite, "transform/pos", Vector2(size.width, size.height), Vector2(0, 0), 2, state.trans, state.eases, 2)
  70. if get_node("modes/color").is_pressed():
  71. tween.interpolate_method(sprite, "set_modulate", get_node("colors/color_from/picker").get_color(), get_node("colors/color_to/picker").get_color(), 2, state.trans, state.eases)
  72. tween.interpolate_property(sprite, "modulate", get_node("colors/color_to/picker").get_color(), get_node("colors/color_from/picker").get_color(), 2, state.trans, state.eases, 2)
  73. else:
  74. sprite.set_modulate(Color(1,1,1,1))
  75. if get_node("modes/scale").is_pressed():
  76. tween.interpolate_method(sprite, "set_scale", Vector2(0.5, 0.5), Vector2(1.5, 1.5), 2, state.trans, state.eases)
  77. tween.interpolate_property(sprite, "transform/scale", Vector2(1.5, 1.5), Vector2(0.5, 0.5), 2, state.trans, state.eases, 2)
  78. else:
  79. sprite.set_scale(Vector2(1,1))
  80. if get_node("modes/rotate").is_pressed():
  81. tween.interpolate_method(sprite, "set_rotd", 0, 360, 2, state.trans, state.eases)
  82. tween.interpolate_property(sprite, "transform/rot", 360, 0, 2, state.trans, state.eases, 2)
  83. if get_node("modes/callback").is_pressed():
  84. tween.interpolate_callback(self, 0.5, "on_callback", "0.5 second's after")
  85. tween.interpolate_callback(self, 0.2, "on_callback", "1.2 second's after")
  86. if get_node("modes/follow").is_pressed():
  87. follow.show()
  88. follow_2.show()
  89. tween.follow_method(follow, "set_pos", Vector2(0, size.height), sprite, "get_pos", 2, state.trans, state.eases)
  90. tween.targeting_method(follow, "set_pos", sprite, "get_pos", Vector2(0, size.height), 2, state.trans, state.eases, 2)
  91. tween.targeting_property(follow_2, "transform/pos", sprite, "transform/pos", Vector2(size.width, 0), 2, state.trans, state.eases)
  92. tween.follow_property(follow_2, "transform/pos", Vector2(size.width, 0), sprite, "transform/pos", 2, state.trans, state.eases, 2)
  93. else:
  94. follow.hide()
  95. follow_2.hide()
  96. tween.set_repeat(get_node("modes/repeat").is_pressed())
  97. tween.start()
  98. tween.seek(pos)
  99. if get_node("modes/pause").is_pressed():
  100. tween.stop_all()
  101. get_node("timeline").set_ignore_mouse(false)
  102. get_node("timeline").set_value(0)
  103. else:
  104. tween.resume_all()
  105. get_node("timeline").set_ignore_mouse(true)
  106. func _on_tween_step(object, key, elapsed, value):
  107. var timeline = get_node("timeline")
  108. var tween = get_node("tween")
  109. var runtime = tween.get_runtime()
  110. var ratio = 100*(elapsed/runtime)
  111. timeline.set_value(ratio)
  112. func _on_timeline_value_changed(value):
  113. if !get_node("modes/pause").is_pressed():
  114. return
  115. var tween = get_node("tween")
  116. var runtime = tween.get_runtime()
  117. tween.seek(runtime*value/100)
  118. func on_callback(arg):
  119. var label = get_node("tween/area/label")
  120. label.add_text("on_callback -> " + arg + "\n")