Made a toolset folder, and added the Dialogic plugin.

This commit is contained in:
PersonGuyGit
2022-07-31 11:30:54 -06:00
parent ecf2d792cb
commit 09f1961112
886 changed files with 34865 additions and 0 deletions

View File

@ -0,0 +1,7 @@
Copyright © 2021 Alessandro Senese (ceceppa)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,318 @@
class_name DialogicAnimaPropertiesHelper
#
# Different node types have different property names
#
# Example:
# Control: position is "rect_position"
# Node2D : position is "offset"
#
# So, this utility class helps the animations to figure out which
# property to animate :)
#
enum PIVOT {
CENTER,
CENTER_BOTTOM,
TOP_CENTER,
TOP_LEFT,
LEFT_BOTTOM,
RIGHT_BOTTOM
}
static func get_position(node: Node) -> Vector2:
if node is Control:
return node.rect_position
if node is Node2D:
return node.global_position
return node.global_transform.origin
static func get_size(node: Node) -> Vector2:
if node is Control:
return node.get_size()
elif node is AnimatedSprite:
var frames = (node as AnimatedSprite).frames
var animation = (node as AnimatedSprite).animation
# scale can be negative
var scale = Vector2(abs(node.scale.x), abs(node.scale.y))
return frames.get_frame(animation, 0).get_size() * scale
elif node is Node2D and "texture" in node:
# scale can be negative
var scale = Vector2(abs(node.scale.x), abs(node.scale.y))
return node.texture.get_size() * scale
return Vector2.ZERO
static func get_scale(node: Node) -> Vector2:
if node is Control:
return node.rect_scale
return node.scale
static func get_rotation(node: Node):
if node is Control:
return node.rect_rotation
elif node is Node2D:
return node.rotation_degrees
return node.rotation
static func set_2D_pivot(node: Node, pivot: int) -> void:
var size: Vector2 = get_size(node)
match pivot:
PIVOT.TOP_CENTER:
if node is Control:
node.set_pivot_offset(Vector2(size.x / 2, 0))
else:
var position = node.global_position
node.offset = Vector2(0, size.y / 2)
node.global_position = position - node.offset
PIVOT.TOP_LEFT:
if node is Control:
node.set_pivot_offset(Vector2(0, 0))
else:
var position = node.global_position
node.offset = Vector2(size.x / 2, 0)
node.global_position = position - node.offset
PIVOT.CENTER:
if node is Control:
node.set_pivot_offset(size / 2)
PIVOT.CENTER_BOTTOM:
if node is Control:
node.set_pivot_offset(Vector2(size.x / 2, size.y / 2))
else:
var position = node.global_position
node.offset = Vector2(0, -size.y / 2)
node.global_position = position - node.offset
PIVOT.LEFT_BOTTOM:
if node is Control:
node.set_pivot_offset(Vector2(0, size.y))
else:
var position = node.global_position
node.offset = Vector2(size.x / 2, size.y)
node.global_position = position - node.offset
PIVOT.RIGHT_BOTTOM:
if node is Control:
node.set_pivot_offset(Vector2(size.x, size.y / 2))
else:
var position = node.global_position
node.offset = Vector2(-size.x / 2, size.y / 2)
node.global_position = position - node.offset
_:
printerr('Pivot point not handled yet')
static func get_property_initial_value(node: Node, property: String):
property = property.to_lower()
match property:
"x", "position:x":
var position = get_position(node)
return position.x
"y", "position:y":
var position = get_position(node)
return position.y
"z", "position:z":
var position = get_position(node)
return position.z
"position":
return get_position(node)
"rotation":
return get_rotation(node)
"rotation:x":
return get_rotation(node).x
"rotation:y":
return get_rotation(node).y
"rotation:z":
return get_rotation(node).z
"opacity":
return node.modulate.a
"skew:x":
return node.get_global_transform().y.x
"skew:y":
return node.get_global_transform().x.y
var p = property.split(':')
var property_name: String = p[0]
var rect_property_name: String = 'rect_' + property_name
var node_property_name: String
var key = p[1] if p.size() > 1 else null
if node.get(property_name):
node_property_name = property_name
if node.get(rect_property_name):
node_property_name = rect_property_name
if p[0] == 'shader_param':
var material: ShaderMaterial
if node is MeshInstance:
material = node.get_surface_material(0)
else:
material = node.material
return material.get_shader_param(p[1])
if node_property_name:
if key:
return node[node_property_name][key]
return node[node_property_name]
if property.find('__') == 0:
return 0
return property_name
static func map_property_to_godot_property(node: Node, property: String) -> Dictionary:
property = property.to_lower()
match property:
"x", "position:x":
if node is Control:
return {
property_name = "rect_position",
key = "x",
}
return {
property_name = "global_transform",
key = "origin",
subkey = "x"
}
"y", "position:y":
if node is Control:
return {
property_name = "rect_position",
key = "y",
}
return {
property_name = "global_transform",
key = "origin",
subkey = "y"
}
"z", "position:z":
if node is Control:
printerr('position:z is not supported by Control nodes')
return {
property_name = "global_transform",
key = "origin",
subkey = "z"
}
"position":
if node is Control:
return {
property_name = "rect_position"
}
return {
property_name = "global_transform",
key = "origin"
}
"opacity":
return {
property_name = "modulate",
key = "a"
}
"rotation":
var property_name = "rotation"
if node is Control:
property_name = "rect_rotation"
elif node is Node2D:
property_name = "rotation_degrees"
return {
property_name = property_name
}
"rotation:x":
return {
property_name = "rotation",
key = "x"
}
"rotation:y":
return {
property_name = "rotation",
key = "y"
}
"rotation:z":
return {
property_name = "rotation",
key = "z"
}
"skew:x":
return {
property_name = "transform",
key = "y",
subkey = "x"
}
"skew:y":
return {
property_name = "transform",
key = "x",
subkey = "y"
}
var p = property.split(':')
var property_name: String = p[0]
var rect_property_name: String = 'rect_' + property_name
var node_property_name: String
var key = p[1] if p.size() > 1 else null
var subkey = p[2] if p.size() > 2 else null
if node.get(property_name):
node_property_name = property_name
if node.get(rect_property_name):
node_property_name = rect_property_name
if p[0] == 'shader_param':
var material: ShaderMaterial
if node is MeshInstance:
material = node.get_surface_material(0)
else:
material = node.material
return {
callback = funcref(material, 'set_shader_param'),
param = p[1]
}
if node_property_name:
if key:
return {
property_name = node_property_name,
key = key
}
if subkey:
return {
property_name = node_property_name,
key = key,
subkey = subkey
}
return {
property_name = node_property_name
}
if property.find('__') == 0:
return {
property_name = property
}
return {
property_name = property
}

