feat: 场景与核心玩法脚本(双机型/波次/Boss/道具/炸弹/地面单位/浮游炮激光)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user