use core::ffi::*;
use core::ptr::NonNull;
use objc2::__framework_prelude::*;
use crate::*;
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct GCAcceleration {
pub x: c_double,
pub y: c_double,
pub z: c_double,
}
unsafe impl Encode for GCAcceleration {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<c_double>::ENCODING,
<c_double>::ENCODING,
<c_double>::ENCODING,
],
);
}
unsafe impl RefEncode for GCAcceleration {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct GCRotationRate {
pub x: c_double,
pub y: c_double,
pub z: c_double,
}
unsafe impl Encode for GCRotationRate {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<c_double>::ENCODING,
<c_double>::ENCODING,
<c_double>::ENCODING,
],
);
}
unsafe impl RefEncode for GCRotationRate {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct GCEulerAngles {
pub pitch: c_double,
pub yaw: c_double,
pub roll: c_double,
}
unsafe impl Encode for GCEulerAngles {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<c_double>::ENCODING,
<c_double>::ENCODING,
<c_double>::ENCODING,
],
);
}
unsafe impl RefEncode for GCEulerAngles {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct GCQuaternion {
pub x: c_double,
pub y: c_double,
pub z: c_double,
pub w: c_double,
}
unsafe impl Encode for GCQuaternion {
const ENCODING: Encoding = Encoding::Struct(
"GCQuaternion",
&[
<c_double>::ENCODING,
<c_double>::ENCODING,
<c_double>::ENCODING,
<c_double>::ENCODING,
],
);
}
unsafe impl RefEncode for GCQuaternion {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "block2")]
pub type GCMotionValueChangedHandler = *mut block2::DynBlock<dyn Fn(NonNull<GCMotion>)>;
extern_class!(
#[unsafe(super(NSObject))]
#[derive(Debug, PartialEq, Eq, Hash)]
pub struct GCMotion;
);
extern_conformance!(
unsafe impl NSObjectProtocol for GCMotion {}
);
impl GCMotion {
extern_methods!(
#[cfg(feature = "GCController")]
#[unsafe(method(controller))]
#[unsafe(method_family = none)]
pub unsafe fn controller(&self) -> Option<Retained<GCController>>;
#[cfg(feature = "block2")]
#[unsafe(method(valueChangedHandler))]
#[unsafe(method_family = none)]
pub unsafe fn valueChangedHandler(&self) -> GCMotionValueChangedHandler;
#[cfg(feature = "block2")]
#[unsafe(method(setValueChangedHandler:))]
#[unsafe(method_family = none)]
pub unsafe fn setValueChangedHandler(
&self,
value_changed_handler: GCMotionValueChangedHandler,
);
#[unsafe(method(sensorsRequireManualActivation))]
#[unsafe(method_family = none)]
pub unsafe fn sensorsRequireManualActivation(&self) -> bool;
#[unsafe(method(sensorsActive))]
#[unsafe(method_family = none)]
pub unsafe fn sensorsActive(&self) -> bool;
#[unsafe(method(setSensorsActive:))]
#[unsafe(method_family = none)]
pub unsafe fn setSensorsActive(&self, sensors_active: bool);
#[unsafe(method(hasGravityAndUserAcceleration))]
#[unsafe(method_family = none)]
pub unsafe fn hasGravityAndUserAcceleration(&self) -> bool;
#[unsafe(method(gravity))]
#[unsafe(method_family = none)]
pub unsafe fn gravity(&self) -> GCAcceleration;
#[unsafe(method(userAcceleration))]
#[unsafe(method_family = none)]
pub unsafe fn userAcceleration(&self) -> GCAcceleration;
#[unsafe(method(acceleration))]
#[unsafe(method_family = none)]
pub unsafe fn acceleration(&self) -> GCAcceleration;
#[deprecated = "Use -hasAttitude and -hasRotationRate methods instead"]
#[unsafe(method(hasAttitudeAndRotationRate))]
#[unsafe(method_family = none)]
pub unsafe fn hasAttitudeAndRotationRate(&self) -> bool;
#[unsafe(method(hasAttitude))]
#[unsafe(method_family = none)]
pub unsafe fn hasAttitude(&self) -> bool;
#[unsafe(method(hasRotationRate))]
#[unsafe(method_family = none)]
pub unsafe fn hasRotationRate(&self) -> bool;
#[unsafe(method(attitude))]
#[unsafe(method_family = none)]
pub unsafe fn attitude(&self) -> GCQuaternion;
#[unsafe(method(rotationRate))]
#[unsafe(method_family = none)]
pub unsafe fn rotationRate(&self) -> GCRotationRate;
#[unsafe(method(setGravity:))]
#[unsafe(method_family = none)]
pub unsafe fn setGravity(&self, gravity: GCAcceleration);
#[unsafe(method(setUserAcceleration:))]
#[unsafe(method_family = none)]
pub unsafe fn setUserAcceleration(&self, user_acceleration: GCAcceleration);
#[unsafe(method(setAcceleration:))]
#[unsafe(method_family = none)]
pub unsafe fn setAcceleration(&self, acceleration: GCAcceleration);
#[unsafe(method(setAttitude:))]
#[unsafe(method_family = none)]
pub unsafe fn setAttitude(&self, attitude: GCQuaternion);
#[unsafe(method(setRotationRate:))]
#[unsafe(method_family = none)]
pub unsafe fn setRotationRate(&self, rotation_rate: GCRotationRate);
#[unsafe(method(setStateFromMotion:))]
#[unsafe(method_family = none)]
pub unsafe fn setStateFromMotion(&self, motion: &GCMotion);
);
}
impl GCMotion {
extern_methods!(
#[unsafe(method(init))]
#[unsafe(method_family = init)]
pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;
#[unsafe(method(new))]
#[unsafe(method_family = new)]
pub unsafe fn new() -> Retained<Self>;
);
}