Enhance weapon creation dialog with 2D/3D mode support and prefill functionality

This commit is contained in:
MaddoScientisto 2026-02-08 16:44:38 +01:00
commit c78fa8aa45
4 changed files with 425 additions and 53 deletions

View file

@ -36,7 +36,8 @@ 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/simple_ice_bullet.tres")
var default_bullet_path: String = weapon_data.get("default_bullet_path", "res://Resources/Bullets/3D/icicle_repeater_bullets_3D.tres")
var is_3d: bool = weapon_data.get("is_3d", true)
# Weapon stats
var priority: int = weapon_data.get("priority", 10)
@ -51,10 +52,11 @@ func _on_create_weapon_requested(weapon_data: Dictionary) -> void:
var spread_angle: float = weapon_data.get("spread_angle", 0.0)
var random_spread: float = weapon_data.get("random_spread", 0.0)
# Build resource paths
var weapon_resource_path := "res://Resources/Weapons/" + weapon_item_key + ".tres"
var item_resource_path := "res://Resources/Items/" + weapon_item_key + "_Item.tres"
var items_database_path := "res://Resources/ItemsDatabase.tres"
# 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"
# Feedback to the UI
dock_instance.call("add_log", "=== Starting Weapon Creation ===")
@ -74,7 +76,7 @@ func _on_create_weapon_requested(weapon_data: Dictionary) -> void:
# Step 2: Create LootItem resource
if _create_loot_item_resource(item_resource_path, weapon_name, weapon_short_name,
weapon_description, weapon_item_key, weapon_resource_path, sprite_resource):
weapon_description, weapon_item_key, weapon_resource_path, sprite_resource, is_3d):
dock_instance.call("add_log", "✓ Created LootItem at: " + item_resource_path, Color.GREEN)
else:
dock_instance.call("add_log", "✗ Failed to create LootItem", Color.RED)
@ -154,7 +156,7 @@ func _create_weapon_resource(path: String, weapon_name: String, item_key: String
func _create_loot_item_resource(path: String, item_name: String, short_name: String,
description: String, item_key: String,
weapon_resource_path: String, sprite_resource: Texture2D) -> bool:
weapon_resource_path: String, sprite_resource: Texture2D, is_3d: bool) -> bool:
# Check if file already exists
if ResourceLoader.exists(path):
dock_instance.call("add_log", "Warning: LootItem already exists at " + path, Color.YELLOW)
@ -181,8 +183,17 @@ func _create_loot_item_resource(path: String, item_name: String, short_name: Str
loot_item.set("ShortName", short_name)
loot_item.set("ItemDescription", description)
loot_item.set("ItemKey", item_key)
loot_item.set("Item", 13) # ItemTypes.Weapon = 13
loot_item.set("WeaponData3D", weapon_resource)
# ItemTypes.Weapon enum value
var item_types_script = load("res://Scripts/ItemTypes.cs")
var weapon_enum_value = 9 # ItemTypes.Weapon = 9 (from enum definition)
loot_item.set("Item", weapon_enum_value)
# Set weapon data in appropriate property based on mode
if is_3d:
loot_item.set("WeaponData3D", weapon_resource)
else:
loot_item.set("WeaponData", weapon_resource)
loot_item.set("Amount", 1)
loot_item.set("Max", 1)
loot_item.set("Selectable", true)