mirror of
https://github.com/xiaopeng12138/MaiDXR.git
synced 2024-12-20 21:05:51 +01:00
95 lines
3.3 KiB
C#
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();
|
||
|
}
|
||
|
}
|