using Godot; [Tool] public partial class UNI_GridItem : PanelContainer { private string path; public int index; [Signal] public delegate void ResourceChangedEventHandler(string path, int index); public void SetData(string data) { path = data; UpdateContent(); } private void UpdateContent() { if (path == null || path == "") { GetNode("Texture").Texture = null; return; } GetNode("Texture").Call("set_path", path); } public override Variant _GetDragData(Vector2 atPosition) { return path; } public override bool _CanDropData(Vector2 atPosition, Variant data) { return data.AsGodotDictionary().ContainsKey("files") && ResourceLoader.Exists(data.AsGodotDictionary()["files"].AsStringArray()[0]); } public override void _DropData(Vector2 atPosition, Variant data) { SetData(data.AsGodotDictionary()["files"].AsStringArray()[0]); EmitSignal(SignalName.ResourceChanged, path, index); } public override void _GuiInput(InputEvent @event) { if (@event is InputEventMouseButton buttonEvent && buttonEvent.ButtonIndex == MouseButton.Right ) { SetData(null); EmitSignal(SignalName.ResourceChanged, path, index); } } }