feat: 1. 添加charge冲锋敌人动画和攻击脚本

2. 添加shoot射击敌人攻击脚本
This commit is contained in:
luke358
2026-05-20 15:18:25 +08:00
parent c4880f353c
commit 5cdcf705f4
10 changed files with 513 additions and 13 deletions
+54
View File
@@ -0,0 +1,54 @@
extends Node2D
class_name ShootingBehavior
@export var enemy: Enemy
@export var fire_pos: Marker2D
@export var cooldown := 3.0
@export var projectile_count := 3
@export var arc_angle := 45.0
@export var projectile_scene: PackedScene
@export var projectile_speed := 1800.0
var current_cooldown := 0.0
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
current_cooldown = cooldown
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if enemy == null:
return
if current_cooldown > 0:
current_cooldown -= delta
else:
shoot()
current_cooldown = cooldown
func shoot() -> void:
if not is_instance_valid(Global.player):
return
enemy.can_move = false
var direction := enemy.global_position.direction_to(Global.player.global_position)
var start_angle := -arc_angle / 2.0
var angle_step := arc_angle / float(projectile_count - 1 if projectile_count > 1 else 0.0)
for i in range(projectile_count):
var projectile := projectile_scene.instantiate() as Projectile
get_tree().root.add_child(projectile)
projectile.global_position = fire_pos.global_position
var rotate_direction := direction.rotated(deg_to_rad(start_angle + angle_step * i))
var velocity := rotate_direction * projectile_speed
projectile.set_projectile(velocity, enemy.stats.damage, false, 0, enemy)
await get_tree().create_timer(1).timeout
enemy.can_move = true