@tool
#@icon("res://ui/assets/block.png")
class_name WeakLink
extends FileItem
var scene: PackedScene:
set(s):
scene = s; notify_property_list_changed()
var material: int = 0:
set(m): material = m; notify_property_list_changed()
var material_color: Color
var texture: Texture2D:
set(t): texture = t; notify_property_list_changed()
enum Type { Scene, Material, Texture }
var type: Type:
get:
if scene != null:
return Type.Scene
elif material != 0:
return Type.Material
elif texture != null:
return Type.Texture
@warning_ignore("assert_always_false")
assert(false, "no resource available")
return Type.Scene # smh
func _get_property_list() -> Array:
var unset := not scene and not material and not texture
return [
{ "name": "scene", "type": TYPE_OBJECT, "usage": PROPERTY_USAGE_DEFAULT if unset || scene != null else PROPERTY_USAGE_NO_EDITOR, "hint": PROPERTY_HINT_RESOURCE_TYPE, "hint_string": "PackedScene" },
{ "name": "material", "type": TYPE_INT, "usage": PROPERTY_USAGE_DEFAULT if unset || material != null else PROPERTY_USAGE_NO_EDITOR, "hint": PROPERTY_HINT_LAYERS_2D_RENDER },
{ "name": "material_color", "type": TYPE_COLOR, "usage": PROPERTY_USAGE_DEFAULT if material != null else PROPERTY_USAGE_NO_EDITOR, "hint": PROPERTY_HINT_RESOURCE_TYPE },
{ "name": "texture", "type": TYPE_OBJECT, "usage": PROPERTY_USAGE_DEFAULT if unset || texture != null else PROPERTY_USAGE_NO_EDITOR, "hint": PROPERTY_HINT_RESOURCE_TYPE, "hint_string": "Texture2D" },
]
func hash_s() -> PackedByteArray:
var item: PackedByteArray
match type:
Type.Scene: item = var_to_str(scene._bundled).to_ascii_buffer()
Type.Material: item = [material]
Type.Texture: item = texture.get_image().get_data()
return Thumbnail.hash_b(item)