فهرست منبع

:wrench: Hack pour detecter les sorties de briques statiques

Bien : pas besoin de rajouter une zone pour chaque brique (lourd,
incomprehensible)

Mal : c'est clairement un hack, le code n'est pas naturel pour faire
cette detection

Mais bon, ca marche, c'est simple, et c'est documente.

Ne pas oublier de cocher "monitorable" pour la zone. (Ca aussi c'est
tres bizarre).
DricomDragon 9 ماه پیش
والد
کامیت
d6ae80df49

+ 2 - 1
godot/composants/objets/arene/arene.gd

@@ -6,6 +6,7 @@ signal brique_sortie
 
 
 func _quand_zone_exterieure_detecte_entree(corps: Node2D) -> void:
+	print("Sortie de ", corps.get_name())
 	if corps is Balle:
 		_traiter_balle_sortie(corps)
 	elif corps is Brique:
@@ -17,5 +18,5 @@ func _traiter_balle_sortie(balle: Balle) -> void:
 	balle_detruite.emit()
 
 
-func _traiter_brique_sortie(brique: Brique) -> void:
+func _traiter_brique_sortie(_brique: Brique) -> void:
 	brique_sortie.emit()

+ 10 - 7
godot/composants/objets/arene/arene.tscn

@@ -1,7 +1,8 @@
-[gd_scene load_steps=6 format=3 uid="uid://b28d5a4be36qa"]
+[gd_scene load_steps=7 format=3 uid="uid://b28d5a4be36qa"]
 
 [ext_resource type="PhysicsMaterial" uid="uid://c6bddricwmcxx" path="res://ressources/materiaux/metal.tres" id="1_h5k8j"]
 [ext_resource type="Script" path="res://composants/objets/arene/arene.gd" id="2_4mq1v"]
+[ext_resource type="Script" path="res://composants/objets/arene/hack_detection_statique.gd" id="3_k2opa"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_cjamf"]
 size = Vector2(820, 200)
@@ -12,20 +13,22 @@ size = Vector2(200, 1200)
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_u5oj2"]
 size = Vector2(420, 420)
 
-[node name="Arene" type="StaticBody2D"]
+[node name="Arene" type="Node2D"]
+script = ExtResource("2_4mq1v")
+
+[node name="Murs" type="StaticBody2D" parent="."]
 collision_layer = 4
 physics_material_override = ExtResource("1_h5k8j")
-script = ExtResource("2_4mq1v")
 
-[node name="Haut" type="CollisionShape2D" parent="."]
+[node name="Haut" type="CollisionShape2D" parent="Murs"]
 position = Vector2(210, -100)
 shape = SubResource("RectangleShape2D_cjamf")
 
-[node name="Droite" type="CollisionShape2D" parent="."]
+[node name="Droite" type="CollisionShape2D" parent="Murs"]
 position = Vector2(520, 400)
 shape = SubResource("RectangleShape2D_d3hv4")
 
-[node name="Gauche" type="CollisionShape2D" parent="."]
+[node name="Gauche" type="CollisionShape2D" parent="Murs"]
 position = Vector2(-100, 400)
 shape = SubResource("RectangleShape2D_d3hv4")
 
@@ -33,7 +36,7 @@ shape = SubResource("RectangleShape2D_d3hv4")
 position = Vector2(210, 642)
 collision_layer = 4
 collision_mask = 17
-monitorable = false
+script = ExtResource("3_k2opa")
 
 [node name="FormeZone" type="CollisionShape2D" parent="ZoneExterieure"]
 shape = SubResource("RectangleShape2D_u5oj2")

+ 15 - 0
godot/composants/objets/arene/hack_detection_statique.gd

@@ -0,0 +1,15 @@
+extends Area2D
+## Rend possible la detection de corps statiques en mouvement
+## Permet de contourner une limitation Godot 4.2
+
+
+func _process(_delta: float) -> void:
+	_force_detection_de_corps_statiques()
+
+
+## Hack Godot 4.2 pour detecter les corps statiques entrant dans la zone
+## Quand la zone bouge, elle detecte les corps statiques : voir Javelot
+## Mais ce n'est pas le cas lorsque la zone ne bouge pas et qu'un corps statique
+## bouge
+func _force_detection_de_corps_statiques() -> void:
+	set_position(get_position())

+ 1 - 0
godot/composants/objets/brique/brique.tscn

@@ -9,6 +9,7 @@ size = Vector2(30, 16)
 
 [node name="Brique" type="StaticBody2D"]
 collision_layer = 16
+collision_mask = 0
 physics_material_override = ExtResource("1_exny1")
 script = ExtResource("2_gkrr0")