mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 10:45:33 +00:00
Add sprite selection and weapon viewer to weapon creation plugin
This commit is contained in:
parent
b4c38b159e
commit
04cb3da0cd
8 changed files with 327 additions and 10 deletions
|
|
@ -12,6 +12,14 @@ var item_key_field: LineEdit
|
|||
var ammo_key_field: LineEdit
|
||||
var short_name_field: LineEdit
|
||||
var description_field: TextEdit
|
||||
|
||||
# Sprite selection fields
|
||||
var sprite_resource: Texture2D
|
||||
var sprite_picker: EditorResourcePicker
|
||||
var sprite_preview: TextureRect
|
||||
var editor_interface: EditorInterface
|
||||
|
||||
# Bullet selection fields
|
||||
var bullet_dropdown: OptionButton
|
||||
var bullet_path_field: LineEdit
|
||||
|
||||
|
|
@ -32,13 +40,21 @@ var random_spread_field: SpinBox
|
|||
var create_button: Button
|
||||
var cancel_button: Button
|
||||
|
||||
func setup(editor_iface: EditorInterface) -> void:
|
||||
editor_interface = editor_iface
|
||||
# If sprite picker already exists, ensure it has editor context
|
||||
if sprite_picker:
|
||||
_setup_sprite_picker()
|
||||
|
||||
func _ready() -> void:
|
||||
# Window configuration
|
||||
title = "Create New Weapon"
|
||||
size = Vector2i(600, 700)
|
||||
size = Vector2i(750, 950)
|
||||
transient = true
|
||||
exclusive = true
|
||||
popup_window = true
|
||||
|
||||
# Connect close request (X button) to cancel action
|
||||
close_requested.connect(_on_cancel_pressed)
|
||||
|
||||
# Center on screen
|
||||
position = (DisplayServer.screen_get_size() - size) / 2
|
||||
|
|
@ -133,6 +149,16 @@ func _build_basic_info_section(parent: Control) -> void:
|
|||
|
||||
section.add_child(HSeparator.new())
|
||||
|
||||
# Sprite Selection
|
||||
var sprite_header = Label.new()
|
||||
sprite_header.text = "Item Sprite"
|
||||
sprite_header.add_theme_font_size_override("font_size", 14)
|
||||
section.add_child(sprite_header)
|
||||
|
||||
_build_sprite_selector(section)
|
||||
|
||||
section.add_child(HSeparator.new())
|
||||
|
||||
# Bullet Selection
|
||||
var bullet_header = Label.new()
|
||||
bullet_header.text = "Bullet Configuration"
|
||||
|
|
@ -161,6 +187,70 @@ func _build_basic_info_section(parent: Control) -> void:
|
|||
bullet_path_field.editable = false
|
||||
bullet_path_field.text = "res://Resources/Bullets/simple_ice_bullet.tres"
|
||||
|
||||
func _build_sprite_selector(parent: Control) -> void:
|
||||
# Container for sprite selector with preview
|
||||
var sprite_container = HBoxContainer.new()
|
||||
sprite_container.add_theme_constant_override("separation", 8)
|
||||
parent.add_child(sprite_container)
|
||||
|
||||
# Left side: Label and resource picker
|
||||
var left_vbox = VBoxContainer.new()
|
||||
left_vbox.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
left_vbox.add_theme_constant_override("separation", 4)
|
||||
sprite_container.add_child(left_vbox)
|
||||
|
||||
# Resource picker
|
||||
var picker_hbox = HBoxContainer.new()
|
||||
picker_hbox.add_theme_constant_override("separation", 4)
|
||||
left_vbox.add_child(picker_hbox)
|
||||
|
||||
var picker_label = Label.new()
|
||||
picker_label.text = "Sprite:"
|
||||
picker_label.custom_minimum_size = Vector2(120, 0)
|
||||
picker_hbox.add_child(picker_label)
|
||||
|
||||
sprite_picker = EditorResourcePicker.new()
|
||||
sprite_picker.base_type = "Texture2D"
|
||||
sprite_picker.editable = true
|
||||
sprite_picker.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
sprite_picker.resource_changed.connect(_on_sprite_resource_changed)
|
||||
picker_hbox.add_child(sprite_picker)
|
||||
|
||||
# Setup editor integration if interface is available
|
||||
if editor_interface:
|
||||
_setup_sprite_picker()
|
||||
|
||||
# Right side: Preview
|
||||
var preview_container = PanelContainer.new()
|
||||
preview_container.custom_minimum_size = Vector2(64, 64)
|
||||
sprite_container.add_child(preview_container)
|
||||
|
||||
sprite_preview = TextureRect.new()
|
||||
sprite_preview.custom_minimum_size = Vector2(64, 64)
|
||||
sprite_preview.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
|
||||
sprite_preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||
preview_container.add_child(sprite_preview)
|
||||
|
||||
func _on_sprite_resource_changed(resource: Resource) -> void:
|
||||
# Update sprite resource and preview when changed via EditorResourcePicker
|
||||
if resource is Texture2D:
|
||||
sprite_resource = resource
|
||||
sprite_preview.texture = resource
|
||||
print("Sprite resource changed: ", resource.resource_path if resource.resource_path else "[Unsaved Resource]")
|
||||
elif resource == null:
|
||||
sprite_resource = null
|
||||
sprite_preview.texture = null
|
||||
print("Sprite resource cleared")
|
||||
else:
|
||||
push_warning("Selected resource is not a Texture2D")
|
||||
|
||||
func _setup_sprite_picker() -> void:
|
||||
# Ensure sprite picker is properly integrated with editor
|
||||
if sprite_picker and editor_interface:
|
||||
# EditorResourcePicker automatically integrates with editor when in editor context
|
||||
# Just ensure toggle_mode is set correctly
|
||||
sprite_picker.toggle_mode = false
|
||||
|
||||
func _build_stats_section(parent: Control) -> void:
|
||||
var section = VBoxContainer.new()
|
||||
section.add_theme_constant_override("separation", 4)
|
||||
|
|
@ -299,6 +389,7 @@ func _on_bullet_selected(index: int) -> void:
|
|||
var selected_path = bullet_dropdown.get_item_metadata(index)
|
||||
bullet_path_field.text = selected_path
|
||||
|
||||
|
||||
func _on_weapon_name_changed(new_name: String) -> void:
|
||||
# Auto-generate item key from weapon name
|
||||
var generated_key = new_name.to_upper().replace(" ", "_")
|
||||
|
|
@ -317,6 +408,7 @@ func _on_create_pressed() -> void:
|
|||
"ammo_key": ammo_key_field.text,
|
||||
"weapon_short_name": short_name_field.text,
|
||||
"weapon_description": description_field.text,
|
||||
"sprite_resource": sprite_resource,
|
||||
"default_bullet_path": bullet_path_field.text,
|
||||
"priority": int(priority_field.value),
|
||||
"ammo_per_shot": int(ammo_per_shot_field.value),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue