2025-09-20 22:17:09 +08:00
|
|
|
extends BulletBase
|
|
|
|
|
class_name NuclearBomb
|
|
|
|
|
|
|
|
|
|
@onready var label: Label = $"%label"
|
|
|
|
|
@onready var anchor: Node2D = $"%anchor"
|
2025-09-21 07:38:09 +08:00
|
|
|
@onready var warn: ShaderStage = $"%warn"
|
2025-09-24 22:08:01 +08:00
|
|
|
@onready var warnbg: ShaderStage = $"%warnbg"
|
2025-09-20 22:17:09 +08:00
|
|
|
|
|
|
|
|
var countdown = 10000
|
|
|
|
|
var radius = 500
|
|
|
|
|
|
|
|
|
|
func spawn():
|
|
|
|
|
hitbox.disabled = true
|
|
|
|
|
hitbox.shape.radius = radius
|
2025-09-24 22:08:01 +08:00
|
|
|
warnbg.size = Vector2.ONE * 2 * radius
|
2025-09-20 22:17:09 +08:00
|
|
|
anchor.global_rotation = 0
|
|
|
|
|
func ai():
|
|
|
|
|
speed *= 0.99
|
|
|
|
|
PresetBulletAI.forward(self, rotation)
|
|
|
|
|
if timeLived() > countdown:
|
|
|
|
|
tryDestroy()
|
2025-09-21 07:38:09 +08:00
|
|
|
else:
|
|
|
|
|
warn.size = Vector2.ONE * 2 * radius * (timeLived() / countdown)
|
|
|
|
|
label.text = "NUCLEAR WARNING %.1f" % ((countdown - timeLived()) / 1000)
|
2025-09-20 22:17:09 +08:00
|
|
|
func destroy(_b):
|
2025-09-21 13:11:31 +08:00
|
|
|
EffectController.create(ComponentManager.getEffect("NuclearExplosion"), global_position).shot()
|
2025-09-20 22:17:09 +08:00
|
|
|
hitbox.disabled = false
|
2025-09-24 22:08:01 +08:00
|
|
|
CameraManager.shake(5000, 300, func(_c, t, r): return t * r) # 震屏强度随进度递减
|
2025-09-20 22:17:09 +08:00
|
|
|
await TickTool.frame(5)
|