add shaking when hitting projectile
This commit is contained in:
@@ -4,6 +4,7 @@ extends Camera3D
|
||||
@export_group("Positioning")
|
||||
@export var _height_offset: float = 0.5
|
||||
@export var _distance: float = 50
|
||||
@export var _fov: float = 25
|
||||
@export var _angle_degrees: Vector3 = Vector3(-35, -45, 0)
|
||||
@export var _aim_offset_factor_mouse: float = 0.2
|
||||
@export var _aim_offset_factor_controller: float = 0.5
|
||||
@@ -15,8 +16,14 @@ extends Camera3D
|
||||
@export var _damage_shake_amplitude: float = 0.02
|
||||
@export var _damage_shake_frequency: float = 50
|
||||
|
||||
@export_group("Hit shake")
|
||||
@export var _hit_shake_fov: float = 0.5
|
||||
@export var _hit_shake_duration: float = 0.5
|
||||
@export_exp_easing var _hit_shake_ease: float = 2
|
||||
|
||||
var _player_offsets: Dictionary[int, PlayerOffset]
|
||||
var _damage_shake_time: float = 0
|
||||
var _hit_shake_time: float = 0
|
||||
|
||||
@onready var _listener := $AudioListener3D as AudioListener3D
|
||||
|
||||
@@ -30,7 +37,9 @@ func _ready() -> void:
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
global_rotation_degrees = _angle_degrees
|
||||
fov = _fov
|
||||
_damage_shake(delta)
|
||||
_hit_shake(delta)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
@@ -46,6 +55,7 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
func _connect_player_signals(player: Player) -> void:
|
||||
player.stats.damaged.connect(_on_player_stats_damaged)
|
||||
player.attack.did_hit.connect(_on_player_attack_did_hit)
|
||||
|
||||
|
||||
func _follow(player: Player, delta: float) -> Vector3:
|
||||
@@ -105,10 +115,24 @@ func _damage_shake(delta: float) -> void:
|
||||
)
|
||||
|
||||
|
||||
func _hit_shake(delta: float) -> void:
|
||||
if _hit_shake_time <= 0:
|
||||
return
|
||||
|
||||
_hit_shake_time -= delta
|
||||
fov += (
|
||||
_hit_shake_fov * ease(_hit_shake_time / _hit_shake_duration, _hit_shake_ease)
|
||||
)
|
||||
|
||||
|
||||
func _on_player_stats_damaged() -> void:
|
||||
_damage_shake_time = _damage_shake_duration
|
||||
|
||||
|
||||
func _on_player_attack_did_hit() -> void:
|
||||
_hit_shake_time = _hit_shake_duration
|
||||
|
||||
|
||||
class PlayerOffset:
|
||||
var floor_height: float = 0
|
||||
var aim_offset: Vector3 = Vector3.ZERO
|
||||
|
||||
@@ -2,6 +2,7 @@ class_name PlayerAttack
|
||||
extends Area3D
|
||||
|
||||
signal attacked
|
||||
signal did_hit
|
||||
|
||||
enum Side { RIGHT, LEFT }
|
||||
|
||||
@@ -149,3 +150,4 @@ func _on_area_entered(node: Node3D) -> void:
|
||||
|
||||
if node is Projectile:
|
||||
_hit_projectile(node as Projectile)
|
||||
did_hit.emit()
|
||||
|
||||
Reference in New Issue
Block a user