Explorar el Código

Corrige balle enflammee qui ne reapparait pas

DricomDragon hace 11 meses
padre
commit
ebc9809cb6

+ 10 - 0
godot/composants/objets/arene/arene.gd

@@ -0,0 +1,10 @@
+extends Node2D
+
+
+func _quand_zone_interieure_detecte_sortie(corps: Node2D) -> void:
+	if corps is Balle: # toujours le cas si calque collision bien regle
+		_traiter_balle_sortie(corps)
+
+
+func _traiter_balle_sortie(balle: Balle) -> void:
+	balle.detruire()

+ 16 - 1
godot/composants/objets/arene/arene.tscn

@@ -1,6 +1,7 @@
-[gd_scene load_steps=4 format=3 uid="uid://b28d5a4be36qa"]
+[gd_scene load_steps=6 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"]
 
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_cjamf"]
 size = Vector2(820, 200)
@@ -8,9 +9,13 @@ size = Vector2(820, 200)
 [sub_resource type="RectangleShape2D" id="RectangleShape2D_d3hv4"]
 size = Vector2(200, 1200)
 
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_u5oj2"]
+size = Vector2(420, 420)
+
 [node name="Arene" type="StaticBody2D"]
 collision_layer = 4
 physics_material_override = ExtResource("1_h5k8j")
+script = ExtResource("2_4mq1v")
 
 [node name="Haut" type="CollisionShape2D" parent="."]
 position = Vector2(210, -100)
@@ -23,3 +28,13 @@ shape = SubResource("RectangleShape2D_d3hv4")
 [node name="Gauche" type="CollisionShape2D" parent="."]
 position = Vector2(-100, 400)
 shape = SubResource("RectangleShape2D_d3hv4")
+
+[node name="ZoneInterieure" type="Area2D" parent="."]
+position = Vector2(210, 210)
+collision_layer = 4
+monitorable = false
+
+[node name="FormeZone" type="CollisionShape2D" parent="ZoneInterieure"]
+shape = SubResource("RectangleShape2D_u5oj2")
+
+[connection signal="body_exited" from="ZoneInterieure" to="." method="_quand_zone_interieure_detecte_sortie"]

+ 6 - 10
godot/composants/objets/balle/balle.gd

@@ -2,7 +2,7 @@ class_name Balle
 extends CharacterBody2D
 
 
-signal sortie_ecran
+signal detruite
 
 const ratio_diff_angle: float = PI * 0.005 # radian / px
 const ascension_min: float = 10.0 # px / sec
@@ -39,6 +39,11 @@ func recopier(autre_balle: Balle) -> void:
 	direction_initiale = _mouvement.normalized() # pour garder direction en cas d'ajout dans une scene
 
 
+func detruire() -> void:
+	detruite.emit()
+	queue_free()
+
+
 func _rebondir(impact: KinematicCollision2D) -> void:
 	_mouvement = _mouvement.bounce(impact.get_normal())
 
@@ -63,12 +68,3 @@ func _impacter_brique(brique: Brique) -> void:
 
 func _mettre_en_mouvement(dir: Vector2) -> void:
 	_mouvement = dir * _vitesse
-
-
-func _auto_detruire() -> void:
-	queue_free()
-
-
-func _quand_verificateur_visibilite_detecte_sortie_ecran():
-	sortie_ecran.emit()
-	_auto_detruire()

+ 0 - 4
godot/composants/objets/balle/balle.tscn

@@ -20,7 +20,3 @@ texture = ExtResource("2_aab72")
 
 [node name="Forme" type="CollisionShape2D" parent="."]
 shape = SubResource("CircleShape2D_lab73")
-
-[node name="VerificateurVisibilite" type="VisibleOnScreenNotifier2D" parent="."]
-
-[connection signal="screen_exited" from="VerificateurVisibilite" to="." method="_quand_verificateur_visibilite_detecte_sortie_ecran"]

+ 0 - 4
godot/composants/objets/balle/balle_de_feu/balle_de_feu.tscn

@@ -21,7 +21,3 @@ texture = ExtResource("2_s1mc5")
 
 [node name="Forme" type="CollisionShape2D" parent="."]
 shape = SubResource("CircleShape2D_lab73")
-
-[node name="VerificateurVisibilite" type="VisibleOnScreenNotifier2D" parent="."]
-
-[connection signal="screen_exited" from="VerificateurVisibilite" to="." method="_quand_verificateur_visibilite_detecte_sortie_ecran"]

+ 3 - 3
godot/composants/objets/lanceur/lanceur.gd

@@ -10,9 +10,9 @@ func _ready() -> void:
 
 func lancer_balle() -> void:
 	var nouvelle_balle: Balle = SceneBalle.instantiate()
-	add_child(nouvelle_balle)
-	nouvelle_balle.sortie_ecran.connect(_quand_balle_sort)
+	add_child.call_deferred(nouvelle_balle) # Appeler plus tard sinon Godot pas content
+	nouvelle_balle.detruite.connect(_quand_balle_detruite)
 
 
-func _quand_balle_sort() -> void:
+func _quand_balle_detruite() -> void:
 	lancer_balle()