diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2024-08-31 21:19:36 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2024-08-31 21:19:36 +0200 |
commit | 14e51610a66099af5cba7cb92876e691fe017216 (patch) | |
tree | 5bbb252c0170b00e25cb66e38980bcd505c5aad2 /area_2d.gd | |
parent | cf4f54f8e43d1deb03e1b644f6a374530efa11e3 (diff) |
next commit
Diffstat (limited to 'area_2d.gd')
-rw-r--r-- | area_2d.gd | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/area_2d.gd b/area_2d.gd new file mode 100644 index 0000000..b9ed0d4 --- /dev/null +++ b/area_2d.gd @@ -0,0 +1,53 @@ +extends Area2D + +var overlapping_nodes: Dictionary = {} + +func _ready(): + connect("body_shape_entered", Callable(self, "_on_body_shape_entered")) + connect("body_shape_exited", Callable(self, "_on_body_shape_exited")) + + +func get_overlapping_nodes(): + for key in overlapping_nodes: + var body = overlapping_nodes[key].body + var body_shape: int = overlapping_nodes[key].body_shape + var area_shape: int = overlapping_nodes[key].area_shape + + var body_shape2d: Shape2D = body.shape_owner_get_shape(body_shape, 0) + var area_shape2d: Shape2D = shape_owner_get_shape(area_shape, 0) + + var body_shape2d_transform = body.shape_owner_get_owner(body_shape).get_global_transform() + var area_shape2d_transform = shape_owner_get_owner(area_shape).get_global_transform() + + var collision_points = area_shape2d.collide_and_get_contacts(area_shape2d_transform, body_shape2d, body_shape2d_transform) + overlapping_nodes[key].collision_points = collision_points + + if collision_points.size() == 2: + overlapping_nodes[key].collision_points.append( + overlapping_nodes[key].collision_points[0] + Vector2(0, 16) + ) + overlapping_nodes[key].collision_points.append( + overlapping_nodes[key].collision_points[1] + Vector2(0, 16) + ) + + + return overlapping_nodes + + +func _on_body_shape_entered(id, body, body_shape, area_shape): + if body != null: + #print("Id: ", id, " [", body, ", ", body_shape, ", ", area_shape, "] has entered. ") + var key := str(id) + ":" + str(body_shape) + overlapping_nodes[key] = { + "body": body, + "body_shape": body_shape, + "area_shape": area_shape, + "collision_points": [], + } + + +func _on_body_shape_exited(id, body, body_shape, area_shape): + if body != null: + #print("Id: ", id, " [", body, ", ", body_shape, ", ", area_shape, "] has exited. ") + var key := str(id) + ":" + str(body_shape) + overlapping_nodes.erase(key) |