princesse/comamndes: ajout du dash
La princesse peut dasher à volonté pour l'instant. Il reste à relier ça avec la consomation de fromage pour les pêts.
This commit is contained in:
93
princesse.gd
93
princesse.gd
@@ -16,14 +16,16 @@ var gravity: int = ProjectSettings.get("physics/2d/default_gravity")
|
||||
# Constantes de déplacement à pimper dans l'inspecteur
|
||||
#
|
||||
################################################################################
|
||||
@export var WALKING_SPEED = 400
|
||||
@export var FALLING_SPEED = 400
|
||||
@export var JUMPING_SPEED = 400
|
||||
@export var WALKING_SPEED = 155
|
||||
@export var FALLING_SPEED = 230
|
||||
@export var JUMPING_SPEED = 220
|
||||
var DASH_SPEED = WALKING_SPEED * 2
|
||||
@export var X_SPEED_TABLE = [0, 0.1, 0.15, 0.2, 0.3, 0.6, 0.9, 1]
|
||||
@export var X_SPEED_DECEL = [0, 0.1, 0.6, 1]
|
||||
@export var FALL_SPEED_TABLE = [0, 0.1, 0.15, 0.2, 0.3, 0.6, 0.9, 1]
|
||||
@export var JUMP_SPEED_TABLE = [0, 0.1, 0.2, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
|
||||
@export var KICK_SPEED_TABLE = [0.6, 0.7, 0.8, 0.9, 1, 1, 1, 1, 1, 1]
|
||||
@export var DASH_SPEED_TABLE = [0.5, 0.6, 0.7, 0.8, 0.9, 1, 1, 1, 1, 1, 2, 2, 2]
|
||||
|
||||
# Nombre d'incrément à rajouter lorsque la touche de saut est maintenue
|
||||
@export var JUMPING_COUNTER_REFILL = 2
|
||||
@@ -76,6 +78,12 @@ var falling_step : int = -1 # Où en est la princess dans son acceleration de ch
|
||||
var pressing_wall = false # Princesse est elle en contact avec un mur ?
|
||||
var grab_wall = false # Je joueur veut-il et peut-il s'accrocher au mur ?
|
||||
|
||||
# Variables d'état relative au dash
|
||||
var dashing : bool = false
|
||||
var dash_step : int = -1
|
||||
var dash_direction_x : int = 1
|
||||
var dash_direction_y : int = 1
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# Gestion d'avec quoi Princesse collisionne
|
||||
@@ -93,7 +101,7 @@ func init_walk_state():
|
||||
|
||||
func walk(direction:int) -> float:
|
||||
# Fait marcher le personnage.
|
||||
if kicking:
|
||||
if kicking or dashing:
|
||||
init_walk_state()
|
||||
return velocity.x
|
||||
|
||||
@@ -185,7 +193,7 @@ func walk(direction:int) -> float:
|
||||
|
||||
func fall() -> float:
|
||||
# fait tomber princesse
|
||||
if jumping or kicking:
|
||||
if jumping or kicking or dashing:
|
||||
falling_step = -1
|
||||
return velocity.y
|
||||
if is_on_floor_only():
|
||||
@@ -210,7 +218,7 @@ func fall() -> float:
|
||||
|
||||
func jump() -> float:
|
||||
# fait sauter princesse
|
||||
if not jumping or kicking:
|
||||
if not jumping or kicking or dashing:
|
||||
return velocity.y
|
||||
|
||||
if not is_on_ceiling() and jump_key_counter > 0 and jump_key_counter % JUMPING_KEY_COUNTER_THRESHOLD == 0:
|
||||
@@ -226,24 +234,51 @@ func jump() -> float:
|
||||
end_jump()
|
||||
return velocity.y
|
||||
|
||||
func end_jump():
|
||||
# termine le saut de Princesse
|
||||
jumping = false
|
||||
jumping_step = -1
|
||||
jump_key_counter = 0
|
||||
|
||||
func kick() -> void:
|
||||
# fait sauter princesse
|
||||
if not kicking:
|
||||
# fait kicker la princesse
|
||||
if not kicking or dashing:
|
||||
kick_step -= 1
|
||||
kicking = false
|
||||
return
|
||||
|
||||
if kick_step > 0:
|
||||
kick_step -= 1
|
||||
velocity.y = KICK_SPEED_TABLE[kick_step] * JUMPING_SPEED * -1 * KICK_JUMP_LIMITER
|
||||
velocity.x = KICK_SPEED_TABLE[kick_step] * WALKING_SPEED * kick_direction
|
||||
velocity.rotated(45)
|
||||
else:
|
||||
kick_step = -1
|
||||
kicking=false
|
||||
velocity.rotated(0)
|
||||
|
||||
func dash() -> void:
|
||||
# fait dasher la princesse
|
||||
if not dashing:
|
||||
return
|
||||
|
||||
if dash_step >= 0:
|
||||
dash_step -= 1
|
||||
var doubley = 1
|
||||
var doublex = 1
|
||||
if abs(dash_direction_y) and not abs(dash_direction_x):
|
||||
doubley=1.1
|
||||
if abs(dash_direction_x) and not abs(dash_direction_y):
|
||||
doublex=1.1
|
||||
velocity.y = DASH_SPEED_TABLE[dash_step] * DASH_SPEED * dash_direction_y * doubley
|
||||
velocity.x = DASH_SPEED_TABLE[dash_step] * DASH_SPEED * dash_direction_x * doublex
|
||||
else:
|
||||
cancel_dash()
|
||||
|
||||
func cancel_dash() -> void:
|
||||
dash_step = -1
|
||||
dashing=false
|
||||
|
||||
func end_jump():
|
||||
# termine le saut de Princesse
|
||||
jumping = false
|
||||
jumping_step = -1
|
||||
jump_key_counter = 0
|
||||
|
||||
func choose_animation_orientation() -> void:
|
||||
# Oriente l'animation correctement en fonction de laquelle on joue et de
|
||||
@@ -277,7 +312,8 @@ func move_and_handle_collisions() -> void:
|
||||
layer_of_collision = PhysicsServer2D.body_get_collision_layer(tile_rid)
|
||||
if layer_of_collision == PICS_BLOCK_LAYER:
|
||||
get_tree(). reload_current_scene()
|
||||
|
||||
if dashing and not is_on_floor():
|
||||
cancel_dash()
|
||||
|
||||
func get_coyote(table: Array):
|
||||
var result = false
|
||||
@@ -339,6 +375,34 @@ func read_input() -> void:
|
||||
if kicking:
|
||||
direction = kick_direction
|
||||
|
||||
if Input.is_action_just_pressed("dash" + action_suffix):
|
||||
if not dashing:
|
||||
dashing = true
|
||||
dash_step = DASH_SPEED_TABLE.size()-1
|
||||
var axis_x = Input.get_axis(
|
||||
"move_left" + action_suffix,
|
||||
"move_right" + action_suffix
|
||||
)
|
||||
if not is_zero_approx(axis_x):
|
||||
if axis_x < 0:
|
||||
dash_direction_x = -1
|
||||
else:
|
||||
dash_direction_x = 1
|
||||
else:
|
||||
dash_direction_x = 0
|
||||
var axis_y = Input.get_axis(
|
||||
"move_up" + action_suffix,
|
||||
"move_down" + action_suffix
|
||||
)
|
||||
if not is_zero_approx(axis_y):
|
||||
if axis_y < 0:
|
||||
dash_direction_y = -1
|
||||
else:
|
||||
dash_direction_y = 1
|
||||
else:
|
||||
dash_direction_y = 0
|
||||
print("dash x", axis_x, "y", axis_y)
|
||||
|
||||
func compute_state() -> void:
|
||||
# Met à jour une partie de l'état de la princesse
|
||||
# gestion du coyote time sur le contact au sol
|
||||
@@ -378,6 +442,7 @@ func _physics_process(delta: float) -> void:
|
||||
velocity.y = fall()
|
||||
velocity.x = walk(direction)
|
||||
kick()
|
||||
dash()
|
||||
move_and_handle_collisions()
|
||||
play_animation()
|
||||
|
||||
|
||||
@@ -204,9 +204,6 @@ collision_mask = 113
|
||||
slide_on_ceiling = false
|
||||
floor_constant_speed = true
|
||||
script = ExtResource("1_dkp7s")
|
||||
WALKING_SPEED = 155
|
||||
FALLING_SPEED = 230
|
||||
JUMPING_SPEED = 220
|
||||
KICK_JUMP_LIMITER = 0.7
|
||||
COYOTE_LENGTH = 5
|
||||
WALK_INCR_AIR = 4
|
||||
|
||||
@@ -39,7 +39,7 @@ move_left={
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
crouch={
|
||||
move_down={
|
||||
"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":0,"key_label":4194322,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":true,"script":null)
|
||||
|
||||
Reference in New Issue
Block a user