Skip to content

Commit 4aa8e43

Browse files
committed
Fixes for when style is changed while still tweening
1 parent 9eba42f commit 4aa8e43

File tree

1 file changed

+47
-24
lines changed

1 file changed

+47
-24
lines changed

addons/dialogic/Modules/ScreenShake/subsystem_screen_shake.gd

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ func update_shake_x(amplitude: float = 0.0, frequency: float = 0.0, fade: float
7272

7373
shake_horizontal_started.emit(dialogic.current_state_info['screen_shake']['x'])
7474

75-
var screen_shaker: DialogicNode_ScreenShaker
76-
if dialogic.has_subsystem('Styles'):
77-
screen_shaker = dialogic.Styles.get_first_node_in_layout('dialogic_screen_shaker')
78-
else:
79-
screen_shaker = get_tree().get_first_node_in_group('dialogic_screen_shaker')
75+
var screen_shaker := get_screen_shaker()
8076

8177
if not screen_shaker:
8278
return
@@ -88,9 +84,9 @@ func update_shake_x(amplitude: float = 0.0, frequency: float = 0.0, fade: float
8884
var current_amplitude := screen_shaker.material.get_shader_parameter('amplitude_x') as float
8985
var current_frequency := screen_shaker.material.get_shader_parameter('frequency_x') as float
9086
var tween := get_tree().create_tween()
91-
tween.tween_method(_tween_amplitude_x.bind(screen_shaker.material), current_amplitude, amplitude, fade)
87+
tween.tween_method(_tween_amplitude_x, current_amplitude, amplitude, fade)
9288
tween.set_parallel()
93-
tween.tween_method(_tween_frequency_x.bind(screen_shaker), current_frequency, frequency, fade)
89+
tween.tween_method(_tween_frequency_x, current_frequency, frequency, fade)
9490
await tween.finished
9591
else:
9692
screen_shaker.material.set_shader_parameter('amplitude_x', amplitude)
@@ -109,9 +105,9 @@ func update_shake_x(amplitude: float = 0.0, frequency: float = 0.0, fade: float
109105
var current_amplitude := screen_shaker.material.get_shader_parameter('amplitude_x') as float
110106
var current_frequency := screen_shaker.material.get_shader_parameter('frequency_x') as float
111107
var tween := get_tree().create_tween()
112-
tween.tween_method(_tween_amplitude_x.bind(screen_shaker.material), current_amplitude, 0.0, fade)
108+
tween.tween_method(_tween_amplitude_x, current_amplitude, 0.0, fade)
113109
tween.set_parallel()
114-
tween.tween_method(_tween_frequency_x.bind(screen_shaker), current_frequency, 0.0, fade)
110+
tween.tween_method(_tween_frequency_x, current_frequency, 0.0, fade)
115111
await tween.finished
116112
else:
117113
screen_shaker.material.set_shader_parameter('amplitude_x', 0.0)
@@ -132,11 +128,7 @@ func update_shake_y(amplitude: float = 0.0, frequency: float = 0.0, fade: float
132128

133129
shake_vertical_started.emit(dialogic.current_state_info['screen_shake']['y'])
134130

135-
var screen_shaker: DialogicNode_ScreenShaker
136-
if dialogic.has_subsystem('Styles'):
137-
screen_shaker = dialogic.Styles.get_first_node_in_layout('dialogic_screen_shaker')
138-
else:
139-
screen_shaker = get_tree().get_first_node_in_group('dialogic_screen_shaker')
131+
var screen_shaker := get_screen_shaker()
140132

141133
if not screen_shaker:
142134
return
@@ -148,9 +140,9 @@ func update_shake_y(amplitude: float = 0.0, frequency: float = 0.0, fade: float
148140
var current_amplitude := screen_shaker.material.get_shader_parameter('amplitude_y') as float
149141
var current_frequency := screen_shaker.material.get_shader_parameter('frequency_y') as float
150142
var tween := get_tree().create_tween()
151-
tween.tween_method(_tween_amplitude_y.bind(screen_shaker.material), current_amplitude, amplitude, fade)
143+
tween.tween_method(_tween_amplitude_y, current_amplitude, amplitude, fade)
152144
tween.set_parallel()
153-
tween.tween_method(_tween_frequency_y.bind(screen_shaker), current_frequency, frequency, fade)
145+
tween.tween_method(_tween_frequency_y, current_frequency, frequency, fade)
154146
await tween.finished
155147
else:
156148
screen_shaker.material.set_shader_parameter('amplitude_y', amplitude)
@@ -169,9 +161,9 @@ func update_shake_y(amplitude: float = 0.0, frequency: float = 0.0, fade: float
169161
var current_amplitude := screen_shaker.material.get_shader_parameter('amplitude_y') as float
170162
var current_frequency := screen_shaker.material.get_shader_parameter('frequency_y') as float
171163
var tween := get_tree().create_tween()
172-
tween.tween_method(_tween_amplitude_y.bind(screen_shaker.material), current_amplitude, 0.0, fade)
164+
tween.tween_method(_tween_amplitude_y, current_amplitude, 0.0, fade)
173165
tween.set_parallel()
174-
tween.tween_method(_tween_frequency_y.bind(screen_shaker), current_frequency, 0.0, fade)
166+
tween.tween_method(_tween_frequency_y, current_frequency, 0.0, fade)
175167
await tween.finished
176168
else:
177169
screen_shaker.material.set_shader_parameter('amplitude_y', 0.0)
@@ -182,17 +174,48 @@ func update_shake_y(amplitude: float = 0.0, frequency: float = 0.0, fade: float
182174

183175
#endregion
184176

185-
func _tween_amplitude_x(value: float, material: ShaderMaterial) -> void:
186-
material.set_shader_parameter('amplitude_x', value)
177+
func _tween_amplitude_x(value: float) -> void:
178+
var screen_shaker := get_screen_shaker()
179+
180+
if not screen_shaker:
181+
return
182+
183+
screen_shaker.material.set_shader_parameter('amplitude_x', value)
184+
185+
186+
func _tween_amplitude_y(value: float) -> void:
187+
var screen_shaker := get_screen_shaker()
188+
189+
if not screen_shaker:
190+
return
191+
192+
screen_shaker.material.set_shader_parameter('amplitude_y', value)
187193

188194

189-
func _tween_amplitude_y(value: float, material: ShaderMaterial) -> void:
190-
material.set_shader_parameter('amplitude_y', value)
195+
func _tween_frequency_x(value: float) -> void:
196+
var screen_shaker := get_screen_shaker()
191197

198+
if not screen_shaker:
199+
return
192200

193-
func _tween_frequency_x(value: float, screen_shaker: DialogicNode_ScreenShaker) -> void:
194201
screen_shaker.update_frequency_x(value)
195202

196203

197-
func _tween_frequency_y(value: float, screen_shaker: DialogicNode_ScreenShaker) -> void:
204+
func _tween_frequency_y(value: float) -> void:
205+
var screen_shaker := get_screen_shaker()
206+
207+
if not screen_shaker:
208+
return
209+
198210
screen_shaker.update_frequency_y(value)
211+
212+
213+
func get_screen_shaker() -> DialogicNode_ScreenShaker:
214+
var screen_shaker: DialogicNode_ScreenShaker = null
215+
216+
if dialogic.has_subsystem('Styles'):
217+
screen_shaker = dialogic.Styles.get_first_node_in_layout('dialogic_screen_shaker')
218+
else:
219+
screen_shaker = get_tree().get_first_node_in_group('dialogic_screen_shaker')
220+
221+
return screen_shaker

0 commit comments

Comments
 (0)