princesse/mort: gestion avancée de la mort
Lorsque la princesse meurt, une animation de mort est lancée qui la fait disparaitre dans un tourbillon de la mort. A la fin du tourbillon de la mort, un signal est renvoyé à la princesse pour que la scene redémarre. Basique mais fait le taff!
This commit is contained in:
28
princesse.gd
28
princesse.gd
@@ -10,6 +10,7 @@ var gravity: int = ProjectSettings.get("physics/2d/default_gravity")
|
|||||||
@onready var ground_far_detect := $ground_far_detect as RayCast2D
|
@onready var ground_far_detect := $ground_far_detect as RayCast2D
|
||||||
@onready var animation := $AnimatedSprite2D as AnimatedSprite2D
|
@onready var animation := $AnimatedSprite2D as AnimatedSprite2D
|
||||||
@onready var camera := $Camera2D as Camera2D
|
@onready var camera := $Camera2D as Camera2D
|
||||||
|
@onready var death_animation := $"Death player" as AnimationPlayer
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
@@ -43,11 +44,14 @@ var DASH_SPEED = WALKING_SPEED * 2
|
|||||||
|
|
||||||
signal cheese_collected()
|
signal cheese_collected()
|
||||||
|
|
||||||
|
var locked = true
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
#
|
#
|
||||||
# Etat de la princesse
|
# Etat de la princesse
|
||||||
#
|
#
|
||||||
################################################################################
|
################################################################################
|
||||||
|
var dead = false
|
||||||
# Direction dans laquelle est positioné le personnage.
|
# Direction dans laquelle est positioné le personnage.
|
||||||
var direction : int = 1
|
var direction : int = 1
|
||||||
|
|
||||||
@@ -276,7 +280,6 @@ func cancel_dash() -> void:
|
|||||||
dash_step = -1
|
dash_step = -1
|
||||||
dashing=false
|
dashing=false
|
||||||
|
|
||||||
|
|
||||||
func choose_animation_orientation() -> void:
|
func choose_animation_orientation() -> void:
|
||||||
# Oriente l'animation correctement en fonction de laquelle on joue et de
|
# Oriente l'animation correctement en fonction de laquelle on joue et de
|
||||||
# la direction du personnage
|
# la direction du personnage
|
||||||
@@ -308,7 +311,7 @@ func move_and_handle_collisions() -> void:
|
|||||||
var tile_rid = collider.get_collider_rid()
|
var tile_rid = collider.get_collider_rid()
|
||||||
layer_of_collision = PhysicsServer2D.body_get_collision_layer(tile_rid)
|
layer_of_collision = PhysicsServer2D.body_get_collision_layer(tile_rid)
|
||||||
if layer_of_collision == PICS_BLOCK_LAYER:
|
if layer_of_collision == PICS_BLOCK_LAYER:
|
||||||
get_tree(). reload_current_scene()
|
death()
|
||||||
if dashing and not is_on_floor():
|
if dashing and not is_on_floor():
|
||||||
cancel_dash()
|
cancel_dash()
|
||||||
|
|
||||||
@@ -320,6 +323,8 @@ func get_coyote(table: Array):
|
|||||||
|
|
||||||
func read_input() -> void:
|
func read_input() -> void:
|
||||||
# Lis les commandes du joueur pour piloter Princesse
|
# Lis les commandes du joueur pour piloter Princesse
|
||||||
|
if locked:
|
||||||
|
return
|
||||||
|
|
||||||
# Le joueur veut-il et peut-il s'accrocher au mur ?
|
# Le joueur veut-il et peut-il s'accrocher au mur ?
|
||||||
grab_wall = pressing_wall and Input.is_action_pressed("grab" + action_suffix)
|
grab_wall = pressing_wall and Input.is_action_pressed("grab" + action_suffix)
|
||||||
@@ -452,6 +457,8 @@ func get_new_animation() -> String:
|
|||||||
return animation_new
|
return animation_new
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
|
if dead:
|
||||||
|
return
|
||||||
compute_state()
|
compute_state()
|
||||||
read_input()
|
read_input()
|
||||||
velocity.y = jump()
|
velocity.y = jump()
|
||||||
@@ -465,3 +472,20 @@ func _physics_process(delta: float) -> void:
|
|||||||
func reload_fart() -> void:
|
func reload_fart() -> void:
|
||||||
available_dashs = min(available_dashs+1, MAX_FARTS)
|
available_dashs = min(available_dashs+1, MAX_FARTS)
|
||||||
Input.start_joy_vibration(0, 0, 1, 0.1)
|
Input.start_joy_vibration(0, 0, 1, 0.1)
|
||||||
|
|
||||||
|
func death() -> void:
|
||||||
|
if not dead:
|
||||||
|
print("death")
|
||||||
|
locked = true
|
||||||
|
Input.start_joy_vibration(0, 1, 1, 1)
|
||||||
|
self.rotation = 90
|
||||||
|
dead = true
|
||||||
|
death_animation.play(&"death")
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
await get_tree().create_timer(0.3).timeout
|
||||||
|
locked = false
|
||||||
|
dead = false
|
||||||
|
|
||||||
|
func _on_death_player_animation_finished(anim_name: StringName) -> void:
|
||||||
|
get_tree(). reload_current_scene()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=31 format=3 uid="uid://dv0mokf4eogm7"]
|
[gd_scene load_steps=33 format=3 uid="uid://dv0mokf4eogm7"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://princesse.gd" id="1_dkp7s"]
|
[ext_resource type="Script" path="res://princesse.gd" id="1_dkp7s"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dr7fyh2rufsyj" path="res://sprite/princess_falling_direction.png" id="2_hholp"]
|
[ext_resource type="Texture2D" uid="uid://dr7fyh2rufsyj" path="res://sprite/princess_falling_direction.png" id="2_hholp"]
|
||||||
@@ -199,6 +199,39 @@ animations = [{
|
|||||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_6r7th"]
|
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_6r7th"]
|
||||||
height = 52.0
|
height = 52.0
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_uo4aj"]
|
||||||
|
resource_name = "death"
|
||||||
|
length = 0.5
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("AnimatedSprite2D:rotation")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0.1, 0.5),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [0.0, 31.4159]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("AnimatedSprite2D:scale")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0.1, 0.5),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector2(1, 1), Vector2(0, 0)]
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_hxxp0"]
|
||||||
|
_data = {
|
||||||
|
"death": SubResource("Animation_uo4aj")
|
||||||
|
}
|
||||||
|
|
||||||
[node name="Princesse" type="CharacterBody2D"]
|
[node name="Princesse" type="CharacterBody2D"]
|
||||||
collision_mask = 113
|
collision_mask = 113
|
||||||
slide_on_ceiling = false
|
slide_on_ceiling = false
|
||||||
@@ -234,4 +267,11 @@ shape = SubResource("CapsuleShape2D_6r7th")
|
|||||||
target_position = Vector2(0, 38)
|
target_position = Vector2(0, 38)
|
||||||
collision_mask = 16
|
collision_mask = 16
|
||||||
|
|
||||||
|
[node name="Death player" type="AnimationPlayer" parent="."]
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_hxxp0")
|
||||||
|
}
|
||||||
|
|
||||||
[connection signal="cheese_collected" from="." to="." method="reload_fart"]
|
[connection signal="cheese_collected" from="." to="." method="reload_fart"]
|
||||||
|
[connection signal="animation_finished" from="Death player" to="." method="_on_death_player_animation_finished"]
|
||||||
|
[connection signal="animation_finished" from="Death player" to="." method="reload_scene"]
|
||||||
|
|||||||
Reference in New Issue
Block a user