Sfoglia il codice sorgente

:tada: Creee le pouvoire de balle spectrale

DricomDragon 10 mesi fa
parent
commit
1fe3a0254e

+ 41 - 0
godot/composants/objets/balle/balle_spectrale/balle_spectrale.gd

@@ -0,0 +1,41 @@
+class_name BalleSpectrale
+extends Balle
+
+
+const BalleDeSpectraleScene: PackedScene = preload("res://composants/objets/balle/balle_spectrale/balle_spectrale.tscn")
+const CALQUE_COLLISION_BRIQUE_INDEXE: int = 5
+const CALQUE_COLLISION_BRIQUE_ACTIVATION: int = pow(2, CALQUE_COLLISION_BRIQUE_INDEXE - 1)
+
+var _est_tangible: bool = true
+
+@onready var image_tangible: Sprite2D = $ImageTangible
+@onready var image_spectre: Sprite2D = $ImageSpectre
+
+
+func rendre_tangible(doit_etre_tangible: bool) -> void:
+	if doit_etre_tangible == _est_tangible:
+		return # etat demande deja atteint
+
+	image_tangible.visible = doit_etre_tangible
+	image_spectre.visible = not doit_etre_tangible
+
+	if doit_etre_tangible:
+		collision_mask += CALQUE_COLLISION_BRIQUE_ACTIVATION
+	else:
+		collision_mask -= CALQUE_COLLISION_BRIQUE_ACTIVATION
+
+	_est_tangible = doit_etre_tangible # l'etat courant a change
+
+
+## La spectrale redevient tangible au premier rebond
+func _rebondir(impact: KinematicCollision2D) -> void:
+	rendre_tangible(not impact.get_collider() is Raquette)
+	super._rebondir(impact)
+
+
+## Transforme une balle quelconque en balle de feu
+static func transformer(balle: Balle) -> void:
+	var balle_spectrale: BalleSpectrale = BalleDeSpectraleScene.instantiate()
+	balle.add_sibling.call_deferred(balle_spectrale) # Appeler plus tard sinon Godot pas content
+	balle_spectrale.recopier(balle)
+	balle.queue_free()

+ 31 - 0
godot/composants/objets/balle/balle_spectrale/balle_spectrale.tscn

@@ -0,0 +1,31 @@
+[gd_scene load_steps=5 format=3 uid="uid://bf7cq8j182cmh"]
+
+[ext_resource type="Script" path="res://composants/objets/balle/balle_spectrale/balle_spectrale.gd" id="1_snyek"]
+[ext_resource type="Texture2D" uid="uid://dqygu3upmpf3v" path="res://composants/objets/balle/balle_spectrale/07.png" id="2_sf2e6"]
+[ext_resource type="Texture2D" uid="uid://ca4u4slhbnjd8" path="res://composants/objets/balle/balle_spectrale/08.png" id="3_mhuq7"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_lab73"]
+radius = 5.42
+
+[node name="BalleDeFeu" 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_snyek")
+
+[node name="ImageTangible" type="Sprite2D" parent="."]
+position = Vector2(-1, -3)
+rotation = 1.5708
+texture = ExtResource("2_sf2e6")
+
+[node name="ImageSpectre" type="Sprite2D" parent="."]
+visible = false
+modulate = Color(1, 1, 1, 0.784314)
+position = Vector2(-1, -3)
+rotation = 1.5708
+texture = ExtResource("3_mhuq7")
+
+[node name="Forme" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_lab73")

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

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

+ 14 - 0
godot/composants/pouvoirs/pouvoir_spectre.gd

@@ -0,0 +1,14 @@
+class_name PouvoirSpectre
+extends PouvoirBase
+## Pouvoir qui rend la balle intangible quand elle est renvoyée
+
+
+func declencher_pouvoir(arbre_scene: SceneTree) -> void:
+	print("Les balles deviennent spectrales")
+	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 !")
+		BalleSpectrale.transformer(balle)
+
+
+func couleur_principale() -> Color:
+	return Color.PURPLE

+ 2 - 2
godot/exec/niveaux/triangles.tscn

@@ -11,7 +11,7 @@
 [ext_resource type="PackedScene" uid="uid://ds3j5rjhys4xf" path="res://composants/interface/stock/stock.tscn" id="9_lcj17"]
 [ext_resource type="AudioStream" uid="uid://1p4lhi3rprps" path="res://ressources/musiques/atelier_godot_level_main_loop.ogg" id="10_840ac"]
 
-[node name="CarreSimple" type="Node2D"]
+[node name="Triangles" type="Node2D"]
 
 [node name="Fond" type="TextureRect" parent="."]
 offset_right = 40.0
@@ -34,7 +34,7 @@ pouvoir_type = 2
 
 [node name="Brique70" parent="Briques" instance=ExtResource("5_w87fw")]
 position = Vector2(180, 176)
-pouvoir_type = 2
+pouvoir_type = 5
 
 [node name="Brique2" parent="Briques" instance=ExtResource("5_w87fw")]
 position = Vector2(150, 144)