I’m trying to create a “text jitter” effect. Each character in a text should have a small random offset that changes every second, but I can’t get each character to have a unique random offset. All characters share the same offset.
Here is the code I’m using:
@tool
extends RichTextEffect
class_name JitterEffect
var bbcode = "jitter_effect"
var last_time = -1
var current_offset_x = 0.0
var current_offset_y = 0.0
func _process_custom_fx(char_fx: CharFXTransform) -> bool:
var elapsed_seconds = int(char_fx.elapsed_time * 3) % 2
if elapsed_seconds != last_time:
randomize()
current_offset_x = randf_range(-3, 3)
current_offset_y = randf_range(-3, 3)
last_time = elapsed_seconds
char_fx.offset = Vector2(current_offset_x, current_offset_y)
return true
How can I make the offset of each character in the text unique?
@tool
extends RichTextEffect
class_name JitterEffect
var bbcode = "jitter_effect"
var last_time = -1
# Store em here
var char_offsets = {}
func _process_custom_fx(char_fx: CharFXTransform) -> bool:
var elapsed_seconds = int(char_fx.elapsed_time * 3) % 2
# create a key for each character depending on pos
var char_key = char_fx.relative_index
if elapsed_seconds != last_time:
randomize()
# initialize/update
if not char_offsets.has(char_key):
char_offsets[char_key] = {}
char_offsets[char_key] = {
"x": randf_range(-3, 3),
"y": randf_range(-3, 3)
}
last_time = elapsed_seconds
# apply it
if char_offsets.has(char_key):
char_fx.offset = Vector2(
char_offsets[char_key]["x"],
char_offsets[char_key]["y"]
)
return true