Selaa lähdekoodia

:tada: Creee une nouvelle balle electrique !

DricomDragon 8 kuukautta sitten
vanhempi
commit
506a6536d5

+ 46 - 0
godot/composants/objets/balle/balle_elec/balle_electrique.gd

@@ -0,0 +1,46 @@
+class_name BalleElectrique
+extends Balle
+
+
+const BalleElectriqueScene: PackedScene = preload("res://composants/objets/balle/balle_elec/balle_electrique.tscn")
+const duree_clignotement_max: float = 0.05 # sec
+
+var _duree_clignotement: float = 0.0
+var surchargee: bool = true # vrai si l'electricite deborde
+
+@onready var image: Sprite2D = $Image
+
+
+func _process(delta: float) -> void:
+	_clignoter(delta)
+
+
+func _clignoter(delta: float) -> void:
+	if not surchargee:
+		return
+
+	_duree_clignotement += delta
+
+	if _duree_clignotement < duree_clignotement_max:
+		# trop tot pour clignoter
+		return
+
+	# pas de 0, donc au moins un axe est flip
+	var axes_a_inverser: int = randi_range(1, 3)
+	var inversion_horizontale: bool = axes_a_inverser % 2 == 1
+	var inversion_verticale: bool = axes_a_inverser / 2 == 1
+
+	if inversion_verticale:
+		image.flip_v = not image.flip_v
+	if inversion_horizontale:
+		image.flip_h = not image.flip_h
+
+	_duree_clignotement = 0.0
+
+
+## Transforme une balle quelconque en balle electrique
+static func transformer(balle: Balle) -> void:
+	var balle_elec: BalleElectrique = BalleElectriqueScene.instantiate()
+	balle.add_sibling.call_deferred(balle_elec) # Appeler plus tard sinon Godot pas content
+	balle_elec.recopier(balle)
+	balle.queue_free()

+ 22 - 0
godot/composants/objets/balle/balle_elec/balle_electrique.tscn

@@ -0,0 +1,22 @@
+[gd_scene load_steps=4 format=3 uid="uid://crpfyx6e5kn45"]
+
+[ext_resource type="Script" path="res://composants/objets/balle/balle_elec/balle_electrique.gd" id="1_fuild"]
+[ext_resource type="Texture2D" uid="uid://blttr4e575gkk" path="res://composants/objets/balle/balle_elec/09.png" id="2_rvm4r"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_lab73"]
+radius = 5.42
+
+[node name="BalleElectrique" type="CharacterBody2D" groups=["groupe_des_balles"]]
+collision_mask = 22
+motion_mode = 1
+wall_min_slide_angle = 0.0
+platform_floor_layers = 2
+platform_wall_layers = 4
+script = ExtResource("1_fuild")
+
+[node name="Image" type="Sprite2D" parent="."]
+position = Vector2(-3, 0)
+texture = ExtResource("2_rvm4r")
+
+[node name="Forme" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_lab73")

+ 2 - 0
godot/composants/objets/brique/brique.gd

@@ -57,6 +57,8 @@ func _associe_texture_brique(nouveau_type_pouvoir: Pouvoir.Type) -> void:
 			_texture_brique = preload("res://composants/objets/brique/images/08.png")
 		Pouvoir.Type.JAVELOT:
 			_texture_brique = preload("res://composants/objets/brique/images/46.png")
+		Pouvoir.Type.ELECTRIQUE:
+			_texture_brique = preload("res://composants/objets/brique/images/12.png")
 		_:
 			_texture_brique = preload("res://composants/objets/brique/images/34.png")
 	_montrer_type_pouvoir()

+ 3 - 0
godot/composants/pouvoirs/commun/association_pouvoirs.gd

@@ -8,6 +8,7 @@ enum Type {
 	RALENTIR,
 	JAVELOT,
 	SPECTRE,
+	ELECTRIQUE,
 	BONJOUR # laisser en dernier
 }
 
@@ -26,6 +27,8 @@ static func fabriquer(type: Type): # -> PouvoirBase
 			return JavelotPouvoir.new()
 		Type.SPECTRE:
 			return PouvoirSpectre.new()
+		Type.ELECTRIQUE:
+			return PouvoirElectrique.new()
 		Type.AUCUN:
 			return null
 		_:

+ 13 - 0
godot/composants/pouvoirs/pouvoir_electrique.gd

@@ -0,0 +1,13 @@
+class_name PouvoirElectrique
+extends PouvoirBase
+## Pouvoir qui rend les balles electriques
+
+
+func declencher_pouvoir(arbre_scene: SceneTree) -> void:
+	for balle in arbre_scene.get_nodes_in_group("groupe_des_balles"):
+		assert(balle is Balle, "Le groupe_des_balles ne doit contenir que des Balle !")
+		BalleElectrique.transformer(balle)
+
+
+func couleur_principale() -> Color:
+	return Color.YELLOW

+ 4 - 1
godot/exec/niveaux/avalanche.tscn

@@ -53,6 +53,7 @@ position = Vector2(180, 208)
 
 [node name="Brique3" parent="Briques/PicGauche" instance=ExtResource("5_rw2dy")]
 position = Vector2(210, 256)
+pouvoir_type = 6
 
 [node name="Brique4" parent="Briques/PicGauche" instance=ExtResource("5_rw2dy")]
 position = Vector2(210, 208)
@@ -79,10 +80,11 @@ position = Vector2(180, 208)
 
 [node name="Brique3" parent="Briques/PicDroit" instance=ExtResource("5_rw2dy")]
 position = Vector2(210, 256)
+pouvoir_type = 6
 
 [node name="Brique4" parent="Briques/PicDroit" instance=ExtResource("5_rw2dy")]
 position = Vector2(210, 208)
-pouvoir_type = 3
+pouvoir_type = 6
 
 [node name="Meca" type="Node2D" parent="Briques"]
 position = Vector2(90, 208)
@@ -106,6 +108,7 @@ position = Vector2(-30, 0)
 
 [node name="Brique3" parent="Briques/Meca" instance=ExtResource("5_rw2dy")]
 position = Vector2(0, 48)
+pouvoir_type = 6
 
 [node name="Brique4" parent="Briques/Meca" instance=ExtResource("5_rw2dy")]
 pouvoir_type = 2