extends EntityBase class_name MTY var MIN_PARRY_DISTANCE = 300 var MIN_ATTACK_DISTANCE = 400 func register(): fields[FieldStore.Entity.MAX_HEALTH] = 400 fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.7 attackCooldownMap[0] = 4000 attackCooldownMap[1] = 3000 attackCooldownMap[2] = 500 sprintMultiplier = 5 func spawn(): texture.play("walk") func ai(): PresetEntityAI.follow(self , currentFocusedBoss) for i in 3: if i == 1: var track = getTrackingAnchor() if is_instance_valid(BulletTool.findClosetBulletCanDamage(track, get_tree(), self , MIN_PARRY_DISTANCE)): tryAttack(1) else: tryAttack(i) func attack(type: int): if type == 0: trySprint() elif type == 1: var track = getTrackingAnchor() var bullet = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , MIN_PARRY_DISTANCE) if is_instance_valid(bullet): BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(bullet.position)) elif type == 2: if is_instance_valid(currentFocusedBoss): var track = getTrackingAnchor() if currentFocusedBoss.position.distance_to(track) <= MIN_ATTACK_DISTANCE: BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(currentFocusedBoss.position)) return true func sprint(): var track = getTrackingAnchor() var target = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , MIN_PARRY_DISTANCE) if is_instance_valid(target): var dir = (target.position - track).rotated(MathTool.randomChoiceFrom([-1, 1]) * deg_to_rad(90)) move(dir.normalized() * sprintMultiplier, true)