utilities_gamedev/world_generator/widgets/EditorResourceWidget.gd

81 lines
1.7 KiB
GDScript

tool
extends HBoxContainer
var _resource_type : String = "Resource"
var _resource : Resource = null
var _plugin : EditorPlugin = null
signal on_resource_changed(new_res)
func _enter_tree():
$ResourceButton.set_drag_forwarding(self)
func set_resource_type(type : String) -> void:
_resource_type = type
func set_resource(res : Resource) -> void:
if res && !res.is_class(_resource_type):
return
var emit : bool = res != _resource
_resource = res
refresh_ui()
if emit:
emit_signal("on_resource_changed", _resource)
func refresh_ui() -> void:
if _resource:
var text : String = _resource.resource_name
if text == "":
text = _resource.get_class()
$ResourceButton.text = text
else:
$ResourceButton.text = "[null]"
func on_clear_button_pressed() -> void:
if _resource:
set_resource(null)
func on_resource_button_pressed() -> void:
if _resource && _plugin:
_plugin.get_editor_interface().inspect_object(_resource)
#examples
#{files:[res://modules/planets/test_planet/test_world.tres], from:@@4176:[Tree:9070], type:files}
#{from:Button:[Button:917001], resource:[Resource:26180], type:resource}
func can_drop_data_fw(position, data, from_control):
return true
func drop_data_fw(position, data, from_control):
if data["type"] == "resource":
var res : Resource = data["resource"]
set_resource(res)
elif data["type"] == "files":
var files : Array = data["files"]
for f in files:
var res : Resource = load(f)
set_resource(res)
return
func get_drag_data_fw(position, from_control):
if !_resource:
return
var d : Dictionary = Dictionary()
d["from"] = self
d["resource"] = _resource
d["type"] = "resource"
return d
func set_plugin(plugin : EditorPlugin) -> void:
_plugin = plugin