View File

@ -0,0 +1,83 @@
extends Node
class_name DialogicAnimaResources
const BASE_PATH := 'res://addons/dialogic/Nodes/Anima/animations/'
static func get_animation_script(animation_name: String):
# for custom_animation in _custom_animations:
# if custom_animation.name == animation_name:
# return custom_animation.script
var resource_file = get_animation_script_with_path(animation_name)
if resource_file:
return load(resource_file).new()
printerr('No animation found with name: ', animation_name)
return null
static func get_animation_script_with_path(animation_name: String) -> String:
if not animation_name.ends_with('.gd'):
animation_name += '.gd'
animation_name = from_camel_to_snack_case(animation_name)
for file_name in get_available_animations():
if file_name is String and file_name.ends_with(animation_name):
return file_name
return ''
static func get_available_animations() -> Array:
var list = _get_animations_list()
var filtered := []
for file in list:
if file.find('.gd.') < 0:
filtered.push_back(file.replace('.gdc', '.gd'))
return filtered #+ _custom_animations
static func _get_animations_list() -> Array:
var files = _get_scripts_in_dir(BASE_PATH)
var filtered := []
files.sort()
return files
static func _get_scripts_in_dir(path: String, files: Array = []) -> Array:
var dir = Directory.new()
if dir.open(path) != OK:
return files
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if file_name != "." and file_name != "..":
if dir.current_is_dir():
_get_scripts_in_dir(path + file_name + '/', files)
else:
files.push_back(path + file_name)
file_name = dir.get_next()
return files
static func from_camel_to_snack_case(string:String) -> String:
var result = PoolStringArray()
var is_first_char = true
for character in string:
if character == character.to_lower() or is_first_char:
result.append(character.to_lower())
else:
result.append('_' + character.to_lower())
is_first_char = false
return result.join('').replace(' ', '_')

View File

