godot:strategy_pattern
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
godot:strategy_pattern [2024/08/18 16:14] – ilan | godot:strategy_pattern [2024/08/18 22:53] (Version actuelle) – ilan | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
Strategy Pattern : | Strategy Pattern : | ||
Idée c'est de faire du code modulable. Le code fait appel à une fonction qui est ailleurs. | Idée c'est de faire du code modulable. Le code fait appel à une fonction qui est ailleurs. | ||
- | On créer | + | On crée un script global avec une fonction qui ne fait rien (pass ou autre) puis des sous scripts qui étendent le script global, avec des fonctions spécifiques. |
Exemple avec un filtre de nombres, on aurait : | Exemple avec un filtre de nombres, on aurait : | ||
Ligne 60: | Ligne 60: | ||
class_name BaseBulletStrategy | class_name BaseBulletStrategy | ||
extends Resource | extends Resource | ||
- | |||
- | @export var texture : Texture2D = preload(" | ||
- | @export var upgrade_text : String = " | ||
func apply_upgrade(bullet: | func apply_upgrade(bullet: | ||
Ligne 90: | Ligne 87: | ||
</ | </ | ||
+ | Une fois qu'on a tout ça, on peut aller un cran plus loin et construire un système de ressources, c'est à dire des set de données qu'on attache à des objets qui vont utiliser les stratégies. | ||
+ | |||
+ | Alors on retravaille la stratégie de base pour quelle accepte une texture et un nom | ||
< | < | ||
+ | class_name BaseBulletStrategy | ||
+ | extends Resource | ||
+ | |||
+ | @export var texture : Texture2D #une variable texture qui accepte une Texture2D | ||
+ | @export var upgrade_text : String #une variable texte qui accepte du texte | ||
+ | |||
+ | func apply_upgrade(bullet: | ||
+ | pass | ||
</ | </ | ||
+ | |||
+ | Ensuite on créer une ressource qu'on attache à des objets, une Area2D avec une CollisionShape2D, | ||
< | < | ||
+ | @export var upgrade_label : Label | ||
+ | @export var sprite : Sprite2D | ||
+ | @export var bullet_strategy : BaseBulletStrategy | ||
+ | |||
+ | func _ready() -> void: | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | func on_body_entered(body: | ||
+ | if body is Player: | ||
+ | body.upgrades.append(bullet_strategy) #on ajoute la stratégie dans la liste des upgrades du joueur | ||
+ | queue_free() | ||
+ | |||
</ | </ | ||
+ | |||
+ | Finalement, l'arme applique toutes les stratégies comme cela | ||
< | < | ||
+ | @onready var player : Player = get_owner() | ||
+ | |||
+ | for strategy in player.upgrades: | ||
+ | | ||
</ | </ | ||
+ | |||
godot/strategy_pattern.1723990447.txt.gz · Dernière modification : 2024/08/18 16:14 de ilan