Should something like this work? I've seen this done in something, but I can't get it to work.
func player_in_FOV():
var enemy_direction = Vector2(0, 1).rotated(global_rotation)
var direction_to_player = (get_node("../Player").position - global_position).normalized()
if abs(direction_to_player.angle_to(enemy_direction)) < deg2rad(FOV_TOLERANCE):
return true
else:
return false
func check_sight():
var space = get_world_2d().direct_space_state
var LOS_obstacle = space.intersect_ray(global_position,get_node("../Player").global_position, [self], collision_mask)
if not LOS_obstacle:
return false
var distance_to_player = get_node("../Player").global_position.distance_to(global_position)
var player_in_range = distance_to_player < MAX_DETECTION
if LOS_obstacle.collider == target && player_in_range:
print("seen")
return true
else:
return false