@ -0,0 +1,571 @@
extends Tween
var loop = 1
signal finished_animation
var _animation_data = []
enum PLAY_MODE {
NORMAL,
BACKWARDS
}
# Needed to use interpolate_property
var _fake_property: Dictionary = {}
var _callbacks := {}
func _ready():
connect("tween_started", self, '_on_tween_started')
connect("tween_step", self, '_on_tween_step_with_easing')
connect("tween_step", self, '_on_tween_step_with_easing_callback')
connect("tween_step", self, '_on_tween_step_with_easing_funcref')
connect("tween_step", self, '_on_tween_step_without_easing')
connect("tween_completed", self, '_on_tween_completed')
func play(node, animation_name, duration):
var script = DialogicAnimaResources.get_animation_script(animation_name.strip_edges())
if not script:
printerr('animation not found: %s' % animation_name)
return duration
var real_duration = script.generate_animation(self, {'node':node, 'duration':duration, 'wait_time':0})
if real_duration is float:
duration = real_duration
var index := 0
for animation_data in _animation_data:
var easing_points
if animation_data.has('easing'):
if animation_data.easing is FuncRef:
easing_points = animation_data.easing
else:
easing_points = get_easing_points(animation_data.easing)
if animation_data.has('easing_points'):
easing_points = animation_data.easing_points
animation_data._easing_points = easing_points
animation_data._animation_callback = funcref(self, '_calculate_from_and_to')
if easing_points is Array:
animation_data._use_step_callback = '_on_tween_step_with_easing'
elif easing_points is String:
animation_data._use_step_callback = '_on_tween_step_with_easing_callback'
elif easing_points is FuncRef:
animation_data._use_step_callback = '_on_tween_step_with_easing_funcref'
else:
animation_data._use_step_callback = '_on_tween_step_without_easing'
index += 1
var started := start()
if not started:
printerr('something went wrong while trying to start the tween')
if is_connected("tween_all_completed", self, 'finished_once'): disconnect("tween_all_completed", self, 'finished_once')
connect('tween_all_completed', self, 'finished_once', [node, animation_name, duration])
func finished_once(node, animation, duration):
loop -= 1
if loop > 0:
play(node, animation, duration)
else:
emit_signal('finished_animation')
# Given an array of frames generates the animation data using relative end value
#
# frames = [{
# percentage = the percentage of the animation
# to = the relative end value
# easing_points = the easing points for the bezier curver (optional)
# }]
#
func add_relative_frames(data: Dictionary, property: String, frames: Array) -> float:
return _add_frames(data, property, frames, true)
#
# Given an array of frames generates the animation data using absolute end value
#
# frames = [{
# percentage = the percentage of the animation
# to = the relative end value
# easing_points = the easing points for the bezier curver (optional)
# }]
#
func add_frames(data: Dictionary, property: String, frames: Array) -> float:
return _add_frames(data, property, frames)
func _add_frames(data: Dictionary, property: String, frames: Array, relative: bool = false) -> float:
var duration: float = data.duration if data.has('duration') else 0.0
var _wait_time: float = data._wait_time if data.has('_wait_time') else 0.0
var last_duration := 0.0
var keys_to_ignore = ['duration', '_wait_time']
for frame in frames:
var percentage = frame.percentage if frame.has('percentage') else 100.0
percentage /= 100.0
var frame_duration = max(0.000001, duration * percentage)
var diff = frame_duration - last_duration
var is_first_frame = true
var is_last_frame = percentage == 1
var animation_data = {
property = property,
relative = relative,
duration = diff,
_wait_time = _wait_time
}
# We need to restore the animation just before the node is animated
# but we also need to consider that a node can have multiple
# properties animated, so we need to restore it only before the first
# animation starts
for animation in _animation_data:
if animation.node == data.node:
is_first_frame = false
if animation.has('_is_last_frame'):
is_last_frame = false
if is_first_frame:
animation_data._is_first_frame = true
if is_last_frame:
animation_data._is_last_frame = true
for key in frame:
if key != 'percentage':
animation_data[key] = frame[key]
for key in data:
if key == 'callback' and percentage < 1:
animation_data.erase(key)
elif keys_to_ignore.find(key) < 0:
animation_data[key] = data[key]
add_animation_data(animation_data)
last_duration = frame_duration
_wait_time += diff
return _wait_time
func add_animation_data(animation_data: Dictionary, play_mode: int = PLAY_MODE.NORMAL) -> void:
_animation_data.push_back(animation_data)
var index = str(_animation_data.size())
var duration = animation_data.duration if animation_data.has('duration') else 1
var property_key = 'p' + index
_fake_property[property_key] = 0.0
if animation_data.has('on_completed') and animation_data.has('_is_last_frame'):
_callbacks[property_key] = animation_data.on_completed
var from := 0.0 if play_mode == PLAY_MODE.NORMAL else 1.0
var to := 1.0 - from
interpolate_property(
self,
'_fake_property:' + property_key,
from,
to,
duration,
Tween.TRANS_LINEAR,
Tween.EASE_IN_OUT,
animation_data._wait_time
)
func _on_tween_step_with_easing(object: Object, key: NodePath, _time: float, elapsed: float):
var index := _get_animation_data_index(key)
if _animation_data[index]._use_step_callback != '_on_tween_step_with_easing':
return
var easing_points = _animation_data[index]._easing_points
var p1 = easing_points[0]
var p2 = easing_points[1]
var p3 = easing_points[2]
var p4 = easing_points[3]
var easing_elapsed = _cubic_bezier(Vector2.ZERO, Vector2(p1, p2), Vector2(p3, p4), Vector2(1, 1), elapsed)
_animation_data[index]._animation_callback.call_func(index, easing_elapsed)
func _on_tween_step_with_easing_callback(object: Object, key: NodePath, _time: float, elapsed: float):
var index := _get_animation_data_index(key)
if _animation_data[index]._use_step_callback != '_on_tween_step_with_easing_callback':
return
var easing_points_function = _animation_data[index]._easing_points
var easing_callback = funcref(self, easing_points_function)
var easing_elapsed = easing_callback.call_func(elapsed)
_animation_data[index]._animation_callback.call_func(index, easing_elapsed)
func _on_tween_step_with_easing_funcref(object: Object, key: NodePath, _time: float, elapsed: float):
var index := _get_animation_data_index(key)
if _animation_data[index]._use_step_callback != '_on_tween_step_with_easing_funcref':
return
var easing_callback = _animation_data[index]._easing_points
var easing_elapsed = easing_callback.call_func(elapsed)
_animation_data[index]._animation_callback.call_func(index, easing_elapsed)
func _on_tween_step_without_easing(object: Object, key: NodePath, _time: float, elapsed: float):
var index := _get_animation_data_index(key)
if _animation_data[index]._use_step_callback != '_on_tween_step_without_easing':
return
_animation_data[index]._animation_callback.call_func(index, elapsed)
func _get_animation_data_index(key: NodePath) -> int:
var s = str(key)
return int(s.replace('_fake_property:p', '')) - 1
func _cubic_bezier(p0: Vector2, p1: Vector2, p2: Vector2, p3: Vector2, t: float) -> float:
var q0 = p0.linear_interpolate(p1, t)
var q1 = p1.linear_interpolate(p2, t)
var q2 = p2.linear_interpolate(p3, t)
var r0 = q0.linear_interpolate(q1, t)
var r1 = q1.linear_interpolate(q2, t)
var s = r0.linear_interpolate(r1, t)
return s.y
func _calculate_from_and_to(index: int, value: float) -> void:
var animation_data = _animation_data[index]
var node = animation_data.node
var do_calculate = true
if animation_data.has('_recalculate_from_to') and not animation_data._recalculate_from_to and animation_data.has('_property_data'):
do_calculate = false
if do_calculate:
_do_calculate_from_to(node, animation_data)
if animation_data._property_data.has('subkey'):
animation_data._animation_callback = funcref(self, '_on_animation_with_subkey')
elif animation_data._property_data.has('key'):
animation_data._animation_callback = funcref(self, '_on_animation_with_key')
else:
animation_data._animation_callback = funcref(self, '_on_animation_without_key')
_animation_data[index]._animation_callback.call_func(index, value)
func _do_calculate_from_to(node: Node, animation_data: Dictionary) -> void:
var from
var to
var relative = animation_data.relative if animation_data.has('relative') else false
var node_from = DialogicAnimaPropertiesHelper.get_property_initial_value(node, animation_data.property)
if animation_data.has('from'):
from = _maybe_convert_from_deg_to_rad(node, animation_data, animation_data.from)
from = _maybe_calculate_relative_value(relative, from, node_from)
else:
from = node_from
animation_data.__from = from
if animation_data.has('to'):
to = _maybe_convert_from_deg_to_rad(node, animation_data, animation_data.to)
to = _maybe_calculate_relative_value(relative, to, from)
else:
to = from
animation_data.__to = to
if animation_data.has('pivot'):
if node is Spatial:
printerr('3D Pivot not supported yet')
else:
DialogicAnimaPropertiesHelper.set_2D_pivot(animation_data.node, animation_data.pivot)
animation_data._property_data = DialogicAnimaPropertiesHelper.map_property_to_godot_property(node, animation_data.property)
animation_data._property_data.diff = to - from
animation_data._property_data.from = from
func _maybe_calculate_relative_value(relative, value, current_node_value):
if not relative:
return value
return value + current_node_value
func _maybe_convert_from_deg_to_rad(node: Node, animation_data: Dictionary, value):
if not node is Spatial or animation_data.property.find('rotation') < 0:
return value
if value is Vector3:
return Vector3(deg2rad(value.x), deg2rad(value.y), deg2rad(value.z))
return deg2rad(value)
func _on_animation_with_key(index: int, elapsed: float) -> void:
var animation_data = _animation_data[index]
var property_data = _animation_data[index]._property_data
var node = animation_data.node
var value = property_data.from + (property_data.diff * elapsed)
node[property_data.property_name][property_data.key] = value
func _on_animation_with_subkey(index: int, elapsed: float) -> void:
var animation_data = _animation_data[index]
var property_data = _animation_data[index]._property_data
var node = animation_data.node
var value = property_data.from + (property_data.diff * elapsed)
node[property_data.property_name][property_data.key][property_data.subkey] = value
func _on_animation_without_key(index: int, elapsed: float) -> void:
var animation_data = _animation_data[index]
var property_data = _animation_data[index]._property_data
var node = animation_data.node
var value = property_data.from + (property_data.diff * elapsed)
if property_data.has('callback'):
property_data.callback.call_func(property_data.param, value)
return
node[property_data.property_name] = value
#
# We don't want the user to specify the from/to value as color
# we animate opacity.
# So this function converts the "from = #" -> Color(.., .., .., #)
# same for the to value
#
func _maybe_adjust_modulate_value(animation_data: Dictionary, value):
var property = animation_data.property
var node = animation_data.node
if not property == 'opacity':
return value
if value is int or value is float:
var color = node.modulate
color.a = value
return color
return value
func _on_tween_completed(_ignore, property_name: String) -> void:
var property_key = property_name.replace(':_fake_property:', '')
if _callbacks.has(property_key):
var callback = _callbacks[property_key]
if not callback is Array or callback.size() == 1:
callback[0].call_func()
else:
callback[0].call_funcv(callback[1])
func _on_tween_started(_ignore, key) -> void:
var index := _get_animation_data_index(key)
#var hide_strategy = _visibility_strategy
var animation_data = _animation_data[index]
# if animation_data.has('hide_strategy'):
# hide_strategy = animation_data.hide_strategy
var node = animation_data.node
var should_restore_visibility := false
var should_restore_modulate := false
# if hide_strategy == Anima.VISIBILITY.HIDDEN_ONLY:
# should_restore_visibility = true
# elif hide_strategy == Anima.VISIBILITY.HIDDEN_AND_TRANSPARENT:
# should_restore_modulate = true
# should_restore_visibility = true
# elif hide_strategy == Anima.VISIBILITY.TRANSPARENT_ONLY:
# should_restore_modulate = true
if should_restore_modulate:
var old_modulate = node.get_meta('_old_modulate')
if old_modulate:
node.modulate = old_modulate
if should_restore_visibility:
node.show()
var should_trigger_on_started: bool = animation_data.has('_is_first_frame') and animation_data._is_first_frame and animation_data.has('on_started')
if should_trigger_on_started:
var fn: FuncRef
var args: Array = []
if animation_data.on_started is Array:
fn = animation_data.on_started[0]
args = animation_data.on_started.slice(1, -1)
else:
fn = animation_data.on_started
fn.call_funcv(args)
####################################################################################################
####################################################################################################
## FROM ANIMA EASING
####################################################################################################
####################################################################################################
enum EASING {
LINEAR,
EASE,
EASE_IN_OUT,
EASE_IN,
EASE_OUT,
EASE_IN_SINE,
EASE_OUT_SINE,
EASE_IN_OUT_SINE,
EASE_IN_QUAD,
EASE_OUT_QUAD,
EASE_IN_OUT_QUAD,
EASE_IN_CUBIC,
EASE_OUT_CUBIC,
EASE_IN_OUT_CUBIC,
EASE_IN_QUART,
EASE_OUT_QUART,
EASE_IN_OUT_QUART,
EASE_IN_QUINT,
EASE_OUT_QUINT,
EASE_IN_OUT_QUINT,
EASE_IN_EXPO,
EASE_OUT_EXPO,
EASE_IN_OUT_EXPO,
EASE_IN_CIRC,
EASE_OUT_CIRC,
EASE_IN_OUT_CIRC,
EASE_IN_BACK,
EASE_OUT_BACK,
EASE_IN_OUT_BACK,
EASE_IN_ELASTIC,
EASE_OUT_ELASTIC,
EASE_IN_OUT_ELASTIC,
EASE_IN_BOUNCE,
EASE_OUT_BOUNCE,
EASE_IN_OUT_BOUNCE,
}
const _easing_mapping = {
EASING.LINEAR: null,
EASING.EASE: [0.25, 0.1, 0.25, 1],
EASING.EASE_IN_OUT: [0.42, 0, 0.58, 1],
EASING.EASE_IN: [0.42, 0, 1, 1],
EASING.EASE_OUT: [0, 0, 0.58, 1],
EASING.EASE_IN_SINE: [0, 0, 1, .5],
EASING.EASE_OUT_SINE: [0.61, 1, 0.88, 1],
EASING.EASE_IN_OUT_SINE: [0.37, 0, 0.63, 1],
EASING.EASE_IN_QUAD: [0.11, 0, 0.5, 0],
EASING.EASE_OUT_QUAD: [0.5, 1.0, 0.89, 1],
EASING.EASE_IN_OUT_QUAD: [0.45, 0, 0.55, 1],
EASING.EASE_IN_CUBIC: [0.32, 0, 0.67, 0],
EASING.EASE_OUT_CUBIC: [0.33, 1, 0.68, 1],
EASING.EASE_IN_OUT_CUBIC: [0.65, 0, 0.35, 1],
EASING.EASE_IN_QUART: [0.5, 0, 0.75, 0],
EASING.EASE_OUT_QUART: [0.25, 1, 0.5, 1],
EASING.EASE_IN_OUT_QUART: [0.76, 0, 0.24, 1],
EASING.EASE_IN_QUINT: [0.64, 0, 0.78, 0],
EASING.EASE_OUT_QUINT: [0.22, 1, 0.36, 1],
EASING.EASE_IN_OUT_QUINT: [0.83, 0, 0.17, 1],
EASING.EASE_IN_EXPO: [0.7, 0, 0.84, 0],
EASING.EASE_OUT_EXPO: [0.16, 1, 0.3, 1],
EASING.EASE_IN_OUT_EXPO: [0.87, 0, 0.13, 1],
EASING.EASE_IN_CIRC: [0.55, 0, 0.1, 0.45],
EASING.EASE_OUT_CIRC: [0, 0.55, 0.45, 1],
EASING.EASE_IN_OUT_CIRC: [0.85, 0, 0.15, 1],
EASING.EASE_IN_BACK: [0.36, 0, 0.66, -0.56],
EASING.EASE_OUT_BACK: [0.36, 1.56, 0.64, 1],
EASING.EASE_IN_OUT_BACK: [0.68, -0.6, 0.32, 1.6],
EASING.EASE_IN_ELASTIC: 'ease_in_elastic',
EASING.EASE_OUT_ELASTIC: 'ease_out_elastic',
EASING.EASE_IN_OUT_ELASTIC: 'ease_in_out_elastic',
EASING.EASE_IN_BOUNCE: 'ease_in_bounce',
EASING.EASE_OUT_BOUNCE: 'ease_out_bounce',
EASING.EASE_IN_OUT_BOUNCE: 'ease_in_out_bounce'
}
const _ELASTIC_C4: float = (2.0 * PI) / 3.0
const _ELASTIC_C5: float = (2.0 * PI) / 4.5
static func get_easing_points(easing_name):
if _easing_mapping.has(easing_name):
return _easing_mapping[easing_name]
printerr('Easing not found: ' + str(easing_name))
return _easing_mapping[EASING.LINEAR]
static func ease_in_elastic(elapsed: float) -> float:
if elapsed == 0:
return 0.0
elif elapsed == 1:
return 1.0
return -pow(2, 10 * elapsed - 10) * sin((elapsed * 10 - 10.75) * _ELASTIC_C4)
static func ease_out_elastic(elapsed: float) -> float:
if elapsed == 0:
return 0.0
elif elapsed == 1:
return 1.0
return pow(2, -10 * elapsed) * sin((elapsed * 10 - 0.75) * _ELASTIC_C4) + 1
static func ease_in_out_elastic(elapsed: float) -> float:
if elapsed == 0:
return 0.0
elif elapsed == 1:
return 1.0
elif elapsed < 0.5:
return -(pow(2, 20 * elapsed - 10) * sin((20 * elapsed - 11.125) * _ELASTIC_C5)) / 2
return (pow(2, -20 * elapsed + 10) * sin((20 * elapsed - 11.125) * _ELASTIC_C5)) / 2 + 1
const n1 = 7.5625;
const d1 = 2.75;
static func ease_in_bounce(elapsed: float) -> float:
return 1 - ease_out_bounce(1.0 - elapsed)
static func ease_out_bounce(elapsed: float) -> float:
if elapsed < 1 / d1:
return n1 * elapsed * elapsed;
elif elapsed < 2 / d1:
elapsed -= 1.5 / d1
return n1 * elapsed * elapsed + 0.75;
elif elapsed < 2.5 / d1:
elapsed -= 2.25 / d1
return n1 * elapsed * elapsed + 0.9375;
elapsed -= 2.625 / d1
return n1 * elapsed * elapsed + 0.984375;
static func ease_in_out_bounce(elapsed: float) -> float:
if elapsed < 0.5:
return (1 - ease_out_bounce(1 - 2 * elapsed)) / 2
return (1 + ease_out_bounce(2 * elapsed - 1)) / 2

