Refactor creator dialogs to use centralized settings management and improve UI state handling

This commit is contained in:
MaddoScientisto 2026-02-08 20:33:52 +01:00
commit 99281deef4
12 changed files with 510 additions and 242 deletions

View file

@ -4,6 +4,9 @@ extends EditorPlugin
# Editor plugin that provides a UI for creating 3D weapons with all required resources
# Adds a dock panel to the editor with input fields and a create button
const WeaponCreatorSettings = preload("res://addons/weapon_creator/WeaponCreatorSettings.gd")
const SETTINGS_PATH = "user://weapon_creator_settings.tres"
var dock_instance: PanelContainer
func _enter_tree() -> void:
@ -33,6 +36,12 @@ func _exit_tree() -> void:
dock_instance.queue_free()
func _on_create_weapon_requested(weapon_data: Dictionary) -> void:
var settings: Resource = null
if ResourceLoader.exists(SETTINGS_PATH):
settings = ResourceLoader.load(SETTINGS_PATH)
if not settings:
settings = WeaponCreatorSettings.new()
# Extract data from the dictionary
var weapon_name: String = weapon_data.get("weapon_name", "New Weapon")
var weapon_item_key: String = weapon_data.get("weapon_item_key", "NEW_WEAPON")
@ -40,7 +49,7 @@ func _on_create_weapon_requested(weapon_data: Dictionary) -> void:
var weapon_short_name: String = weapon_data.get("weapon_short_name", "NW-1")
var weapon_description: String = weapon_data.get("weapon_description", "A new weapon")
var sprite_resource: Texture2D = weapon_data.get("sprite_resource", null)
var default_bullet_path: String = weapon_data.get("default_bullet_path", "res://Resources/Bullets/3D/icicle_repeater_bullets_3D.tres")
var default_bullet_path: String = weapon_data.get("default_bullet_path", settings.get("default_bullet_3d"))
var is_3d: bool = weapon_data.get("is_3d", true)
# Weapon stats
@ -58,9 +67,9 @@ func _on_create_weapon_requested(weapon_data: Dictionary) -> void:
# Append 2D or 3D to the end of the key
var dimension_suffix = "_3D" if is_3d else "_2D"
var weapon_resource_path: String = "res://Resources/Weapons/" + weapon_item_key + dimension_suffix + ".tres"
var item_resource_path: String = "res://Resources/Items/" + weapon_item_key + "_Item" + dimension_suffix + ".tres"
var items_database_path: String = "res://Resources/ItemsDatabase.tres"
var weapon_resource_path: String = settings.get("weapons_dir") + weapon_item_key + dimension_suffix + ".tres"
var item_resource_path: String = settings.get("items_dir") + weapon_item_key + "_Item" + dimension_suffix + ".tres"
var items_database_path: String = settings.get("items_database_path")
# Feedback to the UI
dock_instance.call("add_log", "=== Starting Weapon Creation ===")
@ -255,12 +264,16 @@ func _add_to_items_database(database_path: String, item_resource_path: String) -
return true
func _on_create_bullet_requested(bullet_data: Dictionary) -> void:
var settings: Resource = null
if ResourceLoader.exists(SETTINGS_PATH):
settings = ResourceLoader.load(SETTINGS_PATH)
if not settings:
settings = WeaponCreatorSettings.new()
var bullet_name: String = bullet_data.get("bullet_name", "new_bullet")
var is_3d: bool = bullet_data.get("is_3d", true)
var bullets_dir = "res://Resources/Bullets/"
if is_3d:
bullets_dir += "3D/"
var bullets_dir = settings.get("bullets_3d_dir") if is_3d else settings.get("bullets_dir")
var bullet_path = bullets_dir + bullet_name + ".tres"
@ -284,6 +297,12 @@ func _on_create_bullet_requested(bullet_data: Dictionary) -> void:
get_editor_interface().get_resource_filesystem().scan()
func _on_create_item_requested(item_data: Dictionary) -> void:
var settings: Resource = null
if ResourceLoader.exists(SETTINGS_PATH):
settings = ResourceLoader.load(SETTINGS_PATH)
if not settings:
settings = WeaponCreatorSettings.new()
var item_name: String = item_data.get("item_name", "New Item")
var item_key: String = item_data.get("item_key", "NEW_ITEM")
var short_name: String = item_data.get("short_name", "NI")
@ -298,8 +317,8 @@ func _on_create_item_requested(item_data: Dictionary) -> void:
var consume_on_use: bool = item_data.get("consume_on_use", false)
var selectable: bool = item_data.get("selectable", false)
var item_resource_path: String = "res://Resources/Items/" + item_key + "_Item.tres"
var items_database_path: String = "res://Resources/ItemsDatabase.tres"
var item_resource_path: String = settings.get("items_dir") + item_key + "_Item.tres"
var items_database_path: String = settings.get("items_database_path")
dock_instance.call("add_log", "=== Starting Item Creation ===")
dock_instance.call("add_log", "Item Name: " + item_name)
@ -409,4 +428,3 @@ func _create_bullet_resource(path: String, bullet_data: Dictionary) -> bool:
return false
return true