using System;
using System.Collections.Generic;
using UnityEngine;
namespace UniVRM10
{
public enum ControlRigGenerationOption
{
///
/// コントロールリグを生成しません。
///
None = 0,
///
/// 推奨されるオプションです。
/// コントロールリグのボーン Transform を生成し、Root の Animator はコントロールリグのボーンを制御するようになります。
///
Generate = 1,
Vrm0XCompatibleRig = 1,
///
/// コントロールリグのボーン Transform を生成し、Root の Animator はコントロールリグのボーンを制御するようになります。
/// 手と指に関して、XR_EXT_hand_tracking の初期回転を持ちます。
/// https://registry.khronos.org/OpenXR/specs/1.0/html/xrspec.html#XR_EXT_hand_tracking
///
Vrm0XCompatibleWithXR_EXT_hand_tracking = 2,
///
/// コントロールリグのボーン Transform を生成し、Root の Animator はコントロールリグのボーンを制御するようになります。
/// 上半身に関して、XR_FB_body_tracking の初期回転を持ちます。
/// https://developer.oculus.com/documentation/native/android/move-ref-body-joints/
///
Vrm0XCompatibleWithXR_FB_body_tracking = 3,
}
internal static class ControlRigGenerationOptionExtensions
{
internal static IReadOnlyDictionary ToInitialRotations(this ControlRigGenerationOption option)
{
switch (option)
{
case ControlRigGenerationOption.None:
return null;
case ControlRigGenerationOption.Generate:
// case ControlRigGenerationOption.Vrm0XCompatibleRig:
return Vrm0XCompatibleRig.InitialRotations;
case ControlRigGenerationOption.Vrm0XCompatibleWithXR_EXT_hand_tracking:
return XR_EXT_hand_tracking.InitialRotations;
case ControlRigGenerationOption.Vrm0XCompatibleWithXR_FB_body_tracking:
return XR_FB_body_tracking.InitialRotations;
default:
throw new ArgumentException();
}
}
}
}