View File

@ -0,0 +1,29 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
#var delay: float = data._wait_time
var bounce_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 40, to = -30, easing_points = [0.7555, 0.5, 0.8555, 0.06] },
{ percentage = 43, to = 0, easing_points = [0.7555, 0.5, 0.8555, 0.06] },
{ percentage = 53, to = +30 },
{ percentage = 70, to = -15, easing_points = [0.755, 0.05, 0.855, 0.06] },
{ percentage = 80, to = +15 },
{ percentage = 90, to = -4 },
{ percentage = 100, to = +4 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, to = 1 * scale.y },
{ percentage = 20, to = 1 * scale.y },
{ percentage = 40, to = 1.1 * scale.y, easing_points = [0.7555, 0.5, 0.8555, 0.06] },
{ percentage = 43, to = 1.1 * scale.y, easing_points = [0.7555, 0.5, 0.8555, 0.06] },
{ percentage = 53, to = 1 * scale.y },
{ percentage = 70, to = 1.05 * scale.y, easing_points = [0.755, 0.05, 0.855, 0.06] },
{ percentage = 80, to = 0.95 * scale.y },
{ percentage = 90, to = 1.02 * scale.y },
{ percentage = 100, to = 1 * scale.y },
]
anima_tween.add_relative_frames(data, "Y", bounce_frames)
anima_tween.add_frames(data, "scale:y", scale_frames)

