Browse Source

:wrench: Rend les mouvements instanciables

Permet d'avoir des variables dans les scripts, tres pratique pour
retenir un etat entre chaque appel.
DricomDragon 9 months ago
parent
commit
4872798bf2

+ 1 - 1
godot/composants/interface/choix_niveau/choix_niveau.tscn

@@ -15,7 +15,7 @@
 [ext_resource type="PackedScene" uid="uid://cyyb8weydthjc" path="res://exec/niveaux/carre_simple.tscn" id="10_m6fgg"]
 [ext_resource type="PackedScene" uid="uid://dh15j87pa6rul" path="res://exec/niveaux/jdll2024.tscn" id="12_5dpbk"]
 [ext_resource type="Texture2D" uid="uid://gnbv1jnada2r" path="res://composants/interface/planete/images/21.png" id="13_s2a0u"]
-[ext_resource type="PackedScene" path="res://exec/niveaux/triangles.tscn" id="14_gw0xo"]
+[ext_resource type="PackedScene" uid="uid://c7o51scoh4v5g" path="res://exec/niveaux/triangles.tscn" id="14_gw0xo"]
 [ext_resource type="Texture2D" uid="uid://beudk7g46syiu" path="res://composants/interface/planete/images/22.png" id="15_6imjs"]
 [ext_resource type="PackedScene" uid="uid://b2578e5i8ubvg" path="res://exec/niveaux/falling_dart.tscn" id="16_qdyvs"]
 

+ 1 - 1
godot/composants/mouvements/descente_lente.gd

@@ -7,5 +7,5 @@ const vitesse_verticale: float = 5.0 # px / sec
 
 
 ## Descente tranquille
-static func bouger(noeud: Node2D, delta: float) -> void:
+func bouger(noeud: Node2D, delta: float) -> void:
 	noeud.position.y += vitesse_verticale * delta

+ 1 - 1
godot/composants/mouvements/mouvement_base.gd

@@ -3,5 +3,5 @@ class_name Mouvement
 
 
 ## Fonction a surcharger selon le mouvement
-static func bouger(_noeud: Node2D, _delta: float) -> void:
+func bouger(_noeud: Node2D, _delta: float) -> void:
 	pass # a surcharger

+ 4 - 2
godot/composants/mouvements/ping_pong.gd

@@ -7,10 +7,12 @@ const vitesse: float = 10.0 # px / sec
 const depart: float = 50.0 # px du bord gauche
 const longueur: float = 300.0 # px de long
 
+var temps: float = 0.0 # sec
+
 
 ## Descente tranquille
-static func bouger(noeud: Node2D, delta: float) -> void:
-	var temps: float = Time.get_unix_time_from_system()
+func bouger(noeud: Node2D, delta: float) -> void:
+	temps += delta
 	noeud.position.x = depart + pingpong(temps * vitesse, longueur)
 
 

+ 22 - 3
godot/composants/objets/brique/conteneur_briques.gd

@@ -4,13 +4,21 @@ extends Node2D
 
 signal plus_de_briques
 
+## Permet de bouger le grougpe de briques au fil du temps.
 ## Doit etre un script de type Mouvement
-@export var mouvement: Script
+@export var mouvement_script: GDScript
+
+var _mouvement: Mouvement
 
 @onready var nombre_enfants: int = get_children().size()
 
 
 func _ready() -> void:
+	_branche_comptage_briques()
+	_initie_mouvement()
+
+
+func _branche_comptage_briques():
 	for node: Node in get_children():
 		assert(node is Brique or node is ConteneurDeBriques, "Ne peut contenir que des briques")
 		if node is Brique:
@@ -21,11 +29,22 @@ func _ready() -> void:
 			contenant.plus_de_briques.connect(_quand_enfant_detruit)
 
 
+func _initie_mouvement():
+	if mouvement_script == null:
+		return
+
+	assert(mouvement_script.can_instantiate(), "Doit pouvoir etre mis en mouvement")
+	var mouvement: Object = mouvement_script.new()
+
+	assert(mouvement is Mouvement, "Mauvais type du script, mouvement attendu")
+	_mouvement = mouvement as Mouvement
+
+
 func _physics_process(delta: float) -> void:
-	if mouvement == null:
+	if _mouvement == null:
 		return
 
-	mouvement.bouger(self, delta)
+	_mouvement.bouger(self, delta)
 
 
 func _quand_enfant_detruit() -> void:

+ 1 - 1
godot/exec/niveaux/falling_dart.tscn

@@ -29,7 +29,7 @@ nombre_de_balles = 2
 [node name="Briques" type="Node2D" parent="."]
 position = Vector2(0, -272)
 script = ExtResource("4_d6rir")
-mouvement = ExtResource("5_bjyla")
+mouvement_script = ExtResource("5_bjyla")
 
 [node name="SpaceShip1" type="Node2D" parent="Briques"]
 position = Vector2(210, 272)

+ 1 - 1
godot/exec/niveaux/ping_pong.tscn

@@ -30,7 +30,7 @@ script = ExtResource("4_78ofy")
 
 [node name="Ligne1" type="Node2D" parent="Briques"]
 script = ExtResource("4_78ofy")
-mouvement = ExtResource("5_rhvch")
+mouvement_script = ExtResource("5_rhvch")
 
 [node name="Brique1" parent="Briques/Ligne1" instance=ExtResource("5_2efjj")]
 position = Vector2(0, 256)

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

@@ -1,4 +1,4 @@
-[gd_scene load_steps=11 format=3 uid="uid://bke8ggl6keafb"]
+[gd_scene load_steps=11 format=3 uid="uid://c7o51scoh4v5g"]
 
 [ext_resource type="Texture2D" uid="uid://dsdb8hqm3fcks" path="res://exec/niveaux/fonds/ground21.png" id="1_va2ts"]
 [ext_resource type="PackedScene" uid="uid://cpo1b44exbbyf" path="res://composants/objets/raquette/raquette.tscn" id="2_mllki"]