mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-27 22:41:56 +08:00
63 lines
2.6 KiB
GDScript
63 lines
2.6 KiB
GDScript
extends EntityBase
|
|
class_name EnergyBlockEntity
|
|
|
|
var currentBroom: BroomBullet
|
|
|
|
func register():
|
|
fields[FieldStore.Entity.MAX_HEALTH] = 1500
|
|
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.7
|
|
attackCooldownMap[0] = 6000
|
|
attackCooldownMap[1] = 3000
|
|
attackCooldownMap[2] = 8000
|
|
attackCooldownMap[3] = 8000
|
|
attackCooldownMap[4] = 2000
|
|
attackCooldownMap[5] = 2000
|
|
attackCooldownMap[6] = 5000
|
|
attackMutexes = [0, 1, 3]
|
|
sprintMultiplier = 30
|
|
func ai():
|
|
PresetEntityAI.distanceAttack(self , currentFocusedBoss, 0, 300, 0)
|
|
PresetEntityAI.distanceAttack(self , currentFocusedBoss, 500, 1000, 1)
|
|
for i in 5:
|
|
tryAttack(i + 2, [3, 4])
|
|
if 1 not in attackingStates:
|
|
PresetEntityAI.follow(self , currentFocusedBoss, 200)
|
|
func attack(type: int):
|
|
if type == 0:
|
|
for bullet in BulletBase.generate(ComponentManager.getBullet("SwingSword"), self , getTrackingAnchor(), getTrackingAnchor().angle_to_point(currentFocusedPosition)):
|
|
if bullet is SwingSwordBullet:
|
|
await bullet.destroied
|
|
elif type == 1:
|
|
for bullet in BulletBase.generate(ComponentManager.getBullet("Broom"), self , getTrackingAnchor(), getTrackingAnchor().angle_to_point(currentFocusedPosition)):
|
|
if is_instance_valid(currentBroom): break
|
|
if bullet is BroomBullet:
|
|
currentBroom = bullet
|
|
await TickTool.frame()
|
|
bullet.animator.play("prepare")
|
|
await bullet.animator.animation_finished
|
|
await chargeUp()
|
|
trySprint()
|
|
currentBroom.animator.play("attack")
|
|
elif type == 2:
|
|
for i in 3:
|
|
for bullet in BulletBase.generate(ComponentManager.getBullet("BroomGun"), self , position, position.angle_to_point(currentFocusedPosition)):
|
|
if bullet is BulletBase:
|
|
bullet.position += Vector2.from_angle(bullet.rotation).rotated(deg_to_rad(90)) * i * 100
|
|
elif type == 3:
|
|
for bullet in BulletBase.generate(ComponentManager.getBullet("Broom"), self , getTrackingAnchor(), 0):
|
|
if bullet is BroomBullet:
|
|
fields[FieldStore.Entity.MOVEMENT_SPEED] *= 3
|
|
await TickTool.frame()
|
|
bullet.animator.play("rotate")
|
|
await bullet.destroied
|
|
fields[FieldStore.Entity.MOVEMENT_SPEED] /= 3
|
|
elif type == 4:
|
|
BulletBase.generate(ComponentManager.getBullet("BroomBoomerang"), self , position, position.angle_to_point(currentFocusedPosition))
|
|
elif type == 5:
|
|
var track = getTrackingAnchor()
|
|
var bullet = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , 200)
|
|
if is_instance_valid(bullet):
|
|
BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(bullet.position))
|
|
func sprint():
|
|
move((currentFocusedPosition - position).normalized() * sprintMultiplier, true)
|