cirnogodot/addons/weapon_creator/SettingsDialog.gd

152 lines
4.9 KiB
GDScript

@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()