mirror of
				https://github.com/tonytins/dressupzack
				synced 2025-10-30 14:04:43 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| # This project is licensed under the GPL-3.0 license.
 | |
| # See the LICENSE file in the project root for more information.
 | |
| @tool
 | |
| extends Node2D
 | |
| 
 | |
| @export var group: String = "dropable"
 | |
| @export var texture: Texture2D
 | |
| 
 | |
| var is_draggable = false
 | |
| var is_inside_dropable = false
 | |
| var body_ref
 | |
| var offset: Vector2
 | |
| 
 | |
| @onready var sprite = $Sprite2D
 | |
| @onready var collsion = $Area2D/CollisionShape2D
 | |
| 
 | |
| func _ready():
 | |
| 	sprite.texture = texture
 | |
| 	collsion.position = sprite.position
 | |
| 
 | |
| # Called every frame. 'delta' is the elapsed time since the previous frame.
 | |
| func _process(delta):
 | |
| 	if is_draggable:
 | |
| 		if Input.is_action_just_pressed("click"):		
 | |
| 			offset = global_position - get_global_mouse_position()
 | |
| 			Global.is_dragging = true
 | |
| 			
 | |
| 		if Input.is_action_pressed("click"):
 | |
| 			global_position = get_global_mouse_position() - offset
 | |
| 		elif Input.is_action_just_released("click"):
 | |
| 			Global.is_dragging = false
 | |
| 			var tween = get_tree().create_tween()
 | |
| 			if is_inside_dropable:
 | |
| 				tween.tween_property(self, "position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT)
 | |
| 			else:
 | |
| 				tween.tween_property(self, "global_position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT)
 | |
| 				
 | |
| 			
 | |
| func _on_area_2d_body_entered(body):
 | |
| 	if body.is_in_group(group):
 | |
| 		is_inside_dropable = true
 | |
| 		body.modulate = Color(Color.REBECCA_PURPLE, 1)
 | |
| 		scale = Vector2(1.05, 1.05)
 | |
| 		body_ref = body
 | |
| 
 | |
| func _on_area_2d_body_exited(body:StaticBody2D):
 | |
| 	if body.is_in_group(group):
 | |
| 		is_inside_dropable = false
 | |
| 		body.modulate = Color(Color.MEDIUM_PURPLE, .7)
 | |
| 		scale = Vector2(1.05, 1.05)
 | |
| 
 | |
| 
 | |
| func _on_area_2d_mouse_entered():
 | |
| 	if not Global.is_dragging:
 | |
| 		is_draggable = true
 | |
| 		scale = Vector2(1.05, 1.05)
 | |
| 
 | |
| func _on_area_2d_mouse_exited():
 | |
| 	if not Global.is_dragging:
 | |
| 		is_draggable = false
 | |
| 		scale = Vector2(1, 1)
 |