Guest User

Drag And Drop Script

a guest
Jan 15th, 2026
562
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. extends Sprite2D
  2. var dragging : bool = false
  3. var of : Vector2 = Vector2(0,0)
  4. @export var perfect_position : Vector2 = Vector2(0,0)
  5. @export var position_forgiveness : Vector2 = Vector2(20,20)
  6. @onready var audio_stream_player: AudioStreamPlayer = $AudioStreamPlayer
  7. @onready var area_2d: Area2D = $Area2D
  8.  
  9.  
  10. # Called every frame. 'delta' is the elapsed time since the previous frame.
  11. func _process(_delta: float) -> void:
  12. if dragging:
  13. position = get_global_mouse_position() - of
  14.  
  15.  
  16.  
  17. func _on_area_2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
  18. if event is InputEventMouseButton:
  19. if event.pressed:
  20. ######
  21. var parameters: PhysicsPointQueryParameters2D = PhysicsPointQueryParameters2D.new()
  22. parameters.position = get_global_mouse_position()
  23. parameters.collide_with_areas = true
  24. var object_clicked = get_world_2d().direct_space_state.intersect_point(parameters)
  25. var colliders= object_clicked.map(
  26. func(dict):
  27. return dict.collider
  28. )
  29. colliders.sort_custom(
  30. func(c1,c2):
  31. return c1.z_index<c2.z_index
  32. )
  33. ######
  34. if colliders[-1]==area_2d:
  35. dragging = true
  36. of = get_global_mouse_position() - global_position
  37.  
  38. #### Reorder z_index of all clothing items ####
  39. var previous_last = Main.clothing_list[-1]
  40. if(self!=previous_last):
  41. Main.clothing_list.erase(self)
  42. Main._order_clothing_list()
  43. Main.clothing_list.push_back(self)
  44. self.z_index = Main.clothing_list.size()
  45. area_2d.z_index = Main.clothing_list.size()
  46. audio_stream_player.pitch_scale =1.5
  47. audio_stream_player.play()
  48. dragging = true
  49. of = get_global_mouse_position() - global_position
  50. elif event.pressed == false && abs(position.x-perfect_position.x)<=position_forgiveness.x && abs(position.y-perfect_position.y)<=position_forgiveness.y:
  51. dragging = false
  52. position = perfect_position
  53. audio_stream_player.pitch_scale =0.5
  54. audio_stream_player.play()
  55.  
  56. elif event.pressed == false:
  57. dragging = false
  58. audio_stream_player.pitch_scale =0.5
  59. audio_stream_player.play()
  60.  
  61.  
Advertisement
Add Comment
Please, Sign In to add comment