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)