Skip to content

Commit 0edd934

Browse files
Improve slide animations
This changes the slide animations. Slide In/Out Left and Slide In/Out Right are now renamed to Slide From Left, Slide To Left, Slide From Right and Slide To Right. All the slide animations have been adjusted to slide exactly the needed amount so that the portrait fully leaves the screen, not just sliding a fixed amount. To do this, the animation class has gotten two new methods that help determening the animated nodes (e.g. Portraits) size and position. This breaks compatibility because those animation names have changed.
1 parent 56d2dc0 commit 0edd934

File tree

5 files changed

+53
-28
lines changed

5 files changed

+53
-28
lines changed

addons/dialogic/Modules/Character/DefaultAnimations/slide_down_in_out.gd

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@ func animate() -> void:
44
var tween := (node.create_tween() as Tween)
55
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
66

7-
var target_position := base_position.y
8-
var start_position: float = -node.get_viewport().size.y
7+
var end_position_y: float = base_position.y + node.get_parent().global_position.y
8+
var start_position: float = -get_node_size().y + get_node_origin().y
99

1010
if is_reversed:
11-
target_position = -node.get_viewport().size.y
11+
tween.set_ease(Tween.EASE_IN)
12+
end_position_y = -get_node_size().y + get_node_origin().y
1213
start_position = base_position.y
1314

1415
node.position.y = start_position
1516

16-
tween.tween_property(node, 'position:y', target_position, time)
17+
tween.tween_property(node, 'global_position:y', end_position_y, time)
1718

1819
await tween.finished
1920
finished_once.emit()

addons/dialogic/Modules/Character/DefaultAnimations/slide_left_in_out.gd

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@ func animate() -> void:
55
var tween := (node.create_tween() as Tween)
66
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
77

8-
var end_position_x: float = base_position.x
8+
var end_position_x: float = base_position.x + node.get_parent().global_position.x
99

1010
if is_reversed:
11-
end_position_x = -node.get_viewport().size.x / 2
11+
end_position_x = - get_node_size().x + get_node_origin().x
12+
tween.set_ease(Tween.EASE_IN)
1213

1314
else:
14-
node.position.x = -node.get_viewport().size.x / 5
15+
node.global_position.x = -get_node_size().x + get_node_origin().x
1516

16-
tween.tween_property(node, 'position:x', end_position_x, time)
17+
tween.tween_property(node, 'global_position:x', end_position_x, time)
1718

1819
await tween.finished
1920
finished_once.emit()
2021

2122

2223
func _get_named_variations() -> Dictionary:
2324
return {
24-
"slide in left": {"reversed": false, "type": AnimationType.IN},
25-
"slide out right": {"reversed": true, "type": AnimationType.OUT},
25+
"slide from left": {"reversed": false, "type": AnimationType.IN},
26+
"slide to left": {"reversed": true, "type": AnimationType.OUT},
2627
}

addons/dialogic/Modules/Character/DefaultAnimations/slide_right_in_out.gd

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,21 @@ func animate() -> void:
44
var tween := (node.create_tween() as Tween)
55
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
66

7-
var viewport_x: float = node.get_viewport().size.x
8-
9-
var start_position_x: float = viewport_x + viewport_x / 5
10-
var end_position_x := base_position.x
7+
var viewport_x: float = get_viewport_size().x
8+
var end_position_x : float = base_position.x + node.get_parent().global_position.x
119

1210
if is_reversed:
13-
start_position_x = base_position.x
14-
end_position_x = viewport_x + node.get_viewport().size.x / 5
15-
16-
17-
node.position.x = start_position_x
18-
tween.tween_property(node, 'position:x', end_position_x, time)
11+
end_position_x = viewport_x + get_node_origin().x
12+
tween.set_ease(Tween.EASE_IN)
13+
else:
14+
node.global_position.x = viewport_x + get_node_origin().x
1915

16+
tween.tween_property(node, 'global_position:x', end_position_x, time)
2017
tween.finished.connect(emit_signal.bind('finished_once'))
2118

2219

2320
func _get_named_variations() -> Dictionary:
2421
return {
25-
"slide in right": {"reversed": false, "type": AnimationType.IN},
26-
"slide out left": {"reversed": true, "type": AnimationType.OUT},
22+
"slide from right": {"reversed": false, "type": AnimationType.IN},
23+
"slide to right": {"reversed": true, "type": AnimationType.OUT},
2724
}

addons/dialogic/Modules/Character/DefaultAnimations/slide_up_in.gd

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ func animate() -> void:
44
var tween := (node.create_tween() as Tween)
55
tween.set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
66

7-
var start_position_y: float = node.get_viewport().size.y * 2
8-
var end_position_y := base_position.y
7+
var start_position_y: float = get_viewport_size().y + get_node_origin().y
8+
var end_position_y: float = base_position.y + node.get_parent().global_position.y
99

1010
if is_reversed:
11-
start_position_y = base_position.y
12-
end_position_y = node.get_viewport().size.y * 2
11+
tween.set_ease(Tween.EASE_IN)
12+
start_position_y = end_position_y
13+
end_position_y = get_viewport_size().y + get_node_origin().y
1314

14-
node.position.y = start_position_y
15-
tween.tween_property(node, 'position:y', end_position_y, time)
15+
node.global_position.y = start_position_y
16+
tween.tween_property(node, 'global_position:y', end_position_y, time)
1617

1718
await tween.finished
1819
finished_once.emit()

addons/dialogic/Modules/Character/class_dialogic_animation.gd

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,28 @@ func get_modulation_property() -> String:
7575
return "self_modulate"
7676
else:
7777
return "modulate"
78+
79+
80+
## Tries to return the size of the node to be animated.
81+
## For portraits this uses the portrait containers size.
82+
## This is useful if your animation depends on the size of the node.
83+
func get_node_size() -> Vector2:
84+
if not node:
85+
return Vector2()
86+
if node.get_parent() is DialogicNode_PortraitContainer:
87+
return node.get_parent().size
88+
if "size" in node:
89+
return node.size * node.scale
90+
return node.get_viewport().size
91+
92+
93+
func get_node_origin() -> Vector2:
94+
if not node:
95+
return Vector2()
96+
if node.get_parent() is DialogicNode_PortraitContainer:
97+
return node.get_parent()._get_origin_position()
98+
return Vector2()
99+
100+
101+
func get_viewport_size() -> Vector2:
102+
return node.get_viewport().get_visible_rect().size

0 commit comments

Comments
 (0)