# placerholder test ability class_name AbilityPlayer extends AbilityBase var middleX var playerPos func _ready() -> void: middleX = get_viewport_rect().size.x/2 func _process(_delta: float) -> void: playerPos = Vector2(middleX, get_viewport_rect().size.y*(0.75)) $IdleCooldown.wait_time = attack_speed func _get_enemies() -> Array: var enemies := get_tree().get_nodes_in_group("enemies") return enemies func _get_num_enemies() -> int: var enemies := get_tree().get_nodes_in_group("enemies") return enemies.size() func _get_distsq_to_player(enemy: Node) -> float: return enemy.position.distance_squared_to(playerPos) func _get_angle_to_player(enemy: Node) -> float: return enemy.position.angle_to_point(playerPos) func _get_target(enemies) -> Node: # var numEnemies := _get_num_enemies() # TODO implement range, i.e. closest within range var enemyDists var closestEnemy # get list of distances by mapping distance to each node in enemies enemyDists = enemies.map(_get_distsq_to_player) # get closest enemy by finding first index with min dist closestEnemy = enemies[enemyDists.find(enemyDists.min())] return closestEnemy func _deal_idle_damage(enemiesList) -> void: var target = _get_target(enemiesList) if self.visible: target.damageTaken += attack_damage func _on_idle_cooldown_timeout() -> void: var enemiesList = _get_enemies() if not enemiesList.is_empty(): _deal_idle_damage(enemiesList)