2025-11-16 17:22:40 +08:00
|
|
|
extends BulletBase
|
|
|
|
|
class_name Arrow
|
|
|
|
|
|
2025-11-18 22:19:56 +08:00
|
|
|
@onready var trail: GPUParticles2D = $%trail
|
|
|
|
|
|
2025-11-16 17:22:40 +08:00
|
|
|
var atk: float = 0
|
2025-11-18 22:19:56 +08:00
|
|
|
var waitTime: float = 0
|
2025-11-30 14:26:48 +08:00
|
|
|
var offsetRotation: float = 0
|
2026-05-10 16:34:45 +08:00
|
|
|
var lifesteal: float = 0
|
2025-11-16 17:22:40 +08:00
|
|
|
|
2025-11-18 22:19:56 +08:00
|
|
|
func register():
|
|
|
|
|
trail.emitting = false
|
|
|
|
|
hitbox.disabled = true
|
2025-11-16 17:22:40 +08:00
|
|
|
func ai():
|
2025-11-18 22:19:56 +08:00
|
|
|
if timeLived() < waitTime:
|
2026-04-25 13:28:43 +08:00
|
|
|
PresetBulletAI.lockLauncher(self , launcher, true)
|
|
|
|
|
rotation = position.angle_to_point(launcher.currentFocusedPosition) + offsetRotation
|
2025-11-18 22:19:56 +08:00
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
trail.emitting = true
|
|
|
|
|
hitbox.disabled = false
|
2026-01-31 13:21:49 +08:00
|
|
|
speed = (1 - lifeTimePercent()) * initialSpeed
|
2025-11-22 08:42:51 +08:00
|
|
|
baseDamage = speed * atk
|
2026-04-25 13:28:43 +08:00
|
|
|
PresetBulletAI.forward(self , rotation)
|
2025-11-16 17:22:40 +08:00
|
|
|
if speed < 1:
|
|
|
|
|
tryDestroy()
|
2026-05-10 15:31:40 +08:00
|
|
|
func succeedToHit(_dmg: float, entity: EntityBase):
|
2025-11-20 22:18:17 +08:00
|
|
|
var effect = EffectController.create(ComponentManager.getEffect("ShootBlood"), position)
|
|
|
|
|
effect.shot()
|
2026-05-10 15:31:40 +08:00
|
|
|
entity.heal(lifesteal)
|