]> Untitled Git - wolf-seeking-sheep.git/blob - addons/dialogic/Editor/Settings/settings_general.gd
Updated export config options
[wolf-seeking-sheep.git] / addons / dialogic / Editor / Settings / settings_general.gd
1 @tool
2 extends DialogicSettingsPage
3
4 ## Settings tab that holds genreal dialogic settings.
5
6
7 func _get_title() -> String:
8         return "General"
9
10
11 func _get_priority() -> int:
12         return 99
13
14 func _ready() -> void:
15         var s := DCSS.inline({
16                 'padding': 5,
17                 'background': Color(0.545098, 0.545098, 0.545098, 0.211765)
18         })
19         %ExtensionsFolderPicker.resource_icon = get_theme_icon("Folder", "EditorIcons")
20
21         # Signals
22         %ExtensionsFolderPicker.value_changed.connect(_on_ExtensionsFolder_value_changed)
23         %PhysicsTimerButton.toggled.connect(_on_physics_timer_button_toggled)
24
25         # Colors
26         %ResetColorsButton.icon = get_theme_icon("Reload", "EditorIcons")
27         %ResetColorsButton.button_up.connect(_on_reset_colors_button)
28
29         # Extension creator
30         %ExtensionCreator.hide()
31
32
33 func _refresh() -> void:
34         %PhysicsTimerButton.button_pressed = DialogicUtil.is_physics_timer()
35         %LayoutNodeEndBehaviour.select(ProjectSettings.get_setting('dialogic/layout/end_behaviour', 0))
36         %ExtensionsFolderPicker.set_value(ProjectSettings.get_setting('dialogic/extensions_folder', 'res://addons/dialogic_additions'))
37
38         update_color_palette()
39
40         %SectionList.clear()
41         %SectionList.create_item()
42         var cached_events := DialogicResourceUtil.get_event_cache()
43         var sections := []
44         var section_order: Array = DialogicUtil.get_editor_setting('event_section_order', ['Main', 'Logic', 'Flow', 'Audio', 'Visuals','Other', 'Helper'])
45         for ev in cached_events:
46                 if !ev.event_category in sections:
47                         sections.append(ev.event_category)
48                         var item: TreeItem = %SectionList.create_item(null)
49                         item.set_text(0, ev.event_category)
50                         item.add_button(0, get_theme_icon("ArrowUp", "EditorIcons"))
51                         item.add_button(0, get_theme_icon("ArrowDown", "EditorIcons"))
52                         if ev.event_category in section_order:
53
54                                 item.move_before(item.get_parent().get_child(min(section_order.find(ev.event_category),item.get_parent().get_child_count()-1)))
55
56         %SectionList.get_root().get_child(0).set_button_disabled(0, 0, true)
57         %SectionList.get_root().get_child(-1).set_button_disabled(0, 1, true)
58
59
60 func _on_section_list_button_clicked(item:TreeItem, column, id, mouse_button_index):
61         if id == 0:
62                 item.move_before(item.get_parent().get_child(item.get_index()-1))
63         else:
64                 item.move_after(item.get_parent().get_child(item.get_index()+1))
65
66         for child in %SectionList.get_root().get_children():
67                 child.set_button_disabled(0, 0, false)
68                 child.set_button_disabled(0, 1, false)
69
70         %SectionList.get_root().get_child(0).set_button_disabled(0, 0, true)
71         %SectionList.get_root().get_child(-1).set_button_disabled(0, 1, true)
72
73         var sections := []
74         for child in %SectionList.get_root().get_children():
75                 sections.append(child.get_text(0))
76
77         DialogicUtil.set_editor_setting('event_section_order', sections)
78         force_event_button_list_reload()
79
80
81 func force_event_button_list_reload() -> void:
82         find_parent('EditorsManager').editors['Timeline'].node.get_node('%VisualEditor').load_event_buttons()
83
84
85 func update_color_palette() -> void:
86         # Color Palette
87         for child in %Colors.get_children():
88                 child.queue_free()
89         for color in DialogicUtil.get_color_palette():
90                 var button := ColorPickerButton.new()
91                 button.custom_minimum_size = Vector2(50 ,50) * DialogicUtil.get_editor_scale()
92                 %Colors.add_child(button)
93                 button.color = DialogicUtil.get_color(color)
94                 button.color_changed.connect(_on_color_change)
95
96
97 func _on_color_change(color:Color) -> void:
98         var new_palette := {}
99         for i in %Colors.get_children():
100                 new_palette['Color'+str(i.get_index()+1)] = i.color
101         DialogicUtil.set_editor_setting('color_palette', new_palette)
102
103
104
105 func _on_reset_colors_button() -> void:
106         DialogicUtil.set_editor_setting('color_palette', null)
107         update_color_palette()
108
109
110 func _on_physics_timer_button_toggled(is_toggled: bool) -> void:
111         ProjectSettings.set_setting('dialogic/timer/process_in_physics', is_toggled)
112         ProjectSettings.save()
113
114
115 func _on_ExtensionsFolder_value_changed(property:String, value:String) -> void:
116         if value == null or value.is_empty():
117                 value = 'res://addons/dialogic_additions'
118         ProjectSettings.set_setting('dialogic/extensions_folder', value)
119         ProjectSettings.save()
120
121
122 func _on_layout_node_end_behaviour_item_selected(index:int) -> void:
123         ProjectSettings.set_setting('dialogic/layout/end_behaviour', index)
124         ProjectSettings.save()
125
126
127 ################################################################################
128 ##                                      EXTENSION CREATOR
129 ################################################################################
130
131 func _on_create_extension_button_pressed() -> void:
132         %CreateExtensionButton.hide()
133         %ExtensionCreator.show()
134
135         %NameEdit.text = ""
136         %NameEdit.grab_focus()
137
138
139 func _on_submit_extension_button_pressed() -> void:
140         if %NameEdit.text.is_empty():
141                 return
142
143         var extensions_folder: String = ProjectSettings.get_setting('dialogic/extensions_folder', 'res://addons/dialogic_additions')
144
145         extensions_folder = extensions_folder.path_join(%NameEdit.text.to_pascal_case())
146         DirAccess.make_dir_recursive_absolute(extensions_folder)
147         var mode: int = %ExtensionMode.selected
148
149         var file: FileAccess
150         var indexer_content := "@tool\nextends DialogicIndexer\n\n"
151         if mode != 2: # don't add event in Subsystem Only mode
152                 indexer_content += """func _get_events() -> Array:
153         return [this_folder.path_join('event_"""+%NameEdit.text.to_snake_case()+""".gd')]\n\n"""
154                 file = FileAccess.open(extensions_folder.path_join('event_'+%NameEdit.text.to_snake_case()+'.gd'), FileAccess.WRITE)
155                 file.store_string(
156
157 #region EXTENDED EVENT SCRIPT
158 """@tool
159 extends DialogicEvent
160 class_name Dialogic"""+%NameEdit.text.to_pascal_case()+"""Event
161
162 # Define properties of the event here
163
164 func _execute() -> void:
165         # This will execute when the event is reached
166         finish() # called to continue with the next event
167
168
169 #region INITIALIZE
170 ################################################################################
171 # Set fixed settings of this event
172 func _init() -> void:
173         event_name = \""""+%NameEdit.text.capitalize()+"""\"
174         event_category = "Other"
175
176 \n
177 #endregion
178
179 #region SAVING/LOADING
180 ################################################################################
181 func get_shortcode() -> String:
182         return \""""+%NameEdit.text.to_snake_case()+"""\"
183
184 func get_shortcode_parameters() -> Dictionary:
185         return {
186                 #param_name             : property_info
187                 #"my_parameter"         : {"property": "property", "default": "Default"},
188         }
189
190 # You can alternatively overwrite these 3 functions: to_text(), from_text(), is_valid_event()
191 #endregion
192
193
194 #region EDITOR REPRESENTATION
195 ################################################################################
196
197 func build_event_editor() -> void:
198         pass
199
200 #endregion
201 """)
202
203 #endregion
204         if mode != 0: # don't add subsystem in event only mode
205                 indexer_content += """func _get_subsystems() -> Array:
206         return [{'name':'"""+%NameEdit.text.to_pascal_case()+"""', 'script':this_folder.path_join('subsystem_"""+%NameEdit.text.to_snake_case()+""".gd')}]"""
207                 file = FileAccess.open(extensions_folder.path_join('subsystem_'+%NameEdit.text.to_snake_case()+'.gd'), FileAccess.WRITE)
208                 file.store_string(
209
210 # region EXTENDED SUBSYSTEM SCRIPT
211 """extends DialogicSubsystem
212
213 ## Describe the subsystems purpose here.
214
215
216 #region STATE
217 ####################################################################################################
218
219 func clear_game_state(clear_flag:=Dialogic.ClearFlags.FULL_CLEAR) -> void:
220         pass
221
222 func load_game_state(load_flag:=LoadFlags.FULL_LOAD) -> void:
223         pass
224
225 #endregion
226
227
228 #region MAIN METHODS
229 ####################################################################################################
230
231 # Add some useful methods here.
232
233 #endregion
234 """)
235         file = FileAccess.open(extensions_folder.path_join('index.gd'), FileAccess.WRITE)
236         file.store_string(indexer_content)
237
238         %ExtensionCreator.hide()
239         %CreateExtensionButton.show()
240
241         find_parent('EditorView').plugin_reference.get_editor_interface().get_resource_filesystem().scan_sources()
242         force_event_button_list_reload()
243
244
245
246 func _on_reload_pressed() -> void:
247         DialogicUtil._update_autoload_subsystem_access()