3c6f31b503
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
72 lines
1.6 KiB
GDScript
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))
|