feat: 1. 添加武器击退功能,player 使用weapon_behavior/melee_behavior(hitbox 会调用 setup 初始化) 的 hitbox 击中 enemy_slow,enemy_slow拿到hitbox的knockback_power,以及hitbox指向enemy的方向,然后朝着该方向,使用power击退:调用enemy.gd 的 apply_knockback,然后_process中会对position修改,同时开启定时器,定时器结束的时候,使用 reset_knockback 重置
This commit is contained in:
@@ -4,9 +4,12 @@ class_name Enemy
|
||||
@export var flock_push := 20.0
|
||||
|
||||
@onready var vision_area: Area2D = $VisionArea
|
||||
@onready var knockback_timer: Timer = $KnockbackTimer
|
||||
|
||||
var can_move := true
|
||||
|
||||
var knockback_dir: Vector2
|
||||
var knockback_power: float
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
@@ -21,8 +24,7 @@ func _process(delta: float) -> void:
|
||||
if not can_move_forwards_player():
|
||||
return
|
||||
|
||||
position += get_move_direction() * stats.speed * delta
|
||||
|
||||
position += (get_move_direction() + knockback_dir * knockback_power) * stats.speed * delta
|
||||
update_rotate()
|
||||
|
||||
|
||||
@@ -53,5 +55,33 @@ func can_move_forwards_player() -> bool:
|
||||
return is_instance_valid(Global.player) and\
|
||||
global_position.distance_to(Global.player.position) > 60
|
||||
|
||||
func apply_knockback(knock_dir: Vector2, knock_power: float) -> void:
|
||||
knockback_dir = knock_dir
|
||||
knockback_power = knock_power
|
||||
if knockback_timer.time_left > 0:
|
||||
knockback_timer.stop()
|
||||
reset_knockback()
|
||||
|
||||
knockback_timer.start()
|
||||
|
||||
func reset_knockback() -> void:
|
||||
knockback_dir = Vector2.ZERO
|
||||
knockback_power = 0
|
||||
|
||||
|
||||
func _on_knockback_timer_timeout() -> void:
|
||||
reset_knockback()
|
||||
|
||||
func _on_hurtbox_component_on_damaged(hitbox: HitboxComponent) -> void:
|
||||
super._on_hurtbox_component_on_damaged(hitbox)
|
||||
|
||||
if hitbox.knockback_power > 0:
|
||||
var dir := hitbox.source.global_position.direction_to(global_position)
|
||||
apply_knockback(dir, hitbox.knockback_power)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -63,3 +63,9 @@ offset_top = -95.0
|
||||
offset_bottom = -75.0
|
||||
back_color = Color(0.015686275, 0.05490196, 0.16862746, 1)
|
||||
fill_color = Color(0.37254903, 0.5372549, 0.75686276, 1)
|
||||
|
||||
[node name="KnockbackTimer" type="Timer" parent="." index="9" unique_id=1031574323]
|
||||
wait_time = 0.4
|
||||
one_shot = true
|
||||
|
||||
[connection signal="timeout" from="KnockbackTimer" to="." method="_on_knockback_timer_timeout"]
|
||||
|
||||
@@ -27,6 +27,8 @@ func _on_hurtbox_component_on_damaged(hitbox: HitboxComponent) -> void:
|
||||
Global.on_create_block_text.emit(self)
|
||||
return
|
||||
|
||||
|
||||
|
||||
set_flash_material()
|
||||
health_component.take_damage(hitbox.damage)
|
||||
Global.on_create_damage_text.emit(self, hitbox)
|
||||
|
||||
Reference in New Issue
Block a user