Skip to content

Commit b1caee0

Browse files
authored
Merge pull request #212 from food-please/main
Add Cutscenes: trigger-able sequences of events such as dialogues, treasure chests, & area transitions
2 parents 88ddc3a + dd70ca9 commit b1caee0

File tree

815 files changed

+45192
-311
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

815 files changed

+45192
-311
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Normalize EOL for all files that Git considers text files.
2+
* text=auto eol=lf

CHANGELOG.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,34 @@
11
# Changelog
22

3-
## v0.1.0 Project Demo 🏃 2023-05-19
3+
## v0.2.0 Cutscene Demo 💬
4+
5+
### New
6+
7+
The demo scene has been reworked to include cutscenes, the videogame equivalent of a short scene in a film. For example, dialogue may be displayed, the scene may switch to show key NPCs performing an event, or the inventory may be altered. Gameplay on the field is **stopped** until the cutscene concludes, though this may span a combat scenario (e.g. epic bossfight).
8+
9+
The demo introduces:
10+
- 3 main classes: Custcenes, Interactions, and Triggers
11+
- 5 template Cutscenes
12+
- Tresasure chests (that can be closed!)
13+
- Lock-able doors
14+
- Item pickups
15+
- Simple area transitions (all within the same scene, for now)
16+
- conversations, implemented via Dialogic 2
17+
- 3 simple areas to explore
18+
- Music and sound effects sprinkled throughout the demo
19+
- A simple inventory implementation
20+
- Screen transitions, both fade and texture-based
21+
22+
### Changes
23+
24+
- Reworked the demo scenario, adding a handful of areas to explore, a (fetch) quest to fulfill, and a simple puzzle to solve. If you're stuck, try talking to the energetic child...
25+
- Rearranged the folder structure.
26+
- Included the Dialogic 2 Alpha addon. ***Note that input has been modified to respond to the input events being released, rather than pressed.***
27+
- Miscellaneous fixes throughout the demo.
28+
29+
***
30+
31+
## v0.1.0 Project Demo 🏃
432

533
### New
634

