Add bullet creation and viewer dialogs with 2D/3D support

- Implement BulletCreatorDialog for configuring bullet parameters.
- Introduce BulletViewer to display bullets in a grid format.
- Add filtering options for 2D and 3D bullets in the viewer.
- Enhance WeaponCreatorDock to include bullet creation functionality.
This commit is contained in:
MaddoScientisto 2026-02-08 18:10:19 +01:00
commit ac96dabf2e
8 changed files with 1045 additions and 76 deletions

View file

@ -18,6 +18,8 @@ func _enter_tree() -> void:
# Connect the create button signal from the dock
if dock_instance.has_signal("create_weapon_requested"):
dock_instance.create_weapon_requested.connect(_on_create_weapon_requested)
if dock_instance.has_signal("create_bullet_requested"):
dock_instance.create_bullet_requested.connect(_on_create_bullet_requested)
# Add the dock to the editor (bottom dock area)
add_control_to_bottom_panel(dock_instance, "Weapon Creator")
@ -249,3 +251,77 @@ func _add_to_items_database(database_path: String, item_resource_path: String) -
return false
return true
func _on_create_bullet_requested(bullet_data: Dictionary) -> void:
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 bullet_path = bullets_dir + bullet_name + ".tres"
dock_instance.call("add_log", "=== Starting Bullet Creation ===")
dock_instance.call("add_log", "Bullet Name: " + bullet_name)
dock_instance.call("add_log", "Mode: " + ("3D" if is_3d else "2D"))
if _create_bullet_resource(bullet_path, bullet_data):
dock_instance.call("add_log", "✓ Created BulletResource at: " + bullet_path, Color.GREEN)
else:
dock_instance.call("add_log", "✗ Failed to create BulletResource", Color.RED)
dock_instance.call("set_creation_complete")
return
dock_instance.call("add_log", "=== Bullet Creation Complete ===", Color.CYAN)
dock_instance.call("add_log", "Next steps:")
dock_instance.call("add_log", "1. Test the bullet in-game")
dock_instance.call("add_log", "2. Adjust properties as needed")
dock_instance.call("set_creation_complete")
get_editor_interface().get_resource_filesystem().scan()
func _create_bullet_resource(path: String, bullet_data: Dictionary) -> bool:
if ResourceLoader.exists(path):
dock_instance.call("add_log", "Warning: BulletResource already exists at " + path, Color.YELLOW)
return false
var bullet_script = load("res://Scripts/Resources/BulletResource.cs")
if bullet_script == null:
dock_instance.call("add_log", "Error: Could not load BulletResource.cs script", Color.RED)
return false
var bullet_resource = Resource.new()
bullet_resource.set_script(bullet_script)
# Set properties from bullet_data
var bullet_sprite = bullet_data.get("bullet_sprite", null)
if bullet_sprite:
bullet_resource.set("BulletSprite", bullet_sprite)
var bullet_scene = bullet_data.get("bullet_scene", null)
if bullet_scene:
bullet_resource.set("BulletScene", bullet_scene)
bullet_resource.set("BulletSize", bullet_data.get("bullet_size", 1.0))
bullet_resource.set("BulletSpeed", bullet_data.get("bullet_speed", 100.0))
bullet_resource.set("BulletDamage", bullet_data.get("bullet_damage", 1.0))
bullet_resource.set("MaxDamage", bullet_data.get("max_damage", 1.0))
bullet_resource.set("Knockback", bullet_data.get("knockback", 1.0))
bullet_resource.set("LifeTime", bullet_data.get("life_time", 10.0))
bullet_resource.set("GrazeValue", bullet_data.get("graze_value", 0.2))
var destruction_particles = bullet_data.get("destruction_particles_scene", null)
if destruction_particles:
bullet_resource.set("DestructionParticlesScene", destruction_particles)
# Set default Direction
bullet_resource.set("Direction", Vector2.RIGHT)
var err = ResourceSaver.save(bullet_resource, path)
if err != OK:
dock_instance.call("add_log", "Error saving BulletResource: " + str(err), Color.RED)
return false
return true