View File

@ -0,0 +1,10 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var frames = [
{ percentage = 0, from = 1 },
{ percentage = 25, to = 0 },
{ percentage = 50, to = 1 },
{ percentage = 75, to = 0 },
{ percentage = 100, to = 1 },
]
anima_tween.add_frames(data, "opacity", frames)

View File

@ -0,0 +1,27 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var start = DialogicAnimaPropertiesHelper.get_position(data.node)
var shake_frames = [
{ percentage = 0, from = 0 },
{ percentage = 6.5, to = -6 },
{ percentage = 18.5, to = +5 },
{ percentage = 31.5, to = -3 },
{ percentage = 43.5, to = +2 },
{ percentage = 50, to = 0 },
{ percentage = 100, to = 0 },
]
var rotate_frames = [
{ percentage = 0, to = 0 },
{ percentage = 6.5, to = -9 },
{ percentage = 18.5, to = +7 },
{ percentage = 31.5, to = -5 },
{ percentage = 43.5, to = +3 },
{ percentage = 50, to = 0 },
{ percentage = 100, to = 0 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", shake_frames)
anima_tween.add_frames(data, "rotation", rotate_frames)

View File

@ -0,0 +1,14 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 14, to = scale * Vector2(1.3, 1.3) },
{ percentage = 28, to = scale * Vector2(1, 1) },
{ percentage = 42, to = scale * Vector2(1.3, 1.3) },
{ percentage = 70, to = scale * Vector2(1, 1) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_frames(data, "scale", frames)

View File

@ -0,0 +1,32 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var start_x = data.node.get_global_transform().y.x
var start_y = data.node.get_global_transform().x.y
var skew_x := []
var skew_y := []
var values = [
{ percentage = 0, add = 0 },
{ percentage = 11.1, add = 0 },
{ percentage = 22.2, add = - 0.3 },
{ percentage = 33.3, add = + 0.265 },
{ percentage = 44.4, add = - 0.1325 },
{ percentage = 55.5, add = + 0.06625 },
{ percentage = 66.6, add = - 0.033125 },
{ percentage = 77.7, add = + 0.0165625 },
{ percentage = 88.8, add = - 0.00828125},
{ percentage = 100, add = 0 },
]
for value in values:
skew_x.push_back({ percentage = value.percentage, to = start_x + value.add })
skew_y.push_back({ percentage = value.percentage, to = start_y + value.add })
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
# Skew works only with Node2D
if not data.node is Node2D:
return
anima_tween.add_frames(data, "skew:x", skew_x)
anima_tween.add_frames(data, "skew:y", skew_y)

View File

@ -0,0 +1,12 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 50, to = scale * Vector2(1.05, 1.05), easing = anima_tween.EASING.EASE_IN_OUT_SINE },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_frames(data, "scale", frames)

View File

@ -0,0 +1,15 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 30, to = scale * Vector2(1.25, 0.75) },
{ percentage = 40, to = scale * Vector2(0.75, 1.25) },
{ percentage = 50, to = scale * Vector2(1.15, 0.85) },
{ percentage = 65, to = scale * Vector2(0.95, 1.05) },
{ percentage = 75, to = scale * Vector2(1.05, 0.95) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_frames(data, "scale", frames)

View File

@ -0,0 +1,16 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var frames = [
{ percentage = 0, to = 0 },
{ percentage = 10, to = -10 },
{ percentage = 20, to = +20 },
{ percentage = 30, to = -20 },
{ percentage = 40, to = +20 },
{ percentage = 50, to = -20 },
{ percentage = 60, to = +20 },
{ percentage = 70, to = -20 },
{ percentage = 80, to = +20 },
{ percentage = 90, to = -20 },
{ percentage = 100, to = +10 },
]
anima_tween.add_relative_frames(data, "x", frames)

View File

@ -0,0 +1,16 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var frames = [
{ percentage = 0, to = 0 },
{ percentage = 10, to = -10 },
{ percentage = 20, to = +20 },
{ percentage = 30, to = -20 },
{ percentage = 40, to = +20 },
{ percentage = 50, to = -20 },
{ percentage = 60, to = +20 },
{ percentage = 70, to = -20 },
{ percentage = 80, to = +20 },
{ percentage = 90, to = -20 },
{ percentage = 100, to = +10 },
]
anima_tween.add_relative_frames(data, "y", frames)

View File

@ -0,0 +1,12 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var frames = [
{ percentage = 0, from = 0 },
{ percentage = 20, to = 15 },
{ percentage = 40, to = -10 },
{ percentage = 60, to = 5 },
{ percentage = 80, to = -5 },
{ percentage = 100, to = 0 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.TOP_CENTER)
anima_tween.add_frames(data, "rotation", frames)

View File

@ -0,0 +1,22 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var rotate_frames = [
{ percentage = 0, from = 0 },
]
var scale_frames = [
{ percentage = 0, from = DialogicAnimaPropertiesHelper.get_scale(data.node) * Vector2(1, 1) },
]
for index in range(2, 9):
var s = -1 if index % 2 == 0 else 1
var percent = index * 10.0
rotate_frames.push_back({ percentage = percent, to = 3 * s })
scale_frames.push_back({ percentage = percent, to = Vector2(1.1, 1.1) })
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
rotate_frames.push_back({percentage = 100, to = 0})
scale_frames.push_back({percentage = 100, to = Vector2(1, 1)})
anima_tween.add_frames(data, "rotation", rotate_frames)
anima_tween.add_frames(data, "scale", scale_frames)

View File

@ -0,0 +1,28 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var node = data.node
var start_position = DialogicAnimaPropertiesHelper.get_position(node)
var size = DialogicAnimaPropertiesHelper.get_size(node)
var x_frames = [
{ percentage = 0, from = start_position.x },
{ percentage = 15, to = start_position.x + size.x * -0.25 },
{ percentage = 30, to = start_position.x + size.x * 0.2 },
{ percentage = 45, to = start_position.x + size.x * -0.15 },
{ percentage = 60, to = start_position.x + size.x * 0.1 },
{ percentage = 75, to = start_position.x + size.x * -0.05 },
{ percentage = 100, to = start_position.x },
]
var rotation_frames = [
{ percentage = 0, from = 0 },
{ percentage = 15, to = -5 },
{ percentage = 30, to = 3 },
{ percentage = 45, to = -3 },
{ percentage = 60, to = 2 },
{ percentage = 75, to = -1 },
{ percentage = 100, to = 0 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.TOP_CENTER)
anima_tween.add_frames(data, "x", x_frames)
anima_tween.add_frames(data, "rotation", rotation_frames)

View File

@ -0,0 +1,5 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 0, to = 1, easing_points = [0.42, 0, 0.58, 1]},
]
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,14 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 0, to = 1, easing_points = [0.42, 0, 0.58, 1] },
]
var size = DialogicAnimaPropertiesHelper.get_size(data.node)
var position_frames = [
{ percentage = 0, from = size.y/16, easing_points = [0.42, 0, 0.58, 1] },
{ percentage = 100, to = -size.y/16, easing_points = [0.42, 0, 0.58, 1] },
]
anima_tween.add_relative_frames(data, "y", position_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,14 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 0, to = 1 },
]
var size = DialogicAnimaPropertiesHelper.get_size(data.node)
var position_frames = [
{ percentage = 0, from = 2000 },
{ percentage = 100, to = -2000 },
]
anima_tween.add_relative_frames(data, "y", position_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,6 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 1, to = 0, easing_points = [0.42, 0, 0.58, 1]},
]
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,13 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 1, to = 0, easing_points = [0.42, 0, 0.58, 1] },
]
var size = DialogicAnimaPropertiesHelper.get_size(data.node)
var position_frames = [
{ from = 0, to = size.y/16, easing_points = [0.42, 0, 0.58, 1]},
]
anima_tween.add_relative_frames(data, "y", position_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,12 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 1, to = 0 },
]
var position_frames = [
{ percentage = 0, from = 0},
{ percentage = 100, to = 2000 },
]
anima_tween.add_relative_frames(data, "y", position_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var y_frames = [
{ percentage = 0, to = -1200 },
{ percentage = 80, to = +1200 },
{ percentage = 100, to = 0 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.7, 0.7) },
{ percentage = 80, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "y", y_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = -2000 },
{ percentage = 80, to = +2000 },
{ percentage = 100, to = 0 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.7, 0.7) },
{ percentage = 80, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 2000 },
{ percentage = 80, to = -2000 },
{ percentage = 100, to = 0 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.7, 0.7) },
{ percentage = 80, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var y_frames = [
{ percentage = 0, to = 1200 },
{ percentage = 80, to = -1200 },
{ percentage = 100, to = 0 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.7, 0.7) },
{ percentage = 80, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "y", y_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var y_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = -700 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 20, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(0.7, 0.7) },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "y", y_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = -2000 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 20, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(0.7, 0.7) },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = 2000 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 20, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(0.7, 0.7) },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var y_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = 700 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 20, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(0.7, 0.7) },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "y", y_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,22 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(1, 1) },
{ percentage = 20, to = scale * Vector2(0.9, 0.9) },
{ percentage = 50, to = scale * Vector2(1.1, 1.1) },
{ percentage = 55, to = scale * Vector2(1.1, 1.1) },
{ percentage = 100, to = scale * Vector2(0.3, 0.3) },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 1 },
{ percentage = 50, to = 1 },
{ percentage = 55, to = 1 },
{ percentage = 100, to = 0 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,21 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.3, 0.3), easing_points = [0.215, 0.61, 0.355, 1] },
{ percentage = 20, to = scale * Vector2(1, 1), easing_points = [0.215, 0.61, 0.355, 1] },
{ percentage = 40, to = scale * Vector2(0.9, 0.9), easing_points = [0.215, 0.61, 0.355, 1] },
{ percentage = 60, to = scale * Vector2(1.03, 1.03), easing_points = [0.215, 0.61, 0.355, 1] },
{ percentage = 80, to = scale * Vector2(0.97, 0.97), easing_points = [0.215, 0.61, 0.355, 1] },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0 },
{ percentage = 60, to = 1 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,5 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 1, to = 1 },
]
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,5 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var opacity_frames = [
{ from = 0, to = 0 },
]
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,19 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = -2000 },
{ percentage = 80, to = +2000 },
{ percentage = 100, to = 0 },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
#anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,25 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 2000 },
{ percentage = 80, to = -2000 },
{ percentage = 100, to = 0 },
]
var scale = DialogicAnimaPropertiesHelper.get_scale(data.node)
var scale_frames = [
{ percentage = 0, from = scale * Vector2(0.7, 0.7) },
{ percentage = 80, to = scale * Vector2(0.7, 0.7) },
{ percentage = 100, to = scale * Vector2(1, 1) },
]
var opacity_frames = [
{ percentage = 0, from = 0.7 },
{ percentage = 80, to = 0.7 },
{ percentage = 100, to = 1 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "scale", scale_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,17 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = -2000 },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)

View File

@ -0,0 +1,17 @@
func generate_animation(anima_tween: Tween, data: Dictionary) -> void:
var x_frames = [
{ percentage = 0, to = 0 },
{ percentage = 20, to = 0 },
{ percentage = 100, to = 2000 },
]
var opacity_frames = [
{ percentage = 0, from = 1 },
{ percentage = 20, to = 0.7 },
{ percentage = 100, to = 0.7 },
]
DialogicAnimaPropertiesHelper.set_2D_pivot(data.node, DialogicAnimaPropertiesHelper.PIVOT.CENTER)
anima_tween.add_relative_frames(data, "x", x_frames)
anima_tween.add_frames(data, "opacity", opacity_frames)