Init Tambour
This commit is contained in:
parent
5cf819a4ba
commit
b5a9a54f94
15 changed files with 370 additions and 21 deletions
|
@ -202,7 +202,6 @@ layout_mode = 1
|
|||
[node name="MusiqueFond" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource("8_sq6yk")
|
||||
autoplay = true
|
||||
bus = &"Music"
|
||||
|
||||
[connection signal="pressed" from="Menu_principal/HBoxContainer/VBoxMainButton/play_button" to="." method="_on_play_button_pressed"]
|
||||
[connection signal="pressed" from="Menu_principal/HBoxContainer/VBoxMainButton/load_button" to="." method="_on_load_button_pressed"]
|
||||
|
|
|
@ -72,6 +72,11 @@ JOUER_MUSIQUE_GAUCHE={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
CHANGER_SLOT={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
|
|
34
ressources/images/blob-1.png.png.import
Normal file
34
ressources/images/blob-1.png.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dchan5vdmu4n0"
|
||||
path="res://.godot/imported/blob-1.png.png-d6117acd2391c64f472af8433c684912.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ressources/images/blob-1.png.png"
|
||||
dest_files=["res://.godot/imported/blob-1.png.png-d6117acd2391c64f472af8433c684912.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
34
ressources/images/blob-2-4.png.png.import
Normal file
34
ressources/images/blob-2-4.png.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bllbd2jxgi270"
|
||||
path="res://.godot/imported/blob-2-4.png.png-808d98b15f20529346c9c4c50162a975.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ressources/images/blob-2-4.png.png"
|
||||
dest_files=["res://.godot/imported/blob-2-4.png.png-808d98b15f20529346c9c4c50162a975.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
34
ressources/images/blob-3.png.png.import
Normal file
34
ressources/images/blob-3.png.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://32dcs4rylimt"
|
||||
path="res://.godot/imported/blob-3.png.png-902563b57bcfa6ab9c15d19bab7245bc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ressources/images/blob-3.png.png"
|
||||
dest_files=["res://.godot/imported/blob-3.png.png-902563b57bcfa6ab9c15d19bab7245bc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
34
ressources/images/ronde tambour.png.png.import
Normal file
34
ressources/images/ronde tambour.png.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bq2gg8sxvwth2"
|
||||
path="res://.godot/imported/ronde tambour.png.png-8204fac6218763c8b21d53d07c48f5f9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ressources/images/ronde tambour.png.png"
|
||||
dest_files=["res://.godot/imported/ronde tambour.png.png-8204fac6218763c8b21d53d07c48f5f9.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
34
ressources/images/ronde-tambour.png.import
Normal file
34
ressources/images/ronde-tambour.png.import
Normal file
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://h0y356ur32vi"
|
||||
path="res://.godot/imported/ronde-tambour.png-ee4e4d2b4e71a4aef719ad8901b83c4c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://ressources/images/ronde-tambour.png"
|
||||
dest_files=["res://.godot/imported/ronde-tambour.png-ee4e4d2b4e71a4aef719ad8901b83c4c.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
|
@ -1,15 +1,15 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://btpp8l4efhrmj"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Instrument/balle.gd" id="1_4kd3w"]
|
||||
[ext_resource type="Texture2D" uid="uid://csbrejwjfkspr" path="res://ressources/images/note1.png" id="1_qx664"]
|
||||
[ext_resource type="Script" path="res://scripts/Instrument/balle.gd" id="1_mw8yb"]
|
||||
[ext_resource type="Texture2D" uid="uid://csbrejwjfkspr" path="res://ressources/images/note1.png" id="2_xpv2h"]
|
||||
|
||||
[node name="Balle1" type="CharacterBody2D" node_paths=PackedStringArray("raycast")]
|
||||
script = ExtResource("1_4kd3w")
|
||||
script = ExtResource("1_mw8yb")
|
||||
raycast = NodePath("RayCast2D")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
rotation = 3.14159
|
||||
texture = ExtResource("1_qx664")
|
||||
texture = ExtResource("2_xpv2h")
|
||||
|
||||
[node name="RayCast2D" type="RayCast2D" parent="."]
|
||||
position = Vector2(0, -7)
|
16
scenes/attaques/Balle2.tscn
Normal file
16
scenes/attaques/Balle2.tscn
Normal file
|
@ -0,0 +1,16 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://crpjmum8m2m1b"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Instrument/balle.gd" id="1_gf62f"]
|
||||
[ext_resource type="Texture2D" uid="uid://1xayae6jyuge" path="res://ressources/images/note2.png" id="2_5005k"]
|
||||
|
||||
[node name="Balle1" type="CharacterBody2D" node_paths=PackedStringArray("raycast")]
|
||||
script = ExtResource("1_gf62f")
|
||||
raycast = NodePath("RayCast2D")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
rotation = 3.14159
|
||||
texture = ExtResource("2_5005k")
|
||||
|
||||
[node name="RayCast2D" type="RayCast2D" parent="."]
|
||||
position = Vector2(0, -7)
|
||||
target_position = Vector2(0, 15)
|
16
scenes/attaques/Balle3.tscn
Normal file
16
scenes/attaques/Balle3.tscn
Normal file
|
@ -0,0 +1,16 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://j4j8mg7jhuwy"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Instrument/balle.gd" id="1_7dxcl"]
|
||||
[ext_resource type="Texture2D" uid="uid://cq5j2fb07d7f8" path="res://ressources/images/notes3.svg" id="2_gx4yt"]
|
||||
|
||||
[node name="Balle1" type="CharacterBody2D" node_paths=PackedStringArray("raycast")]
|
||||
script = ExtResource("1_7dxcl")
|
||||
raycast = NodePath("RayCast2D")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
rotation = 3.14159
|
||||
texture = ExtResource("2_gx4yt")
|
||||
|
||||
[node name="RayCast2D" type="RayCast2D" parent="."]
|
||||
position = Vector2(0, -7)
|
||||
target_position = Vector2(0, 15)
|
19
scenes/attaques/Onde.tscn
Normal file
19
scenes/attaques/Onde.tscn
Normal file
|
@ -0,0 +1,19 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://y2j5qtyg4vt3"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Instrument/onde.gd" id="1_6377h"]
|
||||
[ext_resource type="Texture2D" uid="uid://bq2gg8sxvwth2" path="res://ressources/images/ronde tambour.png.png" id="1_oawub"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_r81ru"]
|
||||
radius = 125.575
|
||||
|
||||
[node name="Onde" type="CharacterBody2D"]
|
||||
collision_layer = 2
|
||||
collision_mask = 2
|
||||
script = ExtResource("1_6377h")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
scale = Vector2(2.5, 2.5)
|
||||
texture = ExtResource("1_oawub")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_r81ru")
|
|
@ -1,28 +1,66 @@
|
|||
class_name Flute
|
||||
|
||||
var scene_node = null
|
||||
var balle_scenes = [
|
||||
preload("res://scenes/attaques/Balle1.tscn"),
|
||||
preload("res://scenes/attaques/Balle2.tscn"),
|
||||
preload("res://scenes/attaques/Balle3.tscn")
|
||||
]
|
||||
var current_balle_index = 0
|
||||
|
||||
@export var cooldown = 0.15 # Durée du cooldown en secondes
|
||||
var is_on_cooldown = false # Indique si le cooldown est en cours
|
||||
|
||||
func set_scene_parent(node: Node) -> void:
|
||||
scene_node = node
|
||||
# Si scene_node est défini pour la première fois, on ajoute un Timer
|
||||
if not scene_node.has_node("TirCooldownTimer"):
|
||||
var cooldown_timer = Timer.new()
|
||||
cooldown_timer.name = "TirCooldownTimer"
|
||||
cooldown_timer.one_shot = true
|
||||
cooldown_timer.wait_time = cooldown
|
||||
cooldown_timer.connect("timeout", Callable(self, "_on_cooldown_timeout"))
|
||||
scene_node.add_child(cooldown_timer)
|
||||
|
||||
|
||||
func _process(delta) -> void:
|
||||
pass # Cette fonction est requise pour que delta fonctionne correctement
|
||||
|
||||
func jouer_melodie(player_position, direction_balle, angle) -> void:
|
||||
|
||||
func jouer_melodie(player_position: Vector2, direction_balle: Vector2, angle: float) -> void:
|
||||
if not is_on_cooldown: # Vérifiez si nous pouvons tirer
|
||||
spawn_balle(player_position, direction_balle, angle)
|
||||
|
||||
|
||||
func spawn_balle(player_position, direction_balle, angle) -> void:
|
||||
func spawn_balle(player_position: Vector2, direction_balle: Vector2, angle: float) -> void:
|
||||
if scene_node == null:
|
||||
print("Erreur : Aucun nœud parent défini pour ajouter la balle.")
|
||||
return
|
||||
|
||||
var balle = preload("res://scenes/attaques/Balle.tscn").instantiate()
|
||||
var current_balle_scene = balle_scenes[current_balle_index]
|
||||
var balle = current_balle_scene.instantiate()
|
||||
|
||||
if balle:
|
||||
balle.position = player_position
|
||||
balle.initial_direction = direction_balle
|
||||
balle.rotation = deg_to_rad(angle)
|
||||
scene_node.add_child(balle)
|
||||
|
||||
# Basculer vers la prochaine balle pour le prochain tir
|
||||
current_balle_index = (current_balle_index + 1) % len(balle_scenes)
|
||||
|
||||
# Démarrez le cooldown après ce tir
|
||||
start_cooldown()
|
||||
else:
|
||||
print("Erreur : la création de la balle a échoué.")
|
||||
|
||||
|
||||
# Démarrer le timer pour le cooldown
|
||||
func start_cooldown() -> void:
|
||||
is_on_cooldown = true
|
||||
var cooldown_timer = scene_node.get_node("TirCooldownTimer")
|
||||
cooldown_timer.start()
|
||||
|
||||
|
||||
func _on_cooldown_timeout() -> void:
|
||||
is_on_cooldown = false # Réinitialisez l'état de cooldown après expiration du Timer
|
||||
|
|
|
@ -1,5 +1,55 @@
|
|||
class_name Tambour
|
||||
|
||||
var scene_node = null
|
||||
@export var cooldown = 0.9 # Durée du cooldown en secondes
|
||||
var is_on_cooldown = false # Indique si le cooldown est actif
|
||||
|
||||
func faire_roulement() -> void:
|
||||
print("Le tambour fait un roulement.")
|
||||
func set_scene_parent(node: Node) -> void:
|
||||
scene_node = node
|
||||
# Si scene_node est défini pour la première fois, on ajoute un Timer
|
||||
if not scene_node.has_node("TambourCooldownTimer2"): # Changement du nom du Timer unique pour le Tambour
|
||||
var cooldown_timer = Timer.new()
|
||||
cooldown_timer.name = "TambourCooldownTimer2" # Nom unique pour éviter les conflits
|
||||
cooldown_timer.one_shot = true
|
||||
cooldown_timer.wait_time = cooldown
|
||||
cooldown_timer.connect("timeout", Callable(self, "_on_cooldown_timeout"))
|
||||
scene_node.add_child(cooldown_timer)
|
||||
|
||||
|
||||
func jouer_melodie(player_position: Vector2) -> void:
|
||||
if not is_on_cooldown: # Vérifiez si nous sommes en cooldown
|
||||
spawn_onde(player_position)
|
||||
|
||||
|
||||
|
||||
func spawn_onde(player_position: Vector2) -> void:
|
||||
if scene_node == null:
|
||||
print("Erreur : Aucun nœud parent défini pour ajouter l'onde.")
|
||||
return
|
||||
|
||||
var onde_scene = preload("res://scenes/attaques/Onde.tscn") # Chargez la scène de l'onde
|
||||
var onde = onde_scene.instantiate()
|
||||
|
||||
if onde:
|
||||
onde.position = player_position
|
||||
scene_node.add_child(onde)
|
||||
|
||||
# Démarrez le cooldown après avoir ajouté l'onde
|
||||
start_cooldown()
|
||||
else:
|
||||
print("Erreur : Impossible de créer l'onde.")
|
||||
|
||||
|
||||
# Démarrer le Timer pour le cooldown
|
||||
func start_cooldown() -> void:
|
||||
is_on_cooldown = true
|
||||
var cooldown_timer = scene_node.get_node("TambourCooldownTimer2") # Assurez-vous que le Timer est bien trouvé
|
||||
if cooldown_timer:
|
||||
cooldown_timer.start()
|
||||
else:
|
||||
print("Erreur : Timer introuvable.")
|
||||
|
||||
|
||||
func _on_cooldown_timeout() -> void:
|
||||
is_on_cooldown = false # Réinitialiser le cooldown lorsque le Timer se termine
|
||||
print("Cooldown terminé.")
|
||||
|
|
20
scripts/Instrument/onde.gd
Normal file
20
scripts/Instrument/onde.gd
Normal file
|
@ -0,0 +1,20 @@
|
|||
extends CharacterBody2D
|
||||
|
||||
var cooldown_timer = null
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if cooldown_timer == null:
|
||||
cooldown_timer = Timer.new()
|
||||
cooldown_timer.name = "OndeCooldownTimer"
|
||||
cooldown_timer.one_shot = true
|
||||
cooldown_timer.connect("timeout", Callable(self, "_on_cooldown_timeout"))
|
||||
get_tree().root.add_child(cooldown_timer)
|
||||
|
||||
# Démarrer le timer pour le cooldown
|
||||
func start_cooldown() -> void:
|
||||
cooldown_timer.start()
|
||||
|
||||
func _on_cooldown_timeout() -> void:
|
||||
cooldown_timer.queue_free()
|
||||
cooldown_timer = null
|
||||
queue_free()
|
|
@ -6,12 +6,21 @@ const max_boost_speed = 800
|
|||
|
||||
var previous_direction = Vector2.ZERO
|
||||
var boost_speed = 0
|
||||
|
||||
var flute = null
|
||||
var tambour = null
|
||||
|
||||
# Slot actif (0 = Flûte, 1 = Tambour)
|
||||
var active_slot = 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
flute = load("res://scripts/Instrument/Flute.gd").new()
|
||||
flute.set_scene_parent(get_tree().get_root())
|
||||
|
||||
tambour = load("res://scripts/Instrument/Tambour.gd").new()
|
||||
tambour.set_scene_parent(get_tree().get_root())
|
||||
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
|
@ -35,21 +44,28 @@ func _process(delta: float) -> void:
|
|||
previous_direction = direction
|
||||
velocity = direction * (move_speed + boost_speed)
|
||||
|
||||
if Input.is_action_just_pressed("JOUER_MUSIQUE_HAUT") or Input.is_action_just_pressed("JOUER_MUSIQUE_BAS") or Input.is_action_just_pressed("JOUER_MUSIQUE_DROITE") or Input.is_action_just_pressed("JOUER_MUSIQUE_GAUCHE"):
|
||||
if Input.is_action_just_pressed("CHANGER_SLOT"):
|
||||
active_slot = (active_slot + 1) % 2
|
||||
|
||||
if Input.is_action_pressed("JOUER_MUSIQUE_HAUT") or Input.is_action_pressed("JOUER_MUSIQUE_BAS") or Input.is_action_pressed("JOUER_MUSIQUE_DROITE") or Input.is_action_pressed("JOUER_MUSIQUE_GAUCHE"):
|
||||
var direction_balle = Vector2.ZERO
|
||||
var angle = 0
|
||||
if Input.is_action_just_pressed("JOUER_MUSIQUE_HAUT"):
|
||||
if Input.is_action_pressed("JOUER_MUSIQUE_HAUT"):
|
||||
direction_balle = Vector2(0, -1)
|
||||
angle = 180
|
||||
elif Input.is_action_just_pressed("JOUER_MUSIQUE_BAS"):
|
||||
elif Input.is_action_pressed("JOUER_MUSIQUE_BAS"):
|
||||
direction_balle = Vector2(0, 1)
|
||||
angle = 0
|
||||
elif Input.is_action_just_pressed("JOUER_MUSIQUE_DROITE"):
|
||||
elif Input.is_action_pressed("JOUER_MUSIQUE_DROITE"):
|
||||
direction_balle = Vector2(1, 0)
|
||||
angle = 270
|
||||
elif Input.is_action_just_pressed("JOUER_MUSIQUE_GAUCHE"):
|
||||
elif Input.is_action_pressed("JOUER_MUSIQUE_GAUCHE"):
|
||||
direction_balle = Vector2(-1, 0)
|
||||
angle = 90
|
||||
|
||||
if active_slot == 0: # Slot Flûte
|
||||
flute.jouer_melodie(position, direction_balle, angle)
|
||||
elif active_slot == 1: # Slot Tambour
|
||||
tambour.jouer_melodie(position)
|
||||
|
||||
pass
|
||||
|
|
Loading…
Add table
Reference in a new issue