From 408e127da2edd18b25497e060c3f25d2b8b0cd06 Mon Sep 17 00:00:00 2001 From: Torsten Date: Wed, 26 Jun 2024 09:12:43 +0200 Subject: [PATCH] M7.L6 --- .../1.) using tweens for animation.md | 19 +++++++ .../2.) AudioStream.md | 16 ++++++ .../3.) Full code.md | 50 ++++++++++++++++++ .../Pasted image 20240626083938.png | Bin 0 -> 22862 bytes 4 files changed, 85 insertions(+) create mode 100644 MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/1.) using tweens for animation.md create mode 100644 MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/2.) AudioStream.md create mode 100644 MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/3.) Full code.md create mode 100644 MyObsidianVault/Pasted image 20240626083938.png diff --git a/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/1.) using tweens for animation.md b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/1.) using tweens for animation.md new file mode 100644 index 0000000..e85372a --- /dev/null +++ b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/1.) using tweens for animation.md @@ -0,0 +1,19 @@ +![[Pasted image 20240626083938.png]] + +`Do you remember how to find the name of the property in code? You can hover over the property in the editor, and a tooltip will show you the code name.` + +```` +## Draws the current text to the rich text element +func show_text() -> void: + var current_item := dialogue_items[current_item_index] + rich_text_label.text = current_item + rich_text_label.visible_ratio = 0.0 # <--rich +```` + +```` +func show_text() -> void: + # ... + var tween := create_tween() + var text_appearing_duration := 1.2 + tween.tween_property(rich_text_label, "visible_ratio", 1.0, text_appearing_duration) +```` \ No newline at end of file diff --git a/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/2.) AudioStream.md b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/2.) AudioStream.md new file mode 100644 index 0000000..b180da9 --- /dev/null +++ b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/2.) AudioStream.md @@ -0,0 +1,16 @@ +Generic: + AudioStream +Positional: + AudioStream2D + AudioStream3D + +` +``` + var text_appearing_duration = 1.2 # value is in seconds + var sound_max_length := audio_stream_player.stream.get_length() - text_appearing_duration + var sound_start_position := randf() * sound_max_length + audio_stream_player.play(sound_start_position) + tween.finished.connect(audio_stream_player.stop) + + +``` \ No newline at end of file diff --git a/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/3.) Full code.md b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/3.) Full code.md new file mode 100644 index 0000000..70f5d4b --- /dev/null +++ b/MyObsidianVault/Godot_Training/2D/Tutorial Game 4 - Telling a story/M7.L6 - Animating the text and playing sounds/3.) Full code.md @@ -0,0 +1,50 @@ +``` +extends Control + +## An array of strings. Each string contains the text we want the character to +## say. +var dialogue_items: Array[String] = [ + "I'm learning about Arrays...", + "...and it is a little bit complicated.", + "Let's see if I got it right: an array is a list of values!", + "Did I get it right? Did I?", + "Hehe! Bye bye~!", +] +## Holds the index of the currently displayed text +var current_item_index := 0 + +@onready var rich_text_label: RichTextLabel = %RichTextLabel +@onready var next_button: Button = %NextButton +@onready var audio_stream_player: AudioStreamPlayer = %AudioStreamPlayer + + +func _ready() -> void: + show_text() + next_button.pressed.connect(advance) + +## Draws the current text to the rich text element +func show_text() -> void: + var current_item := dialogue_items[current_item_index] + rich_text_label.text = current_item + # We animate the text appearing letter by letter. + rich_text_label.visible_ratio = 0.0 + var tween := create_tween() + var text_appearing_duration := 1.2 + tween.tween_property(rich_text_label, "visible_ratio", 1.0, text_appearing_duration) + # This is where we play the audio. We randomize the audio playback's start + # time to make it sound different every time. + var sound_max_length := audio_stream_player.stream.get_length() - text_appearing_duration + var sound_start_position := randf() * sound_max_length + audio_stream_player.play(sound_start_position) + # We stop the audio when the text finishes appearing. + tween.finished.connect(audio_stream_player.stop) + +func advance() -> void: + current_item_index += 1 + # If we reached the end of the dialogue, we quit the game. Otherwise, we + # show the next dialogue line. + if current_item_index == dialogue_items.size(): + get_tree().quit() + else: + show_text() +``` \ No newline at end of file diff --git a/MyObsidianVault/Pasted image 20240626083938.png b/MyObsidianVault/Pasted image 20240626083938.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9b498df11fa104b0311577889bcd237b331518 GIT binary patch literal 22862 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 Po|?3Tf_S;8QNVuy=QWOF literal 0 HcmV?d00001