netfishing/ui/item_drag_source.gd

47 lines
1.2 KiB
GDScript3
Raw Permalink Normal View History

class_name ItemDragSource
extends Button
var item_id: StringName
var item_icon: Texture2D
var item_name: String
func setup(
new_item_id: StringName,
new_item_name: String,
new_icon: Texture2D,
) -> void:
item_id = new_item_id
item_name = new_item_name
item_icon = new_icon
func _get_drag_data(_at_position: Vector2) -> Variant:
if item_id.is_empty() or disabled:
return null
set_drag_preview(_create_drag_preview())
return {
"kind": "bag_item",
"item_id": String(item_id),
}
func _create_drag_preview() -> Control:
var preview := VBoxContainer.new()
preview.mouse_filter = Control.MOUSE_FILTER_IGNORE
preview.add_theme_constant_override("separation", 2)
var texture := TextureRect.new()
texture.custom_minimum_size = Vector2(44, 44)
texture.texture = item_icon
texture.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
texture.mouse_filter = Control.MOUSE_FILTER_IGNORE
preview.add_child(texture)
var label := Label.new()
label.text = item_name
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
label.mouse_filter = Control.MOUSE_FILTER_IGNORE
label.add_theme_font_size_override("font_size", 12)
preview.add_child(label)
return preview