CREDITS.md

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,35 @@
11
# Credits for external assets.
2-
2+
3+
Apple Cider
4+
Author: Zane Little Music
5+
URL: https://ko-fi.com/s/da7750d2a9 (accessed 2023-12-29)
6+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
7+
8+
Emotes Pack
9+
Author: Kenney
10+
URL: https://kenney.nl/assets/emotes-pack (accessed 2023-06-02)
11+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
12+
13+
Impact Sounds
14+
Author: Kenney
15+
URL: https://kenney.nl/assets/impact-sounds (accessed 2023-12-20)
16+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
17+
18+
Insect Factory
19+
Author: Zane Little Music
20+
URL: https://opengameart.org/content/insect-factory-wii-style-music (accessed 2023-06-06)
21+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
22+
23+
Interface Sounds
24+
Author: Kenney
25+
URL: https://kenney.nl/assets/interface-sounds (accessed 2023-12-20)
26+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
27+
28+
RPG Audio
29+
Author: Kenney
30+
URL: https://kenney.nl/assets/rpg-audio (accessed 2023-12-20)
31+
License: [CC0](https://creativecommons.org/publicdomain/zero/1.0/)
32+
333
Tiny Series (Tiny Town & Tiny Dungeon)
434
Author: Kenney
535
URL: https://kenney.nl/assets/tiny-town & https://kenney.nl/assets/tiny-dungeon (accessed 2023-02-22)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
OpenRPG is a tool and a demo to create Role Playing Games with turn-based combat.
66

7-
➡ Follow us on [Twitter](https://twitter.com/NathanGDQuest) and [YouTube](https://www.youtube.com/c/gdquest/) for free game creation tutorials, tips, and news! Get one of our [Godot game creation courses](https://gdquest.mavenseed.com/courses) to support our work on Free Software.
7+
➡ Follow us on [Twitter](https://twitter.com/NathanGDQuest) and [YouTube](https://www.youtube.com/c/gdquest/) for free game creation tutorials, tips, and news! Get one of our [Godot game creation courses](https://www.gdquest.com/product/) to support our work on Free Software.
88

99
## Project Goal
1010

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
@tool
2+
extends DialogicCharacterEditorPortraitSection
3+
4+
## Section that allows setting values of exported scene variables
5+
## for custom portrait scenes
6+
7+
var current_portrait_data := {}
8+
9+
10+
func _get_title() -> String:
11+
return "Settings"
12+
13+
14+
func _init():
15+
hint_text = "The settings here are @export variables from the used scene."
16+
17+
18+
func _load_portrait_data(data:Dictionary) -> void:
19+
_recheck(data)
20+
21+
22+
## Recheck section visibility and reload export fields.
23+
## This allows reacting to changes of the portrait_scene setting.
24+
func _recheck(data:Dictionary):
25+
if data.get('scene', '').is_empty() and ProjectSettings.get_setting('dialogic/portraits/default_portrait', '').is_empty():
26+
hide()
27+
get_parent().get_child(get_index()-1).hide()
28+
get_parent().get_child(get_index()+1).hide()
29+
else:
30+
get_parent().get_child(get_index()-1).show()
31+
32+
current_portrait_data = data
33+
load_portrait_scene_export_variables()
34+
35+
36+
func load_portrait_scene_export_variables():
37+
var scene = null
38+
if !current_portrait_data.get('scene', '').is_empty():
39+
scene = load(current_portrait_data.get('scene'))
40+
elif !ProjectSettings.get_setting('dialogic/portraits/default_portrait', '').is_empty():
41+
scene = load(ProjectSettings.get_setting('dialogic/portraits/default_portrait', ''))
42+
else:
43+
scene = load(character_editor.def_portrait_path)
44+
45+
if !scene:
46+
return
47+
48+
for child in $Grid.get_children():
49+
child.queue_free()
50+
51+
scene = scene.instantiate()
52+
var skip := false
53+
for i in scene.script.get_script_property_list():
54+
if i['usage'] & PROPERTY_USAGE_EDITOR and !skip:
55+
var label = Label.new()
56+
label.text = i['name'].capitalize()
57+
$Grid.add_child(label)
58+
59+
var current_value :Variant = scene.get(i['name'])
60+
if current_portrait_data.has('export_overrides') and current_portrait_data['export_overrides'].has(i['name']):
61+
current_value = str_to_var(current_portrait_data.export_overrides[i['name']])
62+
if current_value == null and typeof(scene.get(i['name'])) == TYPE_STRING:
63+
current_value = current_portrait_data['export_overrides'][i['name']]
64+
65+
var input :Node = DialogicUtil.setup_script_property_edit_node(i, current_value, set_export_override)
66+
input.size_flags_horizontal = SIZE_EXPAND_FILL
67+
$Grid.add_child(input)
68+
69+
if i['usage'] & PROPERTY_USAGE_GROUP:
70+
if i['name'] == 'Main':
71+
skip = true
72+
continue
73+
else:
74+
skip = false
75+
76+
$Label.visible = $Grid.get_child_count() == 0
77+
78+
79+
## On any change, save the export override to the portrait items metadata.
80+
func set_export_override(property_name:String, value:String = "") -> void:
81+
var data:Dictionary = selected_item.get_metadata(0)
82+
if !data.has('export_overrides'):
83+
data['export_overrides'] = {}
84+
if !value.is_empty():
85+
data.export_overrides[property_name] = value
86+
else:
87+
data.export_overrides.erase(property_name)
88+
changed.emit()
89+
update_preview.emit()
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[gd_scene load_steps=2 format=3 uid="uid://cfcs7lb6gqnmd"]
2+
3+
[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_exports.gd" id="1_isys8"]
4+
5+
[node name="Settings" type="VBoxContainer"]
6+
custom_minimum_size = Vector2(0, 35)
7+
offset_right = 367.0
8+
offset_bottom = 82.0
9+
script = ExtResource("1_isys8")
10+
11+
[node name="Label" type="Label" parent="."]
12+
layout_mode = 2
13+
theme_type_variation = &"DialogicHintText"
14+
theme_override_colors/font_color = Color(0, 0, 0, 1)
15+
text = "There are no exported variables to override. Add @export properties to the root script of your scene and make sure it's in @tool mode."
16+
autowrap_mode = 3
17+
18+
[node name="Grid" type="GridContainer" parent="."]
19+
layout_mode = 2
20+
size_flags_horizontal = 3
21+
size_flags_vertical = 3
22+
theme_override_constants/h_separation = 10
23+
columns = 2
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
@tool
2+
extends DialogicCharacterEditorPortraitSection
3+
4+
## Tab that allows setting size, offset and mirror of a portrait.
5+
6+
7+
func _get_title() -> String:
8+
return "Scale, Offset & Mirror"
9+
10+
11+
func _load_portrait_data(data:Dictionary) -> void:
12+
%IgnoreScale.set_pressed_no_signal(data.get('ignore_char_scale', false))
13+
%PortraitScale.value = data.get('scale', 1.0)*100
14+
%PortraitOffset.set_value(data.get('offset', Vector2()))
15+
%PortraitMirror.set_pressed_no_signal(data.get('mirror', false))
16+
17+
18+
func _on_portrait_scale_value_changed(value:float) -> void:
19+
var data:Dictionary = selected_item.get_metadata(0)
20+
data['scale'] = value/100.0
21+
update_preview.emit()
22+
changed.emit()
23+
24+
25+
func _on_portrait_mirror_toggled(button_pressed:bool)-> void:
26+
var data:Dictionary = selected_item.get_metadata(0)
27+
data['mirror'] = button_pressed
28+
update_preview.emit()
29+
changed.emit()
30+
31+
32+
func _on_ignore_scale_toggled(button_pressed:bool) -> void:
33+
var data:Dictionary = selected_item.get_metadata(0)
34+
data['ignore_char_scale'] = button_pressed
35+
update_preview.emit()
36+
changed.emit()
37+
38+
39+
func _on_portrait_offset_value_changed(property:String, value:Vector2) -> void:
40+
var data:Dictionary = selected_item.get_metadata(0)
41+
data['offset'] = value
42+
update_preview.emit()
43+
changed.emit()
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
[gd_scene load_steps=3 format=3 uid="uid://crke8suvv52c6"]
2+
3+
[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_layout.gd" id="1_76vf2"]
4+
[ext_resource type="PackedScene" uid="uid://dtimnsj014cu" path="res://addons/dialogic/Editor/Events/Fields/Vector2.tscn" id="2_c8kyi"]
5+
6+
[node name="Layout" type="HFlowContainer"]
7+
offset_right = 428.0
8+
offset_bottom = 128.0
9+
size_flags_horizontal = 3
10+
script = ExtResource("1_76vf2")
11+
12+
[node name="Label3" type="Label" parent="."]
13+
layout_mode = 2
14+
text = "Ignore Main Scale: "
15+
16+
[node name="IgnoreScale" type="CheckBox" parent="."]
17+
unique_name_in_owner = true
18+
layout_mode = 2
19+
tooltip_text = "This portrait will ignore the main scale."
20+
21+
[node name="HBoxContainer" type="HBoxContainer" parent="."]
22+
layout_mode = 2
23+
24+
[node name="Label" type="Label" parent="HBoxContainer"]
25+
layout_mode = 2
26+
text = "Scale:"
27+
28+
[node name="PortraitScale" type="SpinBox" parent="HBoxContainer"]
29+
unique_name_in_owner = true
30+
layout_mode = 2
31+
tooltip_text = "A scale to be applied on top of the main scale
32+
(unless ignore main scale is pressed)."
33+
value = 100.0
34+
allow_greater = true
35+
suffix = "%"
36+
37+
[node name="HBoxContainer2" type="HBoxContainer" parent="."]
38+
layout_mode = 2
39+
40+
[node name="Label2" type="Label" parent="HBoxContainer2"]
41+
layout_mode = 2
42+
text = "Offset:"
43+
44+
[node name="PortraitOffset" parent="HBoxContainer2" instance=ExtResource("2_c8kyi")]
45+
unique_name_in_owner = true
46+
layout_mode = 2
47+
tooltip_text = "Offset that is applied on top of the main portrait offset."
48+
49+
[node name="MirrorOption" type="HBoxContainer" parent="."]
50+
layout_mode = 2
51+
52+
[node name="Label" type="Label" parent="MirrorOption"]
53+
layout_mode = 2
54+
text = "Mirror:"
55+
56+
[node name="PortraitMirror" type="CheckBox" parent="MirrorOption"]
57+
unique_name_in_owner = true
58+
layout_mode = 2
59+
tooltip_text = "Mirroring that is applied on top of the main portrait mirror."
60+
61+
[connection signal="toggled" from="IgnoreScale" to="." method="_on_ignore_scale_toggled"]
62+
[connection signal="value_changed" from="HBoxContainer/PortraitScale" to="." method="_on_portrait_scale_value_changed"]
63+
[connection signal="value_changed" from="HBoxContainer2/PortraitOffset" to="." method="_on_portrait_offset_value_changed"]
64+
[connection signal="toggled" from="MirrorOption/PortraitMirror" to="." method="_on_portrait_mirror_toggled"]
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
@tool
2+
extends DialogicCharacterEditorPortraitSection
3+
4+
## Tab that allows setting a custom scene for a portrait.
5+
6+
func _get_title() -> String:
7+
return "Scene"
8+
9+
func _init():
10+
hint_text = "You can use a custom scene for this portrait."
11+
12+
func _ready() -> void:
13+
%ScenePicker.file_filter = "*.tscn, *.scn; Scenes"
14+
%ScenePicker.resource_icon = get_theme_icon('PackedScene', 'EditorIcons')
15+
%ScenePicker.placeholder = 'Default scene'
16+
17+
%OpenSceneButton.icon = get_theme_icon("ExternalLink", "EditorIcons")
18+
19+
20+
func _load_portrait_data(data:Dictionary) -> void:
21+
%ScenePicker.set_value(data.get('scene', ''))
22+
%OpenSceneButton.visible = !data.get('scene', '').is_empty()
23+
24+
25+
func _on_scene_picker_value_changed(prop_name:String, value:String) -> void:
26+
var data:Dictionary = selected_item.get_metadata(0)
27+
data['scene'] = value
28+
update_preview.emit()
29+
changed.emit()
30+
%OpenSceneButton.visible = !data.get('scene', '').is_empty()
31+
32+
33+
func _on_open_scene_button_pressed():
34+
if !%ScenePicker.current_value.is_empty() and FileAccess.file_exists(%ScenePicker.current_value):
35+
DialogicUtil.get_dialogic_plugin().get_editor_interface().open_scene_from_path(%ScenePicker.current_value)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
[gd_scene load_steps=5 format=3 uid="uid://djq4aasoihexj"]
2+
3+
[ext_resource type="Script" path="res://addons/dialogic/Editor/CharacterEditor/char_edit_p_section_main.gd" id="1_ht8lu"]
4+
[ext_resource type="PackedScene" uid="uid://7mvxuaulctcq" path="res://addons/dialogic/Editor/Events/Fields/FilePicker.tscn" id="2_k8xs0"]
5+
6+
[sub_resource type="Image" id="Image_sbh6e"]
7+
data = {
8+
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
9+
"format": "RGBA8",
10+
"height": 16,
11+
"mipmaps": false,
12+
"width": 16
13+
}
14+
15+
[sub_resource type="ImageTexture" id="ImageTexture_mbv6v"]
16+
image = SubResource("Image_sbh6e")
17+
18+
[node name="Scene" type="GridContainer"]
19+
offset_right = 298.0
20+
offset_bottom = 86.0
21+
size_flags_horizontal = 3
22+
script = ExtResource("1_ht8lu")
23+
24+
[node name="HBox" type="HBoxContainer" parent="."]
25+
layout_mode = 2
26+
size_flags_horizontal = 3
27+
28+
[node name="ScenePicker" parent="HBox" instance=ExtResource("2_k8xs0")]
29+
unique_name_in_owner = true
30+
layout_mode = 2
31+
size_flags_horizontal = 3
32+
file_filter = "*.tscn, *.scn; Scenes"
33+
placeholder = "Default scene"
34+
resource_icon = SubResource("ImageTexture_mbv6v")
35+
36+
[node name="OpenSceneButton" type="Button" parent="HBox"]
37+
unique_name_in_owner = true
38+
layout_mode = 2
39+
icon = SubResource("ImageTexture_mbv6v")
40+
41+
[connection signal="value_changed" from="HBox/ScenePicker" to="." method="_on_scene_picker_value_changed"]
42+
[connection signal="pressed" from="HBox/OpenSceneButton" to="." method="_on_open_scene_button_pressed"]

0 commit comments

Comments
 (0)