use crate::{arc, define_cls, define_obj_type, ns, objc, simd};
#[doc(alias = "ARRaycastTarget")]
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[repr(isize)]
pub enum Target {
ExistingPlaneGeometry,
ExistingPlaneInfinite,
EstimatedPlane,
}
#[doc(alias = "ARRaycastTargetAlignment")]
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[repr(isize)]
pub enum TargetAlignment {
Horizontal,
Vertical,
Any,
}
define_obj_type!(
#[doc(alias = "ARRaycastQuery")]
pub RaycastQuery(ns::Id)
);
impl arc::A<RaycastQuery> {
#[objc::msg_send(initWithOrigin:direction:allowingTarget:alignment:)]
pub fn init_with_origin_direction_allowing_target_alignment(
self,
origin: simd::f32x3,
direction: simd::f32x3,
target: Target,
alignment: TargetAlignment,
) -> arc::R<RaycastQuery>;
}
impl RaycastQuery {
define_cls!(AR_RAYCAST_QUERY);
#[inline]
pub fn with_origin_direction_target_alignment(
origin: simd::f32x3,
direction: simd::f32x3,
target: Target,
alignment: TargetAlignment,
) -> arc::R<Self> {
Self::alloc().init_with_origin_direction_allowing_target_alignment(
origin, direction, target, alignment,
)
}
#[objc::msg_send(origin)]
pub fn origin(&self) -> simd::f32x3;
#[objc::msg_send(direction)]
pub fn direction(&self) -> simd::f32x3;
#[objc::msg_send(target)]
pub fn target(&self) -> Target;
#[objc::msg_send(targetAlignment)]
pub fn target_alignment(&self) -> TargetAlignment;
}
unsafe extern "C" {
static AR_RAYCAST_QUERY: &'static objc::Class<RaycastQuery>;
}