diff options
Diffstat (limited to 'Game/Selection/selection_rectangle.gd')
-rw-r--r-- | Game/Selection/selection_rectangle.gd | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Game/Selection/selection_rectangle.gd b/Game/Selection/selection_rectangle.gd new file mode 100644 index 0000000..a57f25b --- /dev/null +++ b/Game/Selection/selection_rectangle.gd @@ -0,0 +1,51 @@ +extends Area2D + + +@export_group("Color", "color") +@export var color_background: Color +@export var color_border: Color + +var anchor: Vector2 = Vector2.ZERO +var size: Vector2 = Vector2.ZERO : + set(value): + size = value + $CollisionShape2D.position = size / 2 + $CollisionShape2D.shape.size = abs(size) + +var is_active: bool : + get(): + return abs(size) > Vector2(1, 1) + + +func _process(_delta: float) -> void: + if Input.is_action_just_pressed("select"): + anchor = get_global_mouse_position() + global_position = anchor + + if Input.is_action_pressed("select"): + size = get_global_mouse_position() - anchor + if is_active: + queue_redraw() + + if is_active and Input.is_action_just_released("select"): + for area in get_overlapping_areas(): + if "is_selected" in area.get_parent(): + area.get_parent().is_selected = true + + size = Vector2.ZERO + queue_redraw() + + +func _draw(): + if is_active: + var rect = Rect2(Vector2.ZERO, size) + draw_rect(rect, color_background) + draw_rect(rect, color_border, false, 2.0) + + +func _on_area_entered(area: Area2D) -> void: + area.get_parent().is_hovered = true + + +func _on_area_exited(area: Area2D) -> void: + area.get_parent().is_hovered = false |