Files
romants/entities/ants/enemy_ant.gd
2024-10-07 02:28:14 +02:00

44 lines
1.8 KiB
GDScript

class_name EnemyAnt extends Ant
var ant_target:Ant
var building_target:Building
func _process(delta: float) -> void:
var value := $enemy/AnimationTree.get("parameters/Walk/blend_position") as float
var speed_anim := lerpf(value, velocity.length()/speed, delta*5)
$enemy/AnimationTree.set("parameters/Walk/blend_position", speed_anim)
func _exit_tree() -> void:
Game.instance.score += 1
func search_target()->void:
var player_ants := Player.instance.get_node("Ants").get_children()
ant_target = player_ants.reduce(
func(closest_ant:Ant,new_ant:Ant)->Ant:
var closest_dist := closest_ant.global_position.distance_squared_to(global_position)
var new_dist := new_ant.global_position.distance_squared_to(global_position)
return new_ant if new_dist<closest_dist else closest_ant
) as Ant
if ant_target == null:
var player_buildings := Player.instance.get_node("Buildings").get_children()
building_target = player_buildings.reduce(
func(closest_building:Building,new_building:Building)->Building:
var closest_dist := closest_building.global_position.distance_squared_to(global_position)
var new_dist := new_building.global_position.distance_squared_to(global_position)
return new_building if new_dist<closest_dist else closest_building
) as Building
func _on_enemy_tracker_timer_timeout() -> void:
if (ant_target==null and building_target==null) or randi_range(0,10) == 0:
search_target()
if ant_target!=null: go_to(ant_target.global_position)
if building_target!=null: go_to(building_target.global_position)
func _on_attackzone_attack() -> void:
if ant_target!=null: look_at(ant_target.global_position)
if building_target!=null: look_at(building_target.global_position)
var state_machine := $enemy/AnimationTree.get("parameters/playback") as AnimationNodeStateMachinePlayback
state_machine.travel("Attack")