You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
my-bricks/scripts/power_up.gd

53 lines
1.4 KiB

extends Area2D
## 道具:Area2D 每帧下落,被挡板接到时发 collected 信号。
## 效果由 main.gd 调度(目前只做"加宽挡板")。
signal collected(kind: String)
enum Kind { WIDE_PADDLE, MULTI_BALL, SLOW_BALL, EXTRA_LIFE }
@export var kind: Kind = Kind.WIDE_PADDLE
@export var fall_speed: float = 150.0
@export var kind_color: Dictionary = {
Kind.WIDE_PADDLE: Color(0.3, 0.9, 0.4),
Kind.MULTI_BALL: Color(0.9, 0.9, 0.3),
Kind.SLOW_BALL: Color(0.4, 0.7, 1.0),
Kind.EXTRA_LIFE: Color(1.0, 0.4, 0.7),
}
@onready var visual: ColorRect = $Visual
@onready var label: Label = $Visual/Label
func _ready() -> void:
# 颜色按类型
if kind_color.has(kind):
visual.color = kind_color[kind]
# 字母标签:W / M / S / L
label.text = _label_for(kind)
func _physics_process(_delta: float) -> void:
position.y += fall_speed * _delta
# 掉到底就消失
if position.y > 730:
queue_free()
func _on_body_entered(body: Node) -> void:
if body.is_in_group("paddle"):
collected.emit(_kind_name())
queue_free()
func _kind_name() -> String:
match kind:
Kind.WIDE_PADDLE: return "wide_paddle"
Kind.MULTI_BALL: return "multi_ball"
Kind.SLOW_BALL: return "slow_ball"
Kind.EXTRA_LIFE: return "extra_life"
return "unknown"
func _label_for(k: Kind) -> String:
match k:
Kind.WIDE_PADDLE: return "W"
Kind.MULTI_BALL: return "M"
Kind.SLOW_BALL: return "S"
Kind.EXTRA_LIFE: return "L"
return "?"