/* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * Licensed under the Oculus SDK License Agreement (the "License"); * you may not use the Oculus SDK except in compliance with the License, * which is provided at the time of installation or download, or which * otherwise accompanies this software in either electronic or hard copy form. * * You may obtain a copy of the License at * * https://developer.oculus.com/licenses/oculussdk/ * * Unless required by applicable law or agreed to in writing, the Oculus SDK * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using UnityEngine; namespace Oculus.Interaction.Input { /// /// The Interaction SDK's fundamental concept of an XR controller, exposing data such as pose, pointer pose, and button states. /// This interface encapsulates the core capabilities common to all XR controllers supported by the Interaction SDK. Where /// possible, you should use this interface instead of concrete alternatives such as , which are less /// general and portable. /// public interface IController { /// /// Indicates whether the tracked controller is - or -handed. /// Handedness Handedness { get; } /// /// Indicates the expected scale of the controller in world space. Under most circumstances, this scale is 1; however, if /// the tracking space has been scaled relative to world space, that scaling will be reflected in this value. /// float Scale { get; } /// /// Indicates whether the controller is available and has valid data. Note that, because this reflects both the general /// availability and present validity of controller data, this value can vary from frame to frame depending on whether /// the system is currently able to track the controller. This is a valid API to check in order to determine whether /// up-to-date controller data is available at a given moment. /// bool IsConnected { get; } /// /// Indicates whether the controller is currently being tracked by the system such that valid poses for it can be retrieved. /// bool IsPoseValid { get; } /// /// Attempts to retrieve the pose of the controller in world space. The exact relationship of the retrieved pose to the /// physical position of the controller can vary by platform, but it typically corresponds to the root transform of the /// intended visual affordance for the physical controller being tracked. /// /// A void world space pose for the controller if available, identity otherwise /// True if the pose argument was populated with a valid pose, false otherwise bool TryGetPose(out Pose pose); /// /// Attempts to return a valid "pointer pose" for the controller. A "pointer pose" is a world-space pose (position and /// orientation) intended to be used as a directional input, conceptually comparable to "pointing at something." Typically, /// individual controllers provide their own "pointer pose" based on the ergonomics of the device; this method provides a /// unified way to query for this. /// /// A valid world-space pointer pose if one could be calculated, identity otherwise /// True if the pose argument was populated with a valid pointer pose, false otherwise bool TryGetPointerPose(out Pose pose); /// /// Retrieves a which can be used to query the state of the buttons, thumbsticks, and /// other input modalities available on the controller. /// ControllerInput ControllerInput { get; } /// /// Batch query method for determining whether any within a set of buttons (characterized by a bit mask of /// ) is currently active. /// /// The bit mask indicating which buttons are part of the query /// True if any of the queried buttons are active, false otherwise bool IsButtonUsageAnyActive(ControllerButtonUsage buttonUsage); /// /// Batch query method for determining whether all of a set of buttons (characterized by a bit mask of /// ) are currently active. /// /// The bit mask indicating which buttons are part of the query /// True if all of the queried buttons are active, false otherwise bool IsButtonUsageAllActive(ControllerButtonUsage buttonUsage); /// /// Event indicating that the controller has been updated and can now be queried for potentially new data. /// event Action WhenUpdated; } }