extends EntityBase class_name EnergyBlockEntity var currentBroom: BroomBullet func register(): fields[FieldStore.Entity.MAX_HEALTH] = 3000 attackCooldownMap[0] = 6000 attackCooldownMap[1] = 3000 attackCooldownMap[2] = 8000 attackCooldownMap[3] = 8000 attackCooldownMap[4] = 2000 attackCooldownMap[5] = 2000 attackCooldownMap[6] = 5000 attackMutexes = [0, 1] sprintMultiplier = 30 func ai(): PresetEntityAI.distanceAttack(self , currentFocusedBoss, 0, 300, 0) for i in 6: tryAttack(i + 1, [3]) if 1 not in attackingStates: PresetEntityAI.follow(self , currentFocusedBoss) 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: await TickTool.frame() bullet.animator.play("rotate") 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)