Initial commit
This commit is contained in:
commit
7becdd23b6
989 changed files with 28526 additions and 0 deletions
120
scenes/ui_elements/chat_log.gd
Normal file
120
scenes/ui_elements/chat_log.gd
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
extends CanvasLayer
|
||||
|
||||
const MAX_LOG_SIZE = 100
|
||||
const CLEAN_BUCKET = 10
|
||||
var message_count = 0
|
||||
|
||||
@onready var scroll_container: ScrollContainer = $ScrollContainer
|
||||
@onready var chat_log_lines_container: VBoxContainer = $ScrollContainer/ChatLogLinesContainer
|
||||
@onready var chat_log_line = preload("res://scenes/ui_elements/chat_log_line.tscn")
|
||||
|
||||
var scroll_bar = null
|
||||
var scroll_value = 0
|
||||
var current_max_scroll = 0
|
||||
|
||||
var mouse_dragging = false
|
||||
var mouse_scrolling = false
|
||||
var mouse_dragging_initial_scroll_value = 0
|
||||
var mouse_dragging_initial_pos = 0
|
||||
var mouse_dragging_last_pos = Vector2.ZERO
|
||||
|
||||
func _ready():
|
||||
scroll_bar = scroll_container.get_v_scroll_bar()
|
||||
scroll_bar.changed.connect(_on_scroll_bar_changed)
|
||||
scroll_bar.gui_input.connect(_on_scroll_bar_gui_input)
|
||||
scroll_bar.set_deferred("custom_minimum_size", Vector2(20, scroll_bar.custom_minimum_size.y))
|
||||
scroll_bar.set_deferred("position", Vector2(scroll_container.size.x - 20, 0))
|
||||
#scroll_value = scroll_bar.max_value
|
||||
#scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _process(delta):
|
||||
if visible:
|
||||
set_scroll_vertical(scroll_value + Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down").y * delta * 1000)
|
||||
|
||||
func add_line(speaker_text: String, speaker_name: String = ""):
|
||||
clean_log()
|
||||
var line = chat_log_line.instantiate()
|
||||
if speaker_name:
|
||||
line.get_node("NameLabel").text = speaker_name
|
||||
else:
|
||||
line.get_node("NameLabel").visible = false
|
||||
line.get_node("TextLabel").text = " %s" % speaker_text
|
||||
chat_log_lines_container.add_child(line)
|
||||
message_count += 1
|
||||
|
||||
func add_selected_option_text(selected_option_text: String):
|
||||
clean_log()
|
||||
var line = chat_log_line.instantiate()
|
||||
line.get_node("NameLabel").text = "◆ Option ◆"
|
||||
line.get_node("TextLabel").text = " %s" % selected_option_text
|
||||
chat_log_lines_container.add_child(line)
|
||||
message_count += 1
|
||||
|
||||
func clean_log():
|
||||
if message_count >= MAX_LOG_SIZE:
|
||||
var children = chat_log_lines_container.get_children()
|
||||
for i in CLEAN_BUCKET:
|
||||
var child = children[i]
|
||||
chat_log_lines_container.remove_child(child)
|
||||
child.visible = false
|
||||
child.queue_free()
|
||||
message_count -= CLEAN_BUCKET
|
||||
|
||||
func set_scroll_vertical(value):
|
||||
scroll_value = clamp(value, 0, current_max_scroll - scroll_container.size.y)
|
||||
scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _on_scroll_bar_changed():
|
||||
if scroll_bar.max_value != current_max_scroll:
|
||||
current_max_scroll = scroll_bar.max_value
|
||||
scroll_value = max(0, current_max_scroll - scroll_container.size.y)
|
||||
scroll_container.scroll_vertical = scroll_value
|
||||
|
||||
func _on_scroll_container_gui_input(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
match event.button_index:
|
||||
MOUSE_BUTTON_LEFT:
|
||||
if event.pressed and not mouse_dragging:
|
||||
mouse_dragging = true
|
||||
mouse_scrolling = false
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
#scroll_value = mouse_dragging_initial_scroll_value
|
||||
elif not event.pressed and mouse_dragging:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = false
|
||||
MOUSE_BUTTON_WHEEL_UP:
|
||||
set_scroll_vertical(scroll_value - 40)
|
||||
MOUSE_BUTTON_WHEEL_DOWN:
|
||||
set_scroll_vertical(scroll_value + 40)
|
||||
elif event is InputEventMouseMotion and mouse_dragging:
|
||||
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
|
||||
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
else:
|
||||
set_scroll_vertical(mouse_dragging_initial_scroll_value - (event.global_position.y - mouse_dragging_initial_pos))
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
|
||||
func _on_scroll_bar_gui_input(event: InputEvent):
|
||||
if event is InputEventMouseButton:
|
||||
if event.button_index == MOUSE_BUTTON_LEFT:
|
||||
if event.pressed and not mouse_scrolling:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = true
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
#scroll_value = mouse_dragging_initial_scroll_value
|
||||
elif not event.pressed and mouse_scrolling:
|
||||
mouse_dragging = false
|
||||
mouse_scrolling = false
|
||||
elif event is InputEventMouseMotion and mouse_scrolling:
|
||||
# Fix for mobile touch and release not being detected; assume any instant jump in cursor distance of ~350px or more is a reset
|
||||
if event.global_position.distance_squared_to(mouse_dragging_last_pos) >= 120_000:
|
||||
mouse_dragging_initial_pos = event.global_position.y
|
||||
mouse_dragging_initial_scroll_value = scroll_value
|
||||
else:
|
||||
set_scroll_vertical(mouse_dragging_initial_scroll_value + (current_max_scroll / scroll_bar.page) * (event.global_position.y - mouse_dragging_initial_pos))
|
||||
mouse_dragging_last_pos = event.global_position
|
||||
6
scenes/ui_elements/chat_log.tscn
Normal file
6
scenes/ui_elements/chat_log.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://x4yl51efxs5s"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/chat_log.gd" id="1_gtkh7"]
|
||||
|
||||
[node name="ChatLog" type="CanvasLayer"]
|
||||
script = ExtResource("1_gtkh7")
|
||||
41
scenes/ui_elements/chat_log_line.tscn
Normal file
41
scenes/ui_elements/chat_log_line.tscn
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://b7un1h6gdp8bq"]
|
||||
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="1_erynh"]
|
||||
|
||||
[node name="ChatLogLine" type="HBoxContainer"]
|
||||
anchors_preset = 14
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -13.0
|
||||
offset_bottom = 13.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="NameLabel" type="Label" parent="."]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
theme = ExtResource("1_erynh")
|
||||
theme_override_colors/font_color = Color(0.698039, 0.717647, 0.823529, 1)
|
||||
text = "Name "
|
||||
horizontal_alignment = 1
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="TextLabel" type="RichTextLabel" parent="."]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("1_erynh")
|
||||
bbcode_enabled = true
|
||||
text = "What the [color=#f00]fuck[/color]?!"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
shortcut_keys_enabled = false
|
||||
meta_underlined = false
|
||||
hint_underlined = false
|
||||
drag_and_drop_selection_enabled = false
|
||||
visible_characters_behavior = 1
|
||||
29
scenes/ui_elements/prompt.gd
Normal file
29
scenes/ui_elements/prompt.gd
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
extends CanvasLayer
|
||||
|
||||
signal prompt_option_selected(option_label, option_text)
|
||||
|
||||
var prompt_option_scene: PackedScene = preload("res://scenes/ui_elements/prompt_option.tscn")
|
||||
|
||||
func clear_options():
|
||||
for child in $VBoxContainer.get_children():
|
||||
child.queue_free()
|
||||
|
||||
func show_prompt():
|
||||
visible = true
|
||||
$AnimationPlayer.play("show_prompt")
|
||||
await $AnimationPlayer.animation_finished
|
||||
var first_option = $VBoxContainer.get_child(0)
|
||||
if first_option:
|
||||
first_option.get_child(0).grab_focus()
|
||||
|
||||
func hide_prompt():
|
||||
visible = false
|
||||
$AnimationPlayer.play_backwards("show_prompt")
|
||||
|
||||
func create_option(option_label: String, option_text: String):
|
||||
var option = prompt_option_scene.instantiate()
|
||||
option.init_option(self, option_label, option_text)
|
||||
$VBoxContainer.add_child(option)
|
||||
|
||||
func on_option_selected(label: String, text: String):
|
||||
prompt_option_selected.emit(label, text)
|
||||
102
scenes/ui_elements/prompt.tscn
Normal file
102
scenes/ui_elements/prompt.tscn
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://db604d7kgvdrt"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/prompt.gd" id="1_hyk7g"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rdapi"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("PanelContainer:modulate")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("VBoxContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_tuv2n"]
|
||||
resource_name = "show_prompt"
|
||||
length = 0.5
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("PanelContainer:modulate")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("VBoxContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ek38c"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_rdapi"),
|
||||
"show_prompt": SubResource("Animation_tuv2n")
|
||||
}
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_w4jq4"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.501961)
|
||||
|
||||
[node name="Prompt" type="CanvasLayer"]
|
||||
script = ExtResource("1_hyk7g")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_ek38c")
|
||||
}
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_w4jq4")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(532, 0)
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -266.0
|
||||
offset_right = 266.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/separation = 52
|
||||
alignment = 1
|
||||
12
scenes/ui_elements/prompt_option.gd
Normal file
12
scenes/ui_elements/prompt_option.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
extends Control
|
||||
|
||||
var prompt = null
|
||||
|
||||
func _on_option_button_pressed():
|
||||
prompt.prompt_option_selected.emit(get_meta("option_label"), get_meta("option_text"))
|
||||
|
||||
func init_option(parent_prompt: Node, new_label: String, new_text: String):
|
||||
prompt = parent_prompt
|
||||
set_meta("option_label", new_label)
|
||||
set_meta("option_text", new_text)
|
||||
$OptionButton/NameFrame/Option/OptionLabel.text = new_text
|
||||
113
scenes/ui_elements/prompt_option.tscn
Normal file
113
scenes/ui_elements/prompt_option.tscn
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://ce1bk8d2kdx2d"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ykb3qmxlb1ph" path="res://images/ui/panel-border-014.png" id="1_j6xkn"]
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/prompt_option.gd" id="1_ybyts"]
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_xbmem"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_440le"]
|
||||
bg_color = Color(0.74902, 0.74902, 0.74902, 1)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_05h6u"]
|
||||
bg_color = Color(0.517647, 0.517647, 0.517647, 1)
|
||||
border_width_left = 3
|
||||
border_width_top = 3
|
||||
border_width_right = 3
|
||||
border_width_bottom = 3
|
||||
border_color = Color(0.203922, 0.482353, 0.85098, 1)
|
||||
corner_radius_top_left = 6
|
||||
corner_radius_top_right = 2
|
||||
corner_radius_bottom_right = 2
|
||||
corner_radius_bottom_left = 2
|
||||
expand_margin_left = 3.0
|
||||
expand_margin_top = 3.0
|
||||
expand_margin_right = 3.0
|
||||
expand_margin_bottom = 3.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ujclv"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.752941)
|
||||
corner_radius_top_left = 14
|
||||
corner_radius_top_right = 14
|
||||
corner_radius_bottom_right = 14
|
||||
corner_radius_bottom_left = 14
|
||||
|
||||
[node name="PromptOption" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
grow_horizontal = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 8
|
||||
script = ExtResource("1_ybyts")
|
||||
metadata/option_label = ""
|
||||
metadata/option_text = ""
|
||||
|
||||
[node name="OptionButton" type="Button" parent="."]
|
||||
custom_minimum_size = Vector2(0, 26)
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 512.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_styles/hover = SubResource("StyleBoxFlat_440le")
|
||||
theme_override_styles/focus = SubResource("StyleBoxFlat_05h6u")
|
||||
keep_pressed_outside = true
|
||||
|
||||
[node name="Panel" type="Panel" parent="OptionButton"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_ujclv")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="OptionButton"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_j6xkn")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Option" type="MarginContainer" parent="OptionButton/NameFrame"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -21.0
|
||||
offset_right = 532.0
|
||||
offset_bottom = 21.0
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="OptionLabel" type="RichTextLabel" parent="OptionButton/NameFrame/Option"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("2_xbmem")
|
||||
bbcode_enabled = true
|
||||
text = "Button text"
|
||||
fit_content = true
|
||||
scroll_active = false
|
||||
autowrap_mode = 0
|
||||
shortcut_keys_enabled = false
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[connection signal="pressed" from="OptionButton" to="." method="_on_option_button_pressed"]
|
||||
11
scenes/ui_elements/sprites.gd
Normal file
11
scenes/ui_elements/sprites.gd
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
extends CanvasLayer
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
64
scenes/ui_elements/textbox.gd
Normal file
64
scenes/ui_elements/textbox.gd
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
extends CanvasLayer
|
||||
|
||||
|
||||
var is_textbox_visible: bool = false
|
||||
var is_textbox_expanded: bool = false
|
||||
|
||||
func is_ready() -> bool:
|
||||
return $AnimationPlayer.current_animation == "" or $AnimationPlayer.current_animation == "textbox_idle"
|
||||
|
||||
func is_idle() -> bool:
|
||||
return $AnimationPlayer.current_animation == "textbox_idle"
|
||||
|
||||
func skip():
|
||||
if $AnimationPlayer.current_animation == "write_text" or $AnimationPlayer.current_animation == "collapse_textbox" or $AnimationPlayer.current_animation == "expand_textbox":
|
||||
$AnimationPlayer.seek(0.9999, true)
|
||||
|
||||
func await_pending_animations():
|
||||
if not is_ready():
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func show_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("show_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func hide_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play_backwards("show_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func expand_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("expand_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func collapse_textbox():
|
||||
# await await_pending_animations()
|
||||
$AnimationPlayer.play("collapse_textbox")
|
||||
await $AnimationPlayer.animation_finished
|
||||
|
||||
func ready_textbox():
|
||||
$AnimationPlayer.play("textbox_idle")
|
||||
|
||||
func disable_textbox():
|
||||
$AnimationPlayer.play("disable_textbox")
|
||||
|
||||
func enable_textbox():
|
||||
if $AnimationPlayer.current_animation == "disable_textbox":
|
||||
$AnimationPlayer.stop()
|
||||
|
||||
func write_text(speaker_text: String, speaker_name: String = ""):
|
||||
var text_label: RichTextLabel = $MarginContainer/VBoxContainer/TextContainer/Text/TextLabel
|
||||
text_label.visible_characters = 0
|
||||
text_label.text = speaker_text
|
||||
if speaker_name:
|
||||
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = speaker_name
|
||||
$MarginContainer/VBoxContainer/NameContainer.visible = true
|
||||
else:
|
||||
$MarginContainer/VBoxContainer/NameContainer.visible = false
|
||||
$MarginContainer/VBoxContainer/NameContainer/Name/NameLabel.text = ""
|
||||
# Characters per second
|
||||
var animation_speed = 48.0 / text_label.get_total_character_count()
|
||||
$AnimationPlayer.play("write_text", -1, animation_speed)
|
||||
await $AnimationPlayer.animation_finished
|
||||
802
scenes/ui_elements/textbox.tscn
Normal file
802
scenes/ui_elements/textbox.tscn
Normal file
|
|
@ -0,0 +1,802 @@
|
|||
[gd_scene load_steps=16 format=3 uid="uid://b3hnb4vtqq6p3"]
|
||||
|
||||
[ext_resource type="Script" path="res://scenes/ui_elements/textbox.gd" id="1_op1eo"]
|
||||
[ext_resource type="Texture2D" uid="uid://djlgpmcjf3djp" path="res://images/ui/panel-border-005.png" id="2_7k7l5"]
|
||||
[ext_resource type="Theme" uid="uid://ckrbqku1sx5ge" path="res://scenes/ui_elements/textbox_theme.tres" id="2_guxsf"]
|
||||
[ext_resource type="Texture2D" uid="uid://6lomvlry6h2t" path="res://images/ui/panel-border-012.png" id="4_q4tn7"]
|
||||
[ext_resource type="Texture2D" uid="uid://rusdm825x727" path="res://images/ui/tile_finger_pointing_right.png" id="5_cu26b"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1sfw7ruq8l0a" path="res://images/ui/chat-bubble.svg" id="6_27cyh"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_a34jj"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/8/interp = 2
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/10/interp = 2
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_rto2s"]
|
||||
resource_name = "collapse_textbox"
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(596, 128), Vector2(0, 0)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [18, 0]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/4/interp = 2
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [12, 0]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/5/interp = 2
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [18, 0]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/6/interp = 2
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [12, 0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/9/interp = 2
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_lv0k3"]
|
||||
resource_name = "disable_textbox"
|
||||
length = 0.001
|
||||
loop_mode = 1
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1wdjj"]
|
||||
resource_name = "expand_textbox"
|
||||
step = 0.25
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/NameContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(0, 0), Vector2(596, 128)]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 18]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/4/interp = 2
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 12]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/5/interp = 2
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 18]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/6/interp = 2
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0.25, 0.75),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0, 12]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_characters")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_kvu86"]
|
||||
resource_name = "show_textbox"
|
||||
length = 0.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 1,
|
||||
"values": [false, false]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_u2um3"]
|
||||
resource_name = "textbox_idle"
|
||||
length = 4.5
|
||||
loop_mode = 2
|
||||
step = 0.3
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("OutsideMarginContainer:theme_override_constants/margin_left")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.6, 0.9, 1.2, 1.5, 1.8, 2.1, 2.4, 2.7, 3, 3.3, 3.6, 3.9, 4.2, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552, 560, 552]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 3.6, 4.2, 4.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0), Color(0.882353, 0.894118, 0.960784, 0.501961), Color(0.882353, 0.894118, 0.960784, 0.501961)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_8t3xa"]
|
||||
resource_name = "write_text"
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_left")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [18]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_top")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [12]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_right")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [18]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:theme_override_constants/margin_bottom")
|
||||
tracks/3/interp = 2
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [12]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("MarginContainer/VBoxContainer:modulate")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text/TextLabel:visible_ratio")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0, 1),
|
||||
"transitions": PackedFloat32Array(1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, 1.0]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("MarginContainer/VBoxContainer/TextContainer/Text:custom_minimum_size")
|
||||
tracks/7/interp = 2
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(596, 128)]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("OutsideMarginContainer:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("ChatLogIndicatorMarginContainer/TextureChatLogIndicator:self_modulate")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.882353, 0.894118, 0.960784, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_tk3r4"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_a34jj"),
|
||||
"collapse_textbox": SubResource("Animation_rto2s"),
|
||||
"disable_textbox": SubResource("Animation_lv0k3"),
|
||||
"expand_textbox": SubResource("Animation_1wdjj"),
|
||||
"show_textbox": SubResource("Animation_kvu86"),
|
||||
"textbox_idle": SubResource("Animation_u2um3"),
|
||||
"write_text": SubResource("Animation_8t3xa")
|
||||
}
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_6ruof"]
|
||||
bg_color = Color(0.0470588, 0.0666667, 0.160784, 0.878431)
|
||||
|
||||
[node name="Textbox" type="CanvasLayer"]
|
||||
script = ExtResource("1_op1eo")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_tk3r4")
|
||||
}
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -12.0
|
||||
offset_top = -56.0
|
||||
offset_right = 12.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_bottom = 32
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 0
|
||||
|
||||
[node name="NameContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_left = 32
|
||||
theme_override_constants/margin_bottom = -2
|
||||
|
||||
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
|
||||
|
||||
[node name="NameFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("2_7k7l5")
|
||||
draw_center = false
|
||||
patch_margin_left = 14
|
||||
patch_margin_top = 14
|
||||
patch_margin_right = 14
|
||||
patch_margin_bottom = 14
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Name" type="MarginContainer" parent="MarginContainer/VBoxContainer/NameContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 16
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 16
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/NameContainer/Name"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
custom_minimum_size = Vector2(112, 26)
|
||||
layout_mode = 2
|
||||
theme = ExtResource("2_guxsf")
|
||||
text = "Marco"
|
||||
horizontal_alignment = 1
|
||||
visible_characters_behavior = 1
|
||||
|
||||
[node name="TextContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 8
|
||||
|
||||
[node name="Panel" type="Panel" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
clip_contents = true
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_6ruof")
|
||||
|
||||
[node name="TextFrame" type="NinePatchRect" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("4_q4tn7")
|
||||
draw_center = false
|
||||
patch_margin_left = 12
|
||||
patch_margin_top = 12
|
||||
patch_margin_right = 12
|
||||
patch_margin_bottom = 12
|
||||
axis_stretch_horizontal = 1
|
||||
axis_stretch_vertical = 1
|
||||
|
||||
[node name="Text" type="MarginContainer" parent="MarginContainer/VBoxContainer/TextContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 0
|
||||
theme_override_constants/margin_top = 0
|
||||
theme_override_constants/margin_right = 0
|
||||
theme_override_constants/margin_bottom = 0
|
||||
|
||||
[node name="TextLabel" type="RichTextLabel" parent="MarginContainer/VBoxContainer/TextContainer/Text"]
|
||||
visible = false
|
||||
modulate = Color(0.882353, 0.894118, 0.960784, 1)
|
||||
layout_mode = 2
|
||||
mouse_filter = 2
|
||||
theme = ExtResource("2_guxsf")
|
||||
bbcode_enabled = true
|
||||
text = "What the [color=#f00]fuck[/color]?!"
|
||||
scroll_active = false
|
||||
scroll_following = true
|
||||
shortcut_keys_enabled = false
|
||||
meta_underlined = false
|
||||
hint_underlined = false
|
||||
drag_and_drop_selection_enabled = false
|
||||
visible_characters = 0
|
||||
visible_characters_behavior = 1
|
||||
visible_ratio = 0.0
|
||||
|
||||
[node name="OutsideMarginContainer" type="MarginContainer" parent="."]
|
||||
visible = false
|
||||
anchors_preset = 7
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -12.0
|
||||
offset_top = -56.0
|
||||
offset_right = 12.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
theme_override_constants/margin_left = 560
|
||||
theme_override_constants/margin_bottom = 42
|
||||
|
||||
[node name="TextureNext" type="TextureRect" parent="OutsideMarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 8
|
||||
texture = ExtResource("5_cu26b")
|
||||
|
||||
[node name="ChatLogIndicatorMarginContainer" type="MarginContainer" parent="."]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
theme_override_constants/margin_left = 12
|
||||
theme_override_constants/margin_top = 12
|
||||
theme_override_constants/margin_right = 12
|
||||
theme_override_constants/margin_bottom = 12
|
||||
|
||||
[node name="TextureChatLogIndicator" type="TextureRect" parent="ChatLogIndicatorMarginContainer"]
|
||||
self_modulate = Color(0.882353, 0.894118, 0.960784, 0)
|
||||
custom_minimum_size = Vector2(36, 36)
|
||||
layout_mode = 2
|
||||
texture = ExtResource("6_27cyh")
|
||||
7
scenes/ui_elements/textbox_theme.tres
Normal file
7
scenes/ui_elements/textbox_theme.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Theme" load_steps=2 format=3 uid="uid://ckrbqku1sx5ge"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://vr3gwqu6tvh6" path="res://fonts/EpilepsySans.ttf" id="1_ic16e"]
|
||||
|
||||
[resource]
|
||||
default_font = ExtResource("1_ic16e")
|
||||
default_font_size = 26
|
||||
190
scenes/ui_elements/vn_sprite.tscn
Normal file
190
scenes/ui_elements/vn_sprite.tscn
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://d1rjb8to843h4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b2r3y8ou4x24q" path="res://images/sprites/bard/normal.png" id="1_rldh6"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_xnq4c"]
|
||||
resource_name = "RESET"
|
||||
length = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:scale")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(1, 1)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_cer7j"]
|
||||
resource_name = "sprite_1_bounce"
|
||||
length = 0.4
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:scale")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4),
|
||||
"transitions": PackedFloat32Array(2, 1, 2),
|
||||
"update": 0,
|
||||
"values": [Vector2(0.97, 0.9), Vector2(1.05, 1.1), Vector2(1, 1)]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite:position")
|
||||
tracks/2/interp = 2
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4),
|
||||
"transitions": PackedFloat32Array(2, 1, 2),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 360), Vector2(400, 300), Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_624s1"]
|
||||
resource_name = "fade_out"
|
||||
length = 0.4
|
||||
step = 0.025
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.325),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, true, false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:self_modulate")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.3, 0.375, 0.4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_yrtof"]
|
||||
resource_name = "fall_down"
|
||||
length = 0.5
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.4, 0.45),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, true, false]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:position")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.45, 0.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector2(400, 300), Vector2(400, 600), Vector2(400, 1300), Vector2(400, 1300), Vector2(400, 300)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_1wxb1"]
|
||||
resource_name = "reveal_fishing_item"
|
||||
length = 1.5
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite:visible")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite:self_modulate")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1, 1.5),
|
||||
"transitions": PackedFloat32Array(1, 1, 0.965936),
|
||||
"update": 0,
|
||||
"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_2gw37"]
|
||||
_data = {
|
||||
"RESET": SubResource("Animation_xnq4c"),
|
||||
"bounce": SubResource("Animation_cer7j"),
|
||||
"fade_out": SubResource("Animation_624s1"),
|
||||
"fall_down": SubResource("Animation_yrtof"),
|
||||
"reveal_fishing_item": SubResource("Animation_1wxb1")
|
||||
}
|
||||
|
||||
[node name="VNSprite" type="Node2D"]
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_2gw37")
|
||||
}
|
||||
|
||||
[node name="Sprite" type="Sprite2D" parent="."]
|
||||
position = Vector2(400, 300)
|
||||
texture = ExtResource("1_rldh6")
|
||||
Loading…
Add table
Add a link
Reference in a new issue