1
0
mirror of https://github.com/xiaopeng12138/MaiDXR.git synced 2024-12-20 12:55:52 +01:00
MaiDXR/Assets/Oculus/VR/Scripts/OVRTrackedKeyboard/OVRKeyboard.cs
2022-08-20 21:35:57 +02:00

95 lines
3.3 KiB
C#

/*
* 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 System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
public static class OVRKeyboard
{
public struct TrackedKeyboardState
{
public bool isPositionValid;
public bool isPositionTracked;
public bool isOrientationValid;
public bool isOrientationTracked;
public Vector3 position;
public Quaternion rotation;
public double timeInSeconds;
}
public struct TrackedKeyboardInfo
{
public string Name;
public UInt64 Identifier;
public Vector3 Dimensions;
public OVRPlugin.TrackedKeyboardFlags KeyboardFlags;
public OVRPlugin.TrackedKeyboardPresentationStyles SupportedPresentationStyles;
}
public static TrackedKeyboardState GetKeyboardState()
{
TrackedKeyboardState keyboardState;
OVRPlugin.KeyboardState keyboardStatePlugin;
OVRPlugin.GetKeyboardState(OVRPlugin.Step.Render, out keyboardStatePlugin);
keyboardState.timeInSeconds = keyboardStatePlugin.PoseState.Time;
OVRPose nodePose = keyboardStatePlugin.PoseState.Pose.ToOVRPose();
keyboardState.position = nodePose.position;
keyboardState.rotation = nodePose.orientation;
keyboardState.isPositionValid = (keyboardStatePlugin.PositionValid == OVRPlugin.Bool.True);
keyboardState.isPositionTracked = (keyboardStatePlugin.PositionTracked == OVRPlugin.Bool.True);
keyboardState.isOrientationValid = (keyboardStatePlugin.OrientationValid == OVRPlugin.Bool.True);
keyboardState.isOrientationTracked = (keyboardStatePlugin.OrientationTracked == OVRPlugin.Bool.True);
return keyboardState;
}
// Query for information about the system keyboards.
public static bool GetSystemKeyboardInfo(OVRPlugin.TrackedKeyboardQueryFlags keyboardQueryFlags, out TrackedKeyboardInfo keyboardInfo)
{
keyboardInfo = default(TrackedKeyboardInfo);
OVRPlugin.KeyboardDescription keyboardDescription;
if(OVRPlugin.GetSystemKeyboardDescription(keyboardQueryFlags, out keyboardDescription))
{
keyboardInfo.Name = Encoding.UTF8.GetString(keyboardDescription.Name).TrimEnd('\0');
keyboardInfo.Identifier = keyboardDescription.TrackedKeyboardId;
keyboardInfo.Dimensions = new Vector3(keyboardDescription.Dimensions.x, keyboardDescription.Dimensions.y, keyboardDescription.Dimensions.z);
keyboardInfo.KeyboardFlags = keyboardDescription.KeyboardFlags;
keyboardInfo.SupportedPresentationStyles = keyboardDescription.SupportedPresentationStyles;
return true;
}
else
{
return false;
}
}
public static bool StopKeyboardTracking(TrackedKeyboardInfo keyboardInfo)
{
return OVRPlugin.StopKeyboardTracking();
}
}