import type { _NSObject } from "../Foundation/NSObject.js";
import type { _GCController } from "./GCController.js";
import type { GCAcceleration } from "../structs/GCAcceleration.js";
import type { GCQuaternion } from "../structs/GCQuaternion.js";
import type { GCRotationRate } from "../structs/GCRotationRate.js";
export declare class _GCMotion extends _NSObject {
    static alloc(): _GCMotion;
    static new(): _GCMotion;
    init(): _GCMotion;
    /**
     * Sets the gravity vector expressed in the controller's reference frame. @note If the controller's snapshot flag is set to NO, this method has no effect. @see gravity
     */
    setGravity$(gravity: GCAcceleration): void;
    /**
     * Sets the acceleration that the user is giving to the controller. @note If the controller's snapshot flag is set to NO, this method has no effect. @see userAcceleration
     */
    setUserAcceleration$(userAcceleration: GCAcceleration): void;
    /**
     * Sets the acceleration that the user is giving to the controller. @note If the controller's snapshot flag is set to NO, this method has no effect. @see userAcceleration
     */
    setAcceleration$(acceleration: GCAcceleration): void;
    /**
     * Sets the current rotation rate of the controller. @note If the controller's snapshot flag is set to NO, this method has no effect. @see attitude
     */
    setAttitude$(attitude: GCQuaternion): void;
    /**
     * Sets the current rotation rate of the controller. @note If the controller's snapshot flag is set to NO, this method has no effect. @see rotationRate
     */
    setRotationRate$(rotationRate: GCRotationRate): void;
    /**
     * Sets the state vector of the motion profile to a copy of the input motion profile's state vector. @note If the controller's snapshot flag is set to NO, this method has no effect. @see GCController.snapshot
     */
    setStateFromMotion$(motion: _GCMotion): void;
    /**
     * A profile keeps a reference to the controller that it is mapping input from. @see GCController
     */
    controller(): _GCController | null;
    valueChangedHandler(): ((arg0: _GCMotion) => void) | null;
    setValueChangedHandler$(value: ((arg0: _GCMotion) => void) | null): void;
    /**
     * If this property is returns YES, you are responsible for setting sensorsActive to YES when you need motion data from the controller. Some controllers, such as the Siri Remote, automatically activate and deactivate motion sensors. In such a case, this property will return NO. @see sensorsActive
     */
    sensorsRequireManualActivation(): boolean;
    /**
     * Set this property to YES when you wish to receive motion data from the controller. When you set this property to NO, the motion sensors will be disabled and the GCMotion profile will not be updated. @note It is highly recommended that you only enable sensor during the period of time you directly need motion data. Motion sensors can drain controller battery, device battery, and needlessly consume Bluetooth bandwidth. @see sensorsRequireManualActivation
     */
    sensorsActive(): boolean;
    setSensorsActive$(value: boolean): void;
    /**
     * Returns YES if the controller is capable of reporting gravity and user acceleration separately. @note Some controllers do not separate gravity from user acceleration, and only report the total acceleration of the controller. Query whether the connected controller has the ability to separate gravity and user acceleration, and it doesn’t, use acceleration instead. @see acceleration
     */
    hasGravityAndUserAcceleration(): boolean;
    /**
     * The gravity vector expressed in the controller's reference frame. Note that the total acceleration of the controller is equal to gravity plus userAcceleration. @see userAcceleration @see acceleration
     */
    gravity(): GCAcceleration;
    /**
     * The acceleration that the user is giving to the controller. Note that the total acceleration of the controller is equal to gravity plus userAcceleration. @see gravity @see acceleration
     */
    userAcceleration(): GCAcceleration;
    /**
     * The total acceleration of the controller. @see gravity @see userAcceleration
     * @deprecated Use -hasAttitude and -hasRotationRate methods instead
     */
    acceleration(): GCAcceleration;
    /**
     * The controller generating the motion data has sensors that can accurately determine the current attitude and rotation rate. If this is enabled the motion data for attitude and rotation rate are usable for inputs.
     * @deprecated Use -hasAttitude and -hasRotationRate methods instead
     */
    hasAttitudeAndRotationRate(): boolean;
    /**
     * The controller generating the motion data has sensors that can accurately determine the current attitude. If this is enabled the motion data for attitude is usable for inputs.
     */
    hasAttitude(): boolean;
    /**
     * The controller generating the motion data has sensors that can accurately determine the current rotation rate. If this is enabled the motion data for rotation rate is usable for inputs.
     */
    hasRotationRate(): boolean;
    /**
     * The current attitude of the controller. @note Remotes without accurate attitude and rotation rate can not determine a stable attitude so the values will be (0,0,0,1) at all times. @see hasAttitude @see GCMicroGamepad
     */
    attitude(): GCQuaternion;
    /**
     * The current rotation rate of the controller. @note Remotes without accurate attitude and rotation rate can not determine a stable rotation rate so the values will be (0,0,0) at all times. @see hasRotationRate @see GCMicroGamepad
     */
    rotationRate(): GCRotationRate;
}
