summaryrefslogtreecommitdiff
path: root/Game/Selection/selection_rectangle.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Selection/selection_rectangle.gd')
-rw-r--r--Game/Selection/selection_rectangle.gd51
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