2025-12-13 07:55:02 +08:00
|
|
|
extends BulletBase
|
|
|
|
|
class_name BlueCrystalBullet
|
|
|
|
|
|
|
|
|
|
var tracer: EntityBase = null
|
2026-05-10 15:17:57 +08:00
|
|
|
var canTrace: bool = true
|
|
|
|
|
var speedBoost: float = 0
|
|
|
|
|
var splitRate: float = 0
|
|
|
|
|
|
2025-12-13 07:55:02 +08:00
|
|
|
@onready var trail: GPUParticles2D = $%trail
|
|
|
|
|
|
|
|
|
|
func ai():
|
|
|
|
|
if is_instance_valid(tracer):
|
|
|
|
|
var tracker = tracer.getTrackingAnchor()
|
|
|
|
|
var targetAngle = position.angle_to_point(tracker)
|
2025-12-14 13:36:48 +08:00
|
|
|
trail.rotation = - Vector2.from_angle(rotation).angle_to(Vector2.from_angle(targetAngle)) / (speed / initialSpeed)
|
2026-05-10 15:17:57 +08:00
|
|
|
if canTrace:
|
|
|
|
|
PresetBulletAI.trace(self , tracker, 0.07)
|
2025-12-13 07:55:02 +08:00
|
|
|
else:
|
|
|
|
|
trail.rotation = 0
|
2026-05-10 15:17:57 +08:00
|
|
|
speed += 0.1 * (1 + speedBoost)
|
|
|
|
|
PresetBulletAI.forward(self , rotation)
|
2025-12-14 14:18:30 +08:00
|
|
|
func destroy(_beacuseMap: bool):
|
|
|
|
|
var eff = EffectController.create(ComponentManager.getEffect("BlueCrystalExplosion"), global_position)
|
|
|
|
|
eff.rotation = rotation
|
|
|
|
|
eff.shot()
|
2026-05-10 15:17:57 +08:00
|
|
|
func succeedToHit(_dmg: float, entity: EntityBase):
|
|
|
|
|
if entity == tracer:
|
|
|
|
|
canTrace = false
|
|
|
|
|
if MathTool.rate(splitRate):
|
|
|
|
|
for diamond in BulletBase.generate(ComponentManager.getBullet("Diamond2"), entity, position, deg_to_rad(randf_range(0, 360))):
|
|
|
|
|
if diamond is Diamond2Bullet:
|
|
|
|
|
diamond.baseDamage = baseDamage * 0.8
|
|
|
|
|
diamond.parent = self
|
|
|
|
|
diamond.penerate += penerate
|