extends CharacterState class_name EnemyState @export var turret_speed : float = 6.0 func enemy_has_target(): if character.player_last_seen != null: return true if character.point_of_interest != null: return true return false func attack_on_sight(): if can_see: if character.is_player_in_area() and character.is_player_visible(): character.cache_player_pos() Transitioned.emit(self,"attack") if character.turret_look.is_colliding(): if character.turret_look.get_collider() is Player: character.cache_player_pos() Transitioned.emit(self,"attack") func turret_look2D(delta): character.turret_look.global_rotation.y = rotate_to_face2D(character.turret_look,look_target,0,delta,turret_speed) func turret_scan(target_offset : Vector3,delta): rotate_to_face3D(character.turret_look,look_target,target_offset,delta,turret_speed) func turret_look3D(delta): rotate_to_face3D(character.turret_look,look_target,Vector3.ZERO,delta,turret_speed) func turret_scan_look(target,scan_direction,delta): character.turret_look.global_rotation.y = rotate_to_face2D(character.turret_look,target,scan_direction,delta,turret_speed) func investigate_points_of_interest(point,loudness,max_distance): if poi_investigate: var distance_to_point = character.global_position.distance_to(point) if distance_to_point <= max_distance: var perceived_loudness = 1/distance_to_point * loudness var add_point = {"point" : point, "loudness" : perceived_loudness} character.points_of_interest.append(add_point) if poi_change_to_search: Transitioned.emit(self,"search") if poi_update_waypoint_immediately: get_new_point_of_interest() func has_points_to_investigate(): if character.player_last_seen != null: return true elif character.points_of_interest.size() > 0: return true else: return false func get_new_point_of_interest(): if character.player_last_seen != null: move_target = character.player_last_seen character.player_last_seen = null character.nav_agent.set_target_position(move_target) elif character.points_of_interest.size() > 0: var point_of_interest = character.points_of_interest.pop_back() move_target = point_of_interest["point"] character.nav_agent.set_target_position(move_target) func clear_points_of_interest(): character.points_of_interest = []