@tool class_name SettingsDialog extends BaseCreatorDialog # Settings dialog for configuring Weapon Creator plugin defaults # UI fields var weapons_dir_field: LineEdit var items_dir_field: LineEdit var bullets_dir_field: LineEdit var bullets_3d_dir_field: LineEdit var items_database_field: LineEdit var default_bullet_2d_field: LineEdit var default_bullet_3d_field: LineEdit var reset_button: Button func _init() -> void: if ResourceLoader.exists(SETTINGS_PATH): settings = ResourceLoader.load(SETTINGS_PATH) if not settings: settings = WeaponCreatorSettings.new() func _configure_window() -> void: var saved_size = settings.get("settings_dialog_size") if settings else null size = saved_size if saved_size else Vector2i(600, 600) transient = false exclusive = false unresizable = false func _update_title() -> void: title = "Weapon Creator Settings" func _get_saved_position() -> Vector2i: if settings: var pos = settings.get("settings_dialog_position") return pos if pos else Vector2i.ZERO return Vector2i.ZERO func _save_dialog_size() -> void: settings.set("settings_dialog_size", size) func _save_dialog_position() -> void: settings.set("settings_dialog_position", position) func _build_content(container: VBoxContainer) -> void: var section_label = _create_section_label("Resource Paths") container.add_child(section_label) var weapons_input = _create_input("Weapons Directory:") weapons_dir_field = weapons_input.edit container.add_child(weapons_input.container) var items_input = _create_input("Items Directory:") items_dir_field = items_input.edit container.add_child(items_input.container) var bullets_input = _create_input("Bullets Directory:") bullets_dir_field = bullets_input.edit container.add_child(bullets_input.container) var bullets_3d_input = _create_input("Bullets 3D Directory:") bullets_3d_dir_field = bullets_3d_input.edit container.add_child(bullets_3d_input.container) var database_input = _create_input("Items Database:") items_database_field = database_input.edit container.add_child(database_input.container) container.add_child(HSeparator.new()) var defaults_label = _create_section_label("Default Bullets") container.add_child(defaults_label) var bullet_2d_input = _create_input("Default Bullet 2D:") default_bullet_2d_field = bullet_2d_input.edit container.add_child(bullet_2d_input.container) var bullet_3d_input = _create_input("Default Bullet 3D:") default_bullet_3d_field = bullet_3d_input.edit container.add_child(bullet_3d_input.container) container.add_child(HSeparator.new()) var reset_section = _create_section_label("Reset Options") container.add_child(reset_section) reset_button = Button.new() reset_button.text = "Reset All Settings (Filters, Dialog Sizes, Defaults)" reset_button.pressed.connect(_on_reset_pressed) container.add_child(reset_button) func _build_buttons(vbox: VBoxContainer) -> void: var button_hbox = HBoxContainer.new() button_hbox.alignment = BoxContainer.ALIGNMENT_END button_hbox.add_theme_constant_override("separation", 8) vbox.add_child(button_hbox) var cancel_button = Button.new() cancel_button.text = "Cancel" cancel_button.pressed.connect(_on_cancel_pressed) button_hbox.add_child(cancel_button) var save_button = Button.new() save_button.text = "Save" save_button.pressed.connect(_on_create_pressed) button_hbox.add_child(save_button) func _set_default_values() -> void: weapons_dir_field.text = settings.get("weapons_dir") items_dir_field.text = settings.get("items_dir") bullets_dir_field.text = settings.get("bullets_dir") bullets_3d_dir_field.text = settings.get("bullets_3d_dir") items_database_field.text = settings.get("items_database_path") default_bullet_2d_field.text = settings.get("default_bullet_2d") default_bullet_3d_field.text = settings.get("default_bullet_3d") func _apply_prefill_data() -> void: _set_default_values() func _on_create_pressed() -> void: settings.set("weapons_dir", weapons_dir_field.text) settings.set("items_dir", items_dir_field.text) settings.set("bullets_dir", bullets_dir_field.text) settings.set("bullets_3d_dir", bullets_3d_dir_field.text) settings.set("items_database_path", items_database_field.text) settings.set("default_bullet_2d", default_bullet_2d_field.text) settings.set("default_bullet_3d", default_bullet_3d_field.text) _save_dialog_size() _save_dialog_position() settings.call("save_settings") queue_free() func _on_reset_pressed() -> void: var dialog = ConfirmationDialog.new() dialog.dialog_text = "This will reset all settings including:\n- Resource paths\n- Default bullets\n- All dialog sizes\n- All dialog positions\n- All viewer filters\n\nAre you sure?" dialog.title = "Reset All Settings" add_child(dialog) dialog.confirmed.connect(func(): settings.call("reset_to_defaults") _set_default_values() dialog.queue_free() ) dialog.canceled.connect(func(): dialog.queue_free() ) dialog.popup_centered()