47 lines
1.2 KiB
GDScript3
47 lines
1.2 KiB
GDScript3
|
|
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
|