2026-03-22 16:32:18 +08:00
|
|
|
extends EntityBase
|
|
|
|
|
class_name Kernyr
|
|
|
|
|
|
2026-03-26 22:39:12 +08:00
|
|
|
var attack1Angle = 0
|
|
|
|
|
var attack0State = 0
|
2026-03-28 10:30:23 +08:00
|
|
|
var attack2Start = 0
|
2026-03-26 22:39:12 +08:00
|
|
|
|
2026-03-22 16:32:18 +08:00
|
|
|
func register():
|
|
|
|
|
fields[FieldStore.Entity.MAX_HEALTH] = 2000
|
|
|
|
|
fields[FieldStore.Entity.OFFSET_SHOOT] = 20
|
2026-03-28 08:29:22 +08:00
|
|
|
attackCooldownMap[0] = 2000
|
2026-03-26 22:39:12 +08:00
|
|
|
attackCooldownMap[1] = 100
|
2026-03-28 08:29:22 +08:00
|
|
|
attackCooldownMap[2] = 10000
|
2026-04-04 21:07:16 +08:00
|
|
|
attackCooldownMap[3] = 4500
|
2026-03-28 08:29:22 +08:00
|
|
|
attackMutexes = [2]
|
2026-03-22 16:32:18 +08:00
|
|
|
func ai():
|
2026-03-28 08:29:22 +08:00
|
|
|
for i in 3:
|
2026-03-28 10:30:23 +08:00
|
|
|
tryAttack(i, [2])
|
2026-04-04 21:07:16 +08:00
|
|
|
# tryAttack(3)
|
2026-03-22 16:32:18 +08:00
|
|
|
func attack(type: int):
|
|
|
|
|
if type == 0:
|
2026-03-28 08:29:22 +08:00
|
|
|
for i in randi_range(7, 16):
|
|
|
|
|
BulletBase.generate(ComponentManager.getBullet("Diamond"), self , position + MathTool.sampleInCircle(20), rotation + deg_to_rad(randf_range(-90, 90)))
|
2026-03-26 22:39:12 +08:00
|
|
|
var states = [
|
|
|
|
|
Vector2(-1, 1),
|
|
|
|
|
Vector2(1, 1),
|
|
|
|
|
Vector2(1, -1),
|
|
|
|
|
Vector2(-1, -1)
|
|
|
|
|
]
|
|
|
|
|
await sprintTo(currentFocusedBoss.position + 400 * states[attack0State % len(states)], 0.1)
|
|
|
|
|
attack0State += 1
|
|
|
|
|
BulletBase.generate(ComponentManager.getBullet("HeavyCrystal"), self , findWeaponAnchor("normal"), position.angle_to_point(currentFocusedBoss.position))
|
|
|
|
|
elif type == 1:
|
|
|
|
|
BulletBase.generate(
|
2026-03-22 16:32:18 +08:00
|
|
|
ComponentManager.getBullet("Yangyi"),
|
|
|
|
|
self ,
|
|
|
|
|
position,
|
2026-03-26 22:39:12 +08:00
|
|
|
attack1Angle
|
|
|
|
|
)
|
|
|
|
|
attack1Angle += deg_to_rad(360.0 / 20)
|
|
|
|
|
elif type == 2:
|
2026-03-28 08:29:22 +08:00
|
|
|
var anchor = currentFocusedBoss.position
|
|
|
|
|
var radius = 600
|
|
|
|
|
var count = 10.0
|
2026-03-28 10:30:23 +08:00
|
|
|
var i = 0
|
|
|
|
|
var currentAngle = 0
|
|
|
|
|
var time = 500.0
|
|
|
|
|
await sprintTo(anchor + Vector2(0, -radius), 0.1)
|
|
|
|
|
attack2Start = timeLived()
|
|
|
|
|
while timeLived() - attack2Start <= time:
|
|
|
|
|
var targetAngle = deg_to_rad(i / count * 360.0 - 90)
|
|
|
|
|
currentAngle = deg_to_rad((timeLived() - attack2Start) / time * 360.0 - 90)
|
|
|
|
|
position = anchor + Vector2.from_angle(currentAngle) * radius
|
|
|
|
|
if currentAngle >= targetAngle:
|
|
|
|
|
i += 1
|
|
|
|
|
for bullet in BulletBase.generate(
|
|
|
|
|
ComponentManager.getBullet("Egg"),
|
|
|
|
|
self ,
|
|
|
|
|
position,
|
|
|
|
|
0
|
|
|
|
|
):
|
|
|
|
|
if bullet is EggBullet:
|
|
|
|
|
bullet.look_at(anchor)
|
|
|
|
|
await TickTool.frame()
|
2026-03-28 09:04:38 +08:00
|
|
|
await TickTool.millseconds(2000)
|
|
|
|
|
await chargeUp()
|
2026-04-04 21:07:16 +08:00
|
|
|
elif type == 3:
|
|
|
|
|
BulletBase.generate(ComponentManager.getBullet("Bengbeng"), self , position, 0)
|