wall kicks can work

This commit is contained in:
Haze Weathers 2025-03-15 06:54:35 -04:00
parent 1895b3b10b
commit 638495f4a3
5 changed files with 83 additions and 4 deletions

View file

@ -7,6 +7,8 @@ extends CharacterBody2D
@export var max_run_speed: float
@export var turn_acceleration: float
@export var stopping_force: float
@export var bonk_speed_threshold: float
@export var bonk_power: float
@export_group("Air Movement")
@export var gravity: float
@ -39,6 +41,7 @@ var input_dir: Vector2 = Vector2.ZERO:
var _last_velocity: Vector2 = Vector2.ZERO
var _splat_normal: Vector2 = Vector2.ZERO
var _bonk_cancel_velocity: Vector2 = Vector2.ZERO
func _physics_process(delta: float) -> void:
@ -94,6 +97,25 @@ func _apply_turn_acceleration(delta: float) -> void:
#endregion
#region Bonk
func _check_for_bonk(_delta: float) -> void:
if absf(velocity.x) >= bonk_speed_threshold:
wall_cast.force_shapecast_update()
if wall_cast.is_colliding():
state_chart.send_event(&"bonked")
func _enter_bonk() -> void:
_bonk_cancel_velocity = velocity * Vector2(-1.0, 1.0) # horizontally inverted velocity
velocity = Vector2.ZERO
func _cancel_bonk() -> void:
velocity = _bonk_cancel_velocity
func _apply_bonk() -> void:
velocity.x = signf(_bonk_cancel_velocity.x) * bonk_power
#endregion
#region Falling
func _apply_gravity(delta: float) -> void:
if input_dir.y > 0.0: