Files
hello-godot/scripts/enemy_small.gd
T

72 lines
1.6 KiB
GDScript

class_name EnemySmall
extends EnemyBase
## 小型敌机:直线下压 + 可选横向摆动,部分会朝正下方开火。
const TEX := preload("res://assets/svg/enemy_small.svg")
var base_x := 270.0
var vy := 150.0
var sway_amp := 0.0
var sway_freq := 2.0
var phase := 0.0
var shoot := false
var bullet_speed := 250.0
var _t := 0.0
var _shoot_timer := 0.0
func setup(
p_base_x: float,
p_y: float,
p_vy: float,
p_sway_amp := 0.0,
p_sway_freq := 2.0,
p_phase := 0.0,
p_shoot := false,
p_bullet_speed := 250.0
) -> void:
base_x = p_base_x
position = Vector2(p_base_x, p_y)
vy = p_vy
sway_amp = p_sway_amp
sway_freq = p_sway_freq
phase = p_phase
shoot = p_shoot
bullet_speed = p_bullet_speed
func _ready() -> void:
collision_layer = 4
collision_mask = 0
hp = 1
score_value = 100
hit_radius = 14.0
var sprite := Sprite2D.new()
sprite.texture = TEX
# 掉落道具的敌机染成红色涂装(1942 惯例:红机掉宝)
if drops_powerup:
sprite.modulate = Color(1.0, 0.5, 0.4)
add_child(sprite)
var shape := CollisionShape2D.new()
var capsule := CapsuleShape2D.new()
capsule.radius = 12.0
capsule.height = 34.0
shape.shape = capsule
add_child(shape)
_shoot_timer = randf_range(1.2, 2.4)
func _process(delta: float) -> void:
_t += delta
position.y += vy * delta
position.x = base_x + sin(_t * sway_freq + phase) * sway_amp
if position.y > 1010.0 or position.x < -50.0 or position.x > 590.0:
queue_free()
return
if shoot and position.y > 90.0 and position.y < 640.0:
_shoot_timer -= delta
if _shoot_timer <= 0.0:
_shoot_timer = randf_range(1.8, 3.0)
_fire_bullet(Vector2(0.0, bullet_speed))