mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-06 02:01:58 +02:00
Offsets refactor + add chest offset (#443)
This commit is contained in:
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = weft wontwolew
|
||||
skeleton_bone-NONE = none
|
||||
skeleton_bone-HEAD = hed shyft
|
||||
skeleton_bone-NECK = nyeck wength
|
||||
skeleton_bone-TORSO = towso wength
|
||||
skeleton_bone-CHEST = chwest disyance
|
||||
skeleton_bone-WAIST = weyst disyance
|
||||
skeleton_bone-CHEST = chwest wength
|
||||
skeleton_bone-CHEST_OFFSET = chwest awfset
|
||||
skeleton_bone-WAIST = weyst wength
|
||||
skeleton_bone-HIP = hip wength
|
||||
skeleton_bone-HIP_OFFSET = hyip awfset
|
||||
skeleton_bone-HIPS_WIDTH = hyips wiwdth
|
||||
skeleton_bone-LEGS_LENGTH = wegs wength
|
||||
skeleton_bone-KNEE_HEIGHT = knyee heiyt
|
||||
skeleton_bone-UPPER_LEG = uppor weg wength
|
||||
skeleton_bone-LOWER_LEG = lowur weg wength
|
||||
skeleton_bone-FOOT_LENGTH = pawsies wength
|
||||
skeleton_bone-FOOT_SHIFT = pawsies shyft
|
||||
skeleton_bone-SKELETON_OFFSET = skeweton awfset
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = cyontwowla disance z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = cyontwowla disance y
|
||||
skeleton_bone-FOREARM_LENGTH = fowewawm disyance
|
||||
skeleton_bone-SHOULDERS_DISTANCE = shouwdews disyance
|
||||
skeleton_bone-SHOULDERS_WIDTH = shouwdews wiwdth
|
||||
skeleton_bone-UPPER_ARM_LENGTH = uppew awm wength
|
||||
skeleton_bone-ELBOW_OFFSET = ewbow awfsewt
|
||||
skeleton_bone-UPPER_ARM = uppew awm wength
|
||||
skeleton_bone-LOWER_ARM = fowewawm disyance
|
||||
skeleton_bone-CONTROLLER_Y = cyontwowla disance y
|
||||
skeleton_bone-CONTROLLER_Z = cyontwowla disance z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = weset aww pwopowtions~
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
|
||||
skeleton_bone-NONE = None
|
||||
skeleton_bone-HEAD = Head Shift
|
||||
skeleton_bone-NECK = Neck Length
|
||||
skeleton_bone-TORSO = Torso Length
|
||||
skeleton_bone-CHEST = Chest Distance
|
||||
skeleton_bone-WAIST = Waist Distance
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Hip Offset
|
||||
skeleton_bone-HIPS_WIDTH = Hips Width
|
||||
skeleton_bone-LEGS_LENGTH = Legs Length
|
||||
skeleton_bone-KNEE_HEIGHT = Knee Height
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Foot Length
|
||||
skeleton_bone-FOOT_SHIFT = Foot Shift
|
||||
skeleton_bone-SKELETON_OFFSET = Skeleton Offset
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Controller Distance Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Controller Distance Y
|
||||
skeleton_bone-FOREARM_LENGTH = Forearm Distance
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Shoulders Distance
|
||||
skeleton_bone-SHOULDERS_WIDTH = Shoulders Width
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Upper Arm Length
|
||||
skeleton_bone-ELBOW_OFFSET = Elbow Offset
|
||||
skeleton_bone-UPPER_ARM = Upper Arm Length
|
||||
skeleton_bone-LOWER_ARM = Lower Arm Length
|
||||
skeleton_bone-CONTROLLER_Y = Controller Distance Y
|
||||
skeleton_bone-CONTROLLER_Z = Controller Distance Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Reset all proportions
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Control izquierdo
|
||||
skeleton_bone-NONE = Nada
|
||||
skeleton_bone-HEAD = Inclinación de cabeza
|
||||
skeleton_bone-NECK = Largo del cuello
|
||||
skeleton_bone-TORSO = Largo del torso
|
||||
skeleton_bone-CHEST = Distancia del pecho
|
||||
skeleton_bone-WAIST = Distancia de la cintura
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Desplazamiento de la cadera
|
||||
skeleton_bone-HIPS_WIDTH = Ancho de la cadera
|
||||
skeleton_bone-LEGS_LENGTH = Largo de las piernas
|
||||
skeleton_bone-KNEE_HEIGHT = Altura de las rodillas
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Largo de pies
|
||||
skeleton_bone-FOOT_SHIFT = Desplazamiento de pies
|
||||
skeleton_bone-SKELETON_OFFSET = Desplazamiento del esqueleto
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Distancia Z del mando
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Distancia Y del mando
|
||||
skeleton_bone-FOREARM_LENGTH = Distancia del antebrazo
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Distancia de los hombros
|
||||
skeleton_bone-SHOULDERS_WIDTH = Ancho de los hombros
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Largo del brazo superior
|
||||
skeleton_bone-ELBOW_OFFSET = Desplazamiento del codo
|
||||
skeleton_bone-UPPER_ARM = Largo del brazo superior
|
||||
skeleton_bone-LOWER_ARM = Distancia del antebrazo
|
||||
skeleton_bone-CONTROLLER_Y = Distancia Y del mando
|
||||
skeleton_bone-CONTROLLER_Z = Distancia Z del mando
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Reiniciar todas las proporciones
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Vasak kontroller
|
||||
skeleton_bone-NONE = Mitte midagi
|
||||
skeleton_bone-HEAD = Pea Nihe
|
||||
skeleton_bone-NECK = Kaela Pikkus
|
||||
skeleton_bone-TORSO = Torso Pikkus
|
||||
skeleton_bone-CHEST = Rinna Vahemaa
|
||||
skeleton_bone-WAIST = Vöökoha Vahemaa
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Lengthskeleton_bone-CHEST = Rinna Vahemaa
|
||||
skeleton_bone-HIP_OFFSET = Puusa Nihe
|
||||
skeleton_bone-HIPS_WIDTH = Puusa Laius
|
||||
skeleton_bone-LEGS_LENGTH = Jalgade Pikkus
|
||||
skeleton_bone-KNEE_HEIGHT = Põlve Kõrgus
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Jala Pikkus
|
||||
skeleton_bone-FOOT_SHIFT = Jala Nihe
|
||||
skeleton_bone-SKELETON_OFFSET = Skeletti Nihe
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Kontrolleri Kaugus Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Kontrolleri Kaugus Y
|
||||
skeleton_bone-FOREARM_LENGTH = Käsivarre Kaugus
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Õlgade Kaugus
|
||||
skeleton_bone-SHOULDERS_WIDTH = Õlgade Laius
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Õlavarre Pikkus
|
||||
skeleton_bone-ELBOW_OFFSET = Küünarnuki Nihe
|
||||
skeleton_bone-UPPER_ARM = Õlavarre Pikkus
|
||||
skeleton_bone-LOWER_ARM = Käsivarre Kaugus
|
||||
skeleton_bone-CONTROLLER_Y = Kontrolleri Kaugus Y
|
||||
skeleton_bone-CONTROLLER_Z = Kontrolleri Kaugus Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Lähtesta kõik proportsioonid
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
|
||||
skeleton_bone-NONE = Aucun
|
||||
skeleton_bone-HEAD = Décalage de la tête
|
||||
skeleton_bone-NECK = Longueur du cou
|
||||
skeleton_bone-TORSO = Longueur du torse
|
||||
skeleton_bone-CHEST = Distance de la poitrine
|
||||
skeleton_bone-WAIST = Distance de la taille
|
||||
skeleton_bone-CHEST = Longueur de la poitrine
|
||||
skeleton_bone-CHEST_OFFSET = Écart de la poitrine
|
||||
skeleton_bone-WAIST = Longueur de la taille
|
||||
skeleton_bone-HIP = Longueur des hanches
|
||||
skeleton_bone-HIP_OFFSET = Écart de la hanche
|
||||
skeleton_bone-HIPS_WIDTH = Largeur des hanches
|
||||
skeleton_bone-LEGS_LENGTH = Longueur des jambes
|
||||
skeleton_bone-KNEE_HEIGHT = Hauteur des genoux
|
||||
skeleton_bone-UPPER_LEG = Longueur des jambes supérieures
|
||||
skeleton_bone-LOWER_LEG = Longueur des jambes inférieures
|
||||
skeleton_bone-FOOT_LENGTH = Longueur des pieds
|
||||
skeleton_bone-FOOT_SHIFT = Décalage des pieds
|
||||
skeleton_bone-SKELETON_OFFSET = Écart du squelette
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Distance Z des contrôleurs
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Distance Y des contrôleurs
|
||||
skeleton_bone-FOREARM_LENGTH = Longueur des avant-bras
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Distance des épaules
|
||||
skeleton_bone-SHOULDERS_WIDTH = Largeur des épaules
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Longueur des bras supérieurs
|
||||
skeleton_bone-ELBOW_OFFSET = Écart des coudes
|
||||
skeleton_bone-UPPER_ARM = Longueur des bras supérieurs
|
||||
skeleton_bone-LOWER_ARM = Longueur des avant-bras
|
||||
skeleton_bone-CONTROLLER_Y = Distance Y des contrôleurs
|
||||
skeleton_bone-CONTROLLER_Z = Distance Z des contrôleurs
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Réinitialiser toutes les proportions
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
|
||||
skeleton_bone-NONE = Non assegnato
|
||||
skeleton_bone-HEAD = Correzione Testa
|
||||
skeleton_bone-NECK = Lunghezza Collo
|
||||
skeleton_bone-TORSO = Torso Lunghezza
|
||||
skeleton_bone-CHEST = Distanza Petto
|
||||
skeleton_bone-WAIST = Distanza Girovita
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Correzione Fianchi
|
||||
skeleton_bone-HIPS_WIDTH = Larghezza Fianchi
|
||||
skeleton_bone-LEGS_LENGTH = Lunghezza Gambe
|
||||
skeleton_bone-KNEE_HEIGHT = Altezza Ginocchia
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Lunghezza Piedi
|
||||
skeleton_bone-FOOT_SHIFT = Correzione Piedi
|
||||
skeleton_bone-SKELETON_OFFSET = Compensazione scheletro
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Distanza Z Controller
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Distanza Y Controller
|
||||
skeleton_bone-FOREARM_LENGTH = Distanza Avambracci
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Distanza Spalle
|
||||
skeleton_bone-SHOULDERS_WIDTH = Larghezza Spalle
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Lunghezza Braccia
|
||||
skeleton_bone-ELBOW_OFFSET = Correzione Gomito
|
||||
skeleton_bone-UPPER_ARM = Lunghezza Braccia
|
||||
skeleton_bone-LOWER_ARM = Distanza Avambracci
|
||||
skeleton_bone-CONTROLLER_Y = Distanza Y Controller
|
||||
skeleton_bone-CONTROLLER_Z = Distanza Z Controller
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Ripristina tutte le proporzioni
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = 左コントローラ
|
||||
skeleton_bone-NONE = 無し
|
||||
skeleton_bone-HEAD = ヘッドシフト
|
||||
skeleton_bone-NECK = 首長さ
|
||||
skeleton_bone-TORSO = 胴長さ
|
||||
skeleton_bone-CHEST = 胸部の距離
|
||||
skeleton_bone-WAIST = 腰部の距離
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = ヒップオフセット
|
||||
skeleton_bone-HIPS_WIDTH = ヒップ幅
|
||||
skeleton_bone-LEGS_LENGTH = 脚長さ
|
||||
skeleton_bone-KNEE_HEIGHT = 膝高さ
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = 足先長さ
|
||||
skeleton_bone-FOOT_SHIFT = 足先シフト
|
||||
skeleton_bone-SKELETON_OFFSET = スケルトンオフセット
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = コントローラ距離 Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = コントローラ距離 Y
|
||||
skeleton_bone-FOREARM_LENGTH = 前腕長さ
|
||||
skeleton_bone-SHOULDERS_DISTANCE = 肩の距離
|
||||
skeleton_bone-SHOULDERS_WIDTH = 肩幅
|
||||
skeleton_bone-UPPER_ARM_LENGTH = 上腕長さ
|
||||
skeleton_bone-ELBOW_OFFSET = 肘オフセット
|
||||
skeleton_bone-UPPER_ARM = 上腕長さ
|
||||
skeleton_bone-LOWER_ARM = 前腕長さ
|
||||
skeleton_bone-CONTROLLER_Y = コントローラ距離 Y
|
||||
skeleton_bone-CONTROLLER_Z = コントローラ距離 Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = すべてのプロポーションをリセット
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
|
||||
skeleton_bone-NONE = None
|
||||
skeleton_bone-HEAD = 머리 밀림
|
||||
skeleton_bone-NECK = 목 길이
|
||||
skeleton_bone-TORSO = 몸통 길이
|
||||
skeleton_bone-CHEST = 가슴 거리
|
||||
skeleton_bone-WAIST = 허리 거리
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = 골반 오프셋
|
||||
skeleton_bone-HIPS_WIDTH = 골반 너비
|
||||
skeleton_bone-LEGS_LENGTH = 다리 길이
|
||||
skeleton_bone-KNEE_HEIGHT = 무릎 높이
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = 발 크기
|
||||
skeleton_bone-FOOT_SHIFT = 발 밀림
|
||||
skeleton_bone-SKELETON_OFFSET = 골격 오프셋
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = 컨트롤러 Z축 거리
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = 컨트롤러 Y축 거리
|
||||
skeleton_bone-FOREARM_LENGTH = 전완 길이
|
||||
skeleton_bone-SHOULDERS_DISTANCE = 어깨 거리
|
||||
skeleton_bone-SHOULDERS_WIDTH = 어깨 너비
|
||||
skeleton_bone-UPPER_ARM_LENGTH = 위팔 거리
|
||||
skeleton_bone-ELBOW_OFFSET = 팔꿈치 오프셋
|
||||
skeleton_bone-UPPER_ARM = 위팔 거리
|
||||
skeleton_bone-LOWER_ARM = 전완 길이
|
||||
skeleton_bone-CONTROLLER_Y = 컨트롤러 Y축 거리
|
||||
skeleton_bone-CONTROLLER_Z = 컨트롤러 Z축 거리
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = 모든 신체 비율 리셋
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Left controller
|
||||
skeleton_bone-NONE = Brak
|
||||
skeleton_bone-HEAD = Head Shift
|
||||
skeleton_bone-NECK = Długość Szyi
|
||||
skeleton_bone-TORSO = Długość Tułowia
|
||||
skeleton_bone-CHEST = Długość Klatki Piersiowej
|
||||
skeleton_bone-WAIST = Waist Distance
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Offset Bioder
|
||||
skeleton_bone-HIPS_WIDTH = Szerokość Bioder
|
||||
skeleton_bone-LEGS_LENGTH = Długość Nóg
|
||||
skeleton_bone-KNEE_HEIGHT = Wysokość Kolana
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Długość Stopy
|
||||
skeleton_bone-FOOT_SHIFT = Foot Shift
|
||||
skeleton_bone-SKELETON_OFFSET = Skeleton Offset
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Controller Distance Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Controller Distance Y
|
||||
skeleton_bone-FOREARM_LENGTH = Długość PrzedRamienia
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Shoulders Distance
|
||||
skeleton_bone-SHOULDERS_WIDTH = Szerokość Ramion
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Długość Bicepsa
|
||||
skeleton_bone-ELBOW_OFFSET = Offset Łokcia
|
||||
skeleton_bone-UPPER_ARM = Długość Bicepsa
|
||||
skeleton_bone-LOWER_ARM = Długość PrzedRamienia
|
||||
skeleton_bone-CONTROLLER_Z = Controller Distance Z
|
||||
skeleton_bone-CONTROLLER_Y = Controller Distance Y
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Zresetuj wszystkie wymiary
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Controle esquerdo
|
||||
skeleton_bone-NONE = Nada
|
||||
skeleton_bone-HEAD = Deslocamento da Cabeça
|
||||
skeleton_bone-NECK = Tamanho do Pescoço
|
||||
skeleton_bone-TORSO = Tamanho do Torso
|
||||
skeleton_bone-CHEST = Distância do Peito
|
||||
skeleton_bone-WAIST = Distância da Cintura
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Compensação do Quadril
|
||||
skeleton_bone-HIPS_WIDTH = Largura do Quadril
|
||||
skeleton_bone-LEGS_LENGTH = Tamanho das Perna
|
||||
skeleton_bone-KNEE_HEIGHT = Altura dos Joelhos
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = Tamanho do Pé
|
||||
skeleton_bone-FOOT_SHIFT = Compensação do Pé
|
||||
skeleton_bone-SKELETON_OFFSET = Compensação do Esqueleto
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Distância do Controle Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Distância do Controle Y
|
||||
skeleton_bone-FOREARM_LENGTH = Distância do Antebraço
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Distância dos Ombros
|
||||
skeleton_bone-SHOULDERS_WIDTH = Largura dos Ombros
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Tamanho do Braço Superior
|
||||
skeleton_bone-ELBOW_OFFSET = Compensação do Cotovelo
|
||||
skeleton_bone-UPPER_ARM = Tamanho do Braço Superior
|
||||
skeleton_bone-LOWER_ARM = Distância do Antebraço
|
||||
skeleton_bone-CONTROLLER_Y = Distância do Controle Y
|
||||
skeleton_bone-CONTROLLER_Z = Distância do Controle Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Redefinir todas as proporções
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = Tay cầm trái
|
||||
skeleton_bone-NONE = Chưa liên kết
|
||||
skeleton_bone-HEAD = Đầu ca
|
||||
skeleton_bone-NECK = Cổ dài
|
||||
skeleton_bone-TORSO = Chiều dài thân
|
||||
skeleton_bone-CHEST = Khoảng cách ngực
|
||||
skeleton_bone-WAIST = Khoảng cách eo
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = Lệc đo hông
|
||||
skeleton_bone-HIPS_WIDTH = Chiều rộng hông
|
||||
skeleton_bone-LEGS_LENGTH = Chiều dài chân
|
||||
skeleton_bone-KNEE_HEIGHT = Chiều cao đầu gối
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = CHiều dài bàn chân
|
||||
skeleton_bone-FOOT_SHIFT = Lệch đo bàn chân
|
||||
skeleton_bone-SKELETON_OFFSET = Lệch đo thân
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = Khoảng cách tay cầm Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = Khoảng cách tay cầm Y
|
||||
skeleton_bone-FOREARM_LENGTH = khoảng cách cánh tay
|
||||
skeleton_bone-SHOULDERS_DISTANCE = Khoảng cách vai
|
||||
skeleton_bone-SHOULDERS_WIDTH = Chiều rộng vai
|
||||
skeleton_bone-UPPER_ARM_LENGTH = Chiều dài tay trên
|
||||
skeleton_bone-ELBOW_OFFSET = Lệch đo khuỷu tay
|
||||
skeleton_bone-UPPER_ARM = Chiều dài tay trên
|
||||
skeleton_bone-LOWER_ARM = khoảng cách cánh tay
|
||||
skeleton_bone-CONTROLLER_Y = Khoảng cách tay cầm Y
|
||||
skeleton_bone-CONTROLLER_Z = Khoảng cách tay cầm Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = Reset tất cả bộ phận
|
||||
|
||||
@@ -41,23 +41,23 @@ body_part-LEFT_CONTROLLER = 左控制器
|
||||
skeleton_bone-NONE = 无
|
||||
skeleton_bone-HEAD = 头部偏移
|
||||
skeleton_bone-NECK = 颈部长度
|
||||
skeleton_bone-TORSO = 躯干长度
|
||||
skeleton_bone-CHEST = 胸部距离
|
||||
skeleton_bone-WAIST = 腰部距离
|
||||
skeleton_bone-CHEST = Chest Length
|
||||
skeleton_bone-CHEST_OFFSET = Chest Offset
|
||||
skeleton_bone-WAIST = Waist Length
|
||||
skeleton_bone-HIP = Hip Length
|
||||
skeleton_bone-HIP_OFFSET = 髋部偏移
|
||||
skeleton_bone-HIPS_WIDTH = 髋部宽度
|
||||
skeleton_bone-LEGS_LENGTH = 腿部长度
|
||||
skeleton_bone-KNEE_HEIGHT = 膝盖高度
|
||||
skeleton_bone-UPPER_LEG = Upper Leg Length
|
||||
skeleton_bone-LOWER_LEG = Lower Leg Length
|
||||
skeleton_bone-FOOT_LENGTH = 脚部长度
|
||||
skeleton_bone-FOOT_SHIFT = 脚部偏移
|
||||
skeleton_bone-SKELETON_OFFSET = 骨骼偏移
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Z = 控制器距离 Z
|
||||
skeleton_bone-CONTROLLER_DISTANCE_Y = 控制器距离 Y
|
||||
skeleton_bone-FOREARM_LENGTH = 前臂距离
|
||||
skeleton_bone-SHOULDERS_DISTANCE = 肩膀距离
|
||||
skeleton_bone-SHOULDERS_WIDTH = 肩膀宽度
|
||||
skeleton_bone-UPPER_ARM_LENGTH = 上臂长度
|
||||
skeleton_bone-ELBOW_OFFSET = 肘部偏移
|
||||
skeleton_bone-UPPER_ARM = 上臂长度
|
||||
skeleton_bone-LOWER_ARM = 前臂距离
|
||||
skeleton_bone-CONTROLLER_Y = 控制器距离 Y
|
||||
skeleton_bone-CONTROLLER_Z = 控制器距离 Z
|
||||
|
||||
## Tracker reset buttons
|
||||
reset-reset_all = 重置所有比例
|
||||
|
||||
@@ -34,7 +34,7 @@ export function VerifyResultsStep({
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="flex flex-col flex-grow justify-between gap-1">
|
||||
<div className="flex flex-col flex-grow justify-between gap-2">
|
||||
<div className="flex flex-col gap-1 max-w-sm">
|
||||
<Typography variant="main-title" bold>
|
||||
{l10n.getString(
|
||||
|
||||
@@ -73,9 +73,11 @@ public class AutoBone {
|
||||
public final FastList<SkeletonConfigOffsets> legacyHeightConfigs = new FastList<>(
|
||||
new SkeletonConfigOffsets[] {
|
||||
SkeletonConfigOffsets.NECK,
|
||||
SkeletonConfigOffsets.TORSO,
|
||||
|
||||
SkeletonConfigOffsets.LEGS_LENGTH,
|
||||
SkeletonConfigOffsets.CHEST,
|
||||
SkeletonConfigOffsets.WAIST,
|
||||
SkeletonConfigOffsets.HIP,
|
||||
SkeletonConfigOffsets.UPPER_LEG,
|
||||
SkeletonConfigOffsets.LOWER_LEG,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -119,17 +121,14 @@ public class AutoBone {
|
||||
case HEAD -> skeletonConfig.getOffset(SkeletonConfigOffsets.HEAD);
|
||||
case NECK -> skeletonConfig.getOffset(SkeletonConfigOffsets.NECK);
|
||||
case CHEST -> skeletonConfig.getOffset(SkeletonConfigOffsets.CHEST);
|
||||
case WAIST -> -skeletonConfig.getOffset(SkeletonConfigOffsets.CHEST)
|
||||
+ skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO)
|
||||
- skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
case HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
case WAIST -> skeletonConfig.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
case HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIP);
|
||||
case LEFT_HIP, RIGHT_HIP -> skeletonConfig.getOffset(SkeletonConfigOffsets.HIPS_WIDTH)
|
||||
/ 2f;
|
||||
case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> skeletonConfig
|
||||
.getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
|
||||
- skeletonConfig.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
.getOffset(SkeletonConfigOffsets.UPPER_LEG);
|
||||
case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> skeletonConfig
|
||||
.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
|
||||
default -> -1f;
|
||||
};
|
||||
|
||||
@@ -236,26 +235,23 @@ public class AutoBone {
|
||||
if (headOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.HEAD, headOffset);
|
||||
}
|
||||
|
||||
Float neckOffset = offsets.get(BoneType.NECK);
|
||||
if (neckOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.NECK, neckOffset);
|
||||
}
|
||||
|
||||
Float chestOffset = offsets.get(BoneType.CHEST);
|
||||
Float hipOffset = offsets.get(BoneType.HIP);
|
||||
Float waistOffset = offsets.get(BoneType.WAIST);
|
||||
if (chestOffset != null && hipOffset != null && waistOffset != null) {
|
||||
configConsumer
|
||||
.accept(SkeletonConfigOffsets.TORSO, chestOffset + hipOffset + waistOffset);
|
||||
}
|
||||
|
||||
Float hipOffset = offsets.get(BoneType.HIP);
|
||||
if (chestOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.CHEST, chestOffset);
|
||||
configConsumer
|
||||
.accept(SkeletonConfigOffsets.CHEST, chestOffset);
|
||||
}
|
||||
if (waistOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.WAIST, waistOffset);
|
||||
}
|
||||
|
||||
if (hipOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.WAIST, hipOffset);
|
||||
configConsumer.accept(SkeletonConfigOffsets.HIP, hipOffset);
|
||||
}
|
||||
|
||||
Float hipWidthOffset = offsets.get(BoneType.LEFT_HIP);
|
||||
@@ -275,14 +271,15 @@ public class AutoBone {
|
||||
if (lowerLegOffset == null) {
|
||||
lowerLegOffset = offsets.get(BoneType.RIGHT_LOWER_LEG);
|
||||
}
|
||||
if (upperLegOffset != null && lowerLegOffset != null) {
|
||||
|
||||
if (upperLegOffset != null) {
|
||||
configConsumer
|
||||
.accept(SkeletonConfigOffsets.LEGS_LENGTH, upperLegOffset + lowerLegOffset);
|
||||
.accept(SkeletonConfigOffsets.UPPER_LEG, upperLegOffset);
|
||||
}
|
||||
if (lowerLegOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.LOWER_LEG, lowerLegOffset);
|
||||
}
|
||||
|
||||
if (lowerLegOffset != null) {
|
||||
configConsumer.accept(SkeletonConfigOffsets.KNEE_HEIGHT, lowerLegOffset);
|
||||
}
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
return false;
|
||||
|
||||
@@ -358,23 +358,28 @@ public class AutoBoneHandler {
|
||||
skeletonConfigBuffer.setOffsets(autoBoneResults.configValues);
|
||||
|
||||
float neckLength = skeletonConfigBuffer.getOffset(SkeletonConfigOffsets.NECK);
|
||||
float chestDistance = skeletonConfigBuffer
|
||||
float chestLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.CHEST);
|
||||
float torsoLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.TORSO);
|
||||
float waistLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
float hipLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.HIP);
|
||||
float torsoLength = chestLength + waistLength + hipLength;
|
||||
float hipWidth = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.HIPS_WIDTH);
|
||||
float legsLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.LEGS_LENGTH);
|
||||
float kneeHeight = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
float legLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.UPPER_LEG)
|
||||
+ skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
|
||||
float lowerLegLength = skeletonConfigBuffer
|
||||
.getOffset(SkeletonConfigOffsets.LOWER_LEG);
|
||||
|
||||
float neckTorso = neckLength / torsoLength;
|
||||
float chestTorso = chestDistance / torsoLength;
|
||||
float chestTorso = chestLength / torsoLength;
|
||||
float torsoWaist = hipWidth / torsoLength;
|
||||
float legTorso = legsLength / torsoLength;
|
||||
float legBody = legsLength / (torsoLength + neckLength);
|
||||
float kneeLeg = kneeHeight / legsLength;
|
||||
float legTorso = legLength / torsoLength;
|
||||
float legBody = legLength / (torsoLength + neckLength);
|
||||
float kneeLeg = lowerLegLength / legLength;
|
||||
|
||||
LogManager
|
||||
.info(
|
||||
|
||||
@@ -2,7 +2,6 @@ package dev.slimevr.autobone.errors;
|
||||
|
||||
|
||||
import com.jme3.math.FastMath;
|
||||
|
||||
import dev.slimevr.autobone.AutoBoneTrainingStep;
|
||||
import dev.slimevr.autobone.errors.proportions.ProportionLimiter;
|
||||
import dev.slimevr.autobone.errors.proportions.RangeProportionLimiter;
|
||||
@@ -18,7 +17,7 @@ public class BodyProportionError implements IAutoBoneError {
|
||||
|
||||
// The headset height is not the full height! This value compensates for the
|
||||
// offset from the headset height to the user height
|
||||
public float eyeHeightToHeightRatio = 0.936f;
|
||||
public static float eyeHeightToHeightRatio = 0.936f;
|
||||
|
||||
// Default config
|
||||
// Height: 1.58
|
||||
@@ -37,65 +36,87 @@ public class BodyProportionError implements IAutoBoneError {
|
||||
public static final ProportionLimiter[] proportionLimits = new ProportionLimiter[] {
|
||||
// Head
|
||||
// Experimental: 0.059
|
||||
new RangeProportionLimiter(0.059f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.HEAD);
|
||||
}, 0.01f),
|
||||
new RangeProportionLimiter(
|
||||
0.059f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.HEAD),
|
||||
0.01f
|
||||
),
|
||||
|
||||
// Neck
|
||||
// Expected: 0.052
|
||||
// Experimental: 0.059
|
||||
new RangeProportionLimiter(0.054f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.NECK);
|
||||
}, 0.0015f),
|
||||
|
||||
// Torso
|
||||
// Expected: 0.288 (0.333 including hip, this shouldn't be right...)
|
||||
new RangeProportionLimiter(0.333f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.TORSO);
|
||||
}, 0.015f),
|
||||
new RangeProportionLimiter(
|
||||
0.054f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.NECK),
|
||||
0.0015f
|
||||
),
|
||||
|
||||
// Chest
|
||||
// Experimental: 0.189
|
||||
new RangeProportionLimiter(0.189f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.CHEST);
|
||||
}, 0.02f),
|
||||
new RangeProportionLimiter(
|
||||
0.189f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.CHEST),
|
||||
0.02f
|
||||
),
|
||||
|
||||
// Waist
|
||||
// Experimental: 0.118
|
||||
new RangeProportionLimiter(0.118f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.TORSO)
|
||||
- config.getOffset(SkeletonConfigOffsets.CHEST)
|
||||
- config.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
}, 0.05f),
|
||||
new RangeProportionLimiter(
|
||||
0.118f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.WAIST),
|
||||
0.05f
|
||||
),
|
||||
|
||||
// Hip
|
||||
// Experimental: 0.0237
|
||||
new RangeProportionLimiter(0.0237f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.WAIST);
|
||||
}, 0.01f),
|
||||
new RangeProportionLimiter(
|
||||
0.0237f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.HIP),
|
||||
0.01f
|
||||
),
|
||||
|
||||
// Hip Width
|
||||
// Expected: 0.191
|
||||
// Experimental: 0.154
|
||||
new RangeProportionLimiter(0.184f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.HIPS_WIDTH);
|
||||
}, 0.04f),
|
||||
new RangeProportionLimiter(
|
||||
0.184f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.HIPS_WIDTH),
|
||||
0.04f
|
||||
),
|
||||
|
||||
// Upper Leg
|
||||
// Expected: 0.245
|
||||
new RangeProportionLimiter(0.245f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
|
||||
- config.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
}, 0.015f),
|
||||
new RangeProportionLimiter(
|
||||
0.245f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.UPPER_LEG),
|
||||
0.015f
|
||||
),
|
||||
|
||||
// Lower Leg
|
||||
// Expected: 0.246 (0.285 including below ankle, could use a separate
|
||||
// offset?)
|
||||
new RangeProportionLimiter(0.285f, config -> {
|
||||
return config.getOffset(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
}, 0.02f),
|
||||
new RangeProportionLimiter(
|
||||
0.285f,
|
||||
config -> config.getOffset(SkeletonConfigOffsets.LOWER_LEG),
|
||||
0.02f
|
||||
),
|
||||
};
|
||||
|
||||
public static ProportionLimiter getProportionLimitForOffset(SkeletonConfigOffsets offset) {
|
||||
ProportionLimiter result = null;
|
||||
switch (offset) {
|
||||
case HEAD -> result = proportionLimits[0];
|
||||
case NECK -> result = proportionLimits[1];
|
||||
case CHEST -> result = proportionLimits[2];
|
||||
case WAIST -> result = proportionLimits[3];
|
||||
case HIP -> result = proportionLimits[4];
|
||||
case HIPS_WIDTH -> result = proportionLimits[5];
|
||||
case UPPER_LEG -> result = proportionLimits[6];
|
||||
case LOWER_LEG -> result = proportionLimits[7];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStepError(AutoBoneTrainingStep trainingStep) throws AutoBoneException {
|
||||
return getBodyProportionError(
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package dev.slimevr.autobone.errors.proportions;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
|
||||
public class HardProportionLimiter implements ProportionLimiter {
|
||||
|
||||
@@ -28,4 +28,9 @@ public class HardProportionLimiter implements ProportionLimiter {
|
||||
float boneLength = boneLengthFunction.apply(config);
|
||||
return targetRatio - (boneLength / height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getTargetRatio() {
|
||||
return targetRatio;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,4 +5,6 @@ import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
|
||||
|
||||
public interface ProportionLimiter {
|
||||
public float getProportionError(SkeletonConfig config, float height);
|
||||
|
||||
public float getTargetRatio();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package dev.slimevr.autobone.errors.proportions;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
import com.jme3.math.FastMath;
|
||||
|
||||
import dev.slimevr.vr.processor.skeleton.SkeletonConfig;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
|
||||
public class RangeProportionLimiter extends HardProportionLimiter {
|
||||
|
||||
@@ -72,4 +71,9 @@ public class RangeProportionLimiter extends HardProportionLimiter {
|
||||
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getTargetRatio() {
|
||||
return targetRatio;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,6 +102,42 @@ public class CurrentVRConfigConverter implements VersionedModelConverter {
|
||||
modelData.set("trackers", trackersNode);
|
||||
}
|
||||
}
|
||||
if (version < 5) {
|
||||
// Migrate old skeleton offsets to new ones
|
||||
ObjectNode skeletonNode = (ObjectNode) modelData.get("skeleton");
|
||||
if (skeletonNode != null) {
|
||||
ObjectNode offsetsNode = (ObjectNode) skeletonNode.get("offsets");
|
||||
if (offsetsNode != null) {
|
||||
// torsoLength, chestDistance and waistDistance become
|
||||
// chestLength, waistLength and hipLength.
|
||||
float torsoLength = offsetsNode.get("torsoLength").floatValue();
|
||||
float chestDistance = offsetsNode.get("chestDistance").floatValue();
|
||||
float waistDistance = offsetsNode.get("waistDistance").floatValue();
|
||||
offsetsNode.set("chestLength", offsetsNode.get("chestDistance"));
|
||||
offsetsNode
|
||||
.set(
|
||||
"waistLength",
|
||||
new FloatNode(torsoLength - chestDistance - waistDistance)
|
||||
);
|
||||
offsetsNode.set("hipLength", offsetsNode.get("waistDistance"));
|
||||
offsetsNode.remove("torsoLength");
|
||||
offsetsNode.remove("chestDistance");
|
||||
offsetsNode.remove("waistDistance");
|
||||
|
||||
// legsLength and kneeHeight become
|
||||
// upperLegLength and lowerLegLength
|
||||
float legsLength = offsetsNode.get("legsLength").floatValue();
|
||||
float kneeHeight = offsetsNode.get("kneeHeight").floatValue();
|
||||
offsetsNode.set("upperLegLength", new FloatNode(legsLength - kneeHeight));
|
||||
offsetsNode.set("lowerLegLength", offsetsNode.get("kneeHeight"));
|
||||
offsetsNode.remove("legsLength");
|
||||
offsetsNode.remove("kneeHeight");
|
||||
|
||||
skeletonNode.set("offsets", offsetsNode);
|
||||
modelData.set("skeleton", skeletonNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return modelData;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import java.util.Map;
|
||||
|
||||
|
||||
@JsonVersionedModel(
|
||||
currentVersion = "4", defaultDeserializeToVersion = "4", toCurrentConverterClass = CurrentVRConfigConverter.class
|
||||
currentVersion = "5", defaultDeserializeToVersion = "5", toCurrentConverterClass = CurrentVRConfigConverter.class
|
||||
)
|
||||
public class VRConfig {
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.jme3.math.FastMath;
|
||||
import com.jme3.math.Quaternion;
|
||||
import com.jme3.math.Vector3f;
|
||||
import dev.slimevr.VRServer;
|
||||
import dev.slimevr.autobone.errors.BodyProportionError;
|
||||
import dev.slimevr.util.ann.VRServerThread;
|
||||
import dev.slimevr.vr.processor.ComputedHumanPoseTracker;
|
||||
import dev.slimevr.vr.processor.ComputedHumanPoseTrackerPosition;
|
||||
@@ -78,7 +79,6 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
|
||||
protected boolean hasRightArmTracker;
|
||||
static final Quaternion FORWARD_QUATERNION = new Quaternion()
|
||||
.fromAngles(FastMath.HALF_PI, 0, 0);
|
||||
static final float FLOOR_OFFSET = 0.05f;
|
||||
// #region Tracker Input
|
||||
protected Tracker hmdTracker;
|
||||
protected Tracker neckTracker;
|
||||
@@ -245,7 +245,7 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
|
||||
|
||||
// #region Attach tracker nodes for tracker offsets
|
||||
neckNode.attachChild(trackerHeadNode);
|
||||
chestNode.attachChild(trackerChestNode);
|
||||
neckNode.attachChild(trackerChestNode);
|
||||
hipNode.attachChild(trackerWaistNode);
|
||||
|
||||
leftKneeNode.attachChild(trackerLeftKneeNode);
|
||||
@@ -1135,13 +1135,17 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
|
||||
.getFirstAvailableTracker(leftLowerArmTracker, leftUpperArmTracker)
|
||||
.getRotation(rotBuf1);
|
||||
leftElbowNode.localTransform.setRotation(rotBuf1);
|
||||
} else {
|
||||
neckNode.localTransform.getRotation(rotBuf1);
|
||||
leftShoulderTailNode.localTransform.setRotation(rotBuf1);
|
||||
trackerLeftElbowNode.localTransform.setRotation(rotBuf1);
|
||||
leftElbowNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
if (leftHandTracker != null) {
|
||||
if (leftHandTracker != null)
|
||||
leftHandTracker.getRotation(rotBuf1);
|
||||
leftWristNode.localTransform.setRotation(rotBuf1);
|
||||
leftHandNode.localTransform.setRotation(rotBuf1);
|
||||
trackerLeftHandNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
leftWristNode.localTransform.setRotation(rotBuf1);
|
||||
leftHandNode.localTransform.setRotation(rotBuf1);
|
||||
trackerLeftHandNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
|
||||
// Right arm
|
||||
@@ -1184,13 +1188,17 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
|
||||
.getFirstAvailableTracker(rightLowerArmTracker, rightUpperArmTracker)
|
||||
.getRotation(rotBuf1);
|
||||
rightElbowNode.localTransform.setRotation(rotBuf1);
|
||||
} else {
|
||||
neckNode.localTransform.getRotation(rotBuf1);
|
||||
rightShoulderTailNode.localTransform.setRotation(rotBuf1);
|
||||
trackerRightElbowNode.localTransform.setRotation(rotBuf1);
|
||||
rightElbowNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
if (rightHandTracker != null) {
|
||||
if (rightHandTracker != null)
|
||||
rightHandTracker.getRotation(rotBuf1);
|
||||
rightWristNode.localTransform.setRotation(rotBuf1);
|
||||
rightHandNode.localTransform.setRotation(rotBuf1);
|
||||
trackerRightHandNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
rightWristNode.localTransform.setRotation(rotBuf1);
|
||||
rightHandNode.localTransform.setRotation(rotBuf1);
|
||||
trackerRightHandNode.localTransform.setRotation(rotBuf1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1655,81 +1663,25 @@ public class HumanSkeleton extends Skeleton implements SkeletonConfigCallback {
|
||||
return;
|
||||
}
|
||||
|
||||
Vector3f vec;
|
||||
float height;
|
||||
switch (config) {
|
||||
case HEAD -> skeletonConfig.setOffset(SkeletonConfigOffsets.HEAD, null);
|
||||
case NECK -> skeletonConfig.setOffset(SkeletonConfigOffsets.NECK, null);
|
||||
case TORSO -> { // Distance from shoulders to hip (full torso
|
||||
// length)
|
||||
vec = new Vector3f();
|
||||
case CHEST, WAIST, HIP, UPPER_LEG, LOWER_LEG -> {
|
||||
Vector3f vec = new Vector3f();
|
||||
hmdTracker.getPosition(vec);
|
||||
height = vec.y;
|
||||
float height = vec.y / BodyProportionError.eyeHeightToHeightRatio;
|
||||
if (height > 0.5f) { // Reset only if floor level seems right,
|
||||
skeletonConfig
|
||||
.setOffset(
|
||||
SkeletonConfigOffsets.TORSO,
|
||||
((height) * 0.42f)
|
||||
- skeletonConfig.getOffset(SkeletonConfigOffsets.NECK)
|
||||
);
|
||||
} else// if floor level is incorrect
|
||||
{
|
||||
skeletonConfig.setOffset(SkeletonConfigOffsets.TORSO, null);
|
||||
}
|
||||
}
|
||||
case CHEST -> // Chest is 57% of the upper body by default
|
||||
// (shoulders to chest)
|
||||
skeletonConfig
|
||||
.setOffset(
|
||||
SkeletonConfigOffsets.CHEST,
|
||||
skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO) * 0.57f
|
||||
);
|
||||
case WAIST -> // Waist length is from hip to waist
|
||||
skeletonConfig.setOffset(SkeletonConfigOffsets.WAIST, null);
|
||||
case HIP_OFFSET -> skeletonConfig.setOffset(SkeletonConfigOffsets.HIP_OFFSET, null);
|
||||
case HIPS_WIDTH -> skeletonConfig.setOffset(SkeletonConfigOffsets.HIPS_WIDTH, null);
|
||||
case FOOT_LENGTH -> skeletonConfig.setOffset(SkeletonConfigOffsets.FOOT_LENGTH, null);
|
||||
case FOOT_SHIFT -> skeletonConfig.setOffset(SkeletonConfigOffsets.FOOT_SHIFT, null);
|
||||
case SKELETON_OFFSET -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.SKELETON_OFFSET, null);
|
||||
case LEGS_LENGTH -> { // Set legs length to be 5cm above floor level
|
||||
vec = new Vector3f();
|
||||
hmdTracker.getPosition(vec);
|
||||
height = vec.y;
|
||||
if (height > 0.5f) { // Reset only if floor level seems right,
|
||||
skeletonConfig
|
||||
.setOffset(
|
||||
SkeletonConfigOffsets.LEGS_LENGTH,
|
||||
config,
|
||||
height
|
||||
- skeletonConfig.getOffset(SkeletonConfigOffsets.NECK)
|
||||
- skeletonConfig.getOffset(SkeletonConfigOffsets.TORSO)
|
||||
- FLOOR_OFFSET
|
||||
* BodyProportionError
|
||||
.getProportionLimitForOffset(config)
|
||||
.getTargetRatio()
|
||||
);
|
||||
} else // if floor level is incorrect
|
||||
{
|
||||
skeletonConfig.setOffset(SkeletonConfigOffsets.LEGS_LENGTH, null);
|
||||
} else { // if floor level is incorrect
|
||||
skeletonConfig.setOffset(config, null);
|
||||
}
|
||||
resetSkeletonConfig(SkeletonConfigOffsets.KNEE_HEIGHT);
|
||||
}
|
||||
case KNEE_HEIGHT -> // Knees are at 55% of the legs by default
|
||||
skeletonConfig
|
||||
.setOffset(
|
||||
SkeletonConfigOffsets.KNEE_HEIGHT,
|
||||
skeletonConfig.getOffset(SkeletonConfigOffsets.LEGS_LENGTH) * 0.55f
|
||||
);
|
||||
case CONTROLLER_DISTANCE_Z -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z, null);
|
||||
case CONTROLLER_DISTANCE_Y -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y, null);
|
||||
case LOWER_ARM_LENGTH -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.LOWER_ARM_LENGTH, null);
|
||||
case ELBOW_OFFSET -> skeletonConfig.setOffset(SkeletonConfigOffsets.ELBOW_OFFSET, null);
|
||||
case SHOULDERS_DISTANCE -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.SHOULDERS_DISTANCE, null);
|
||||
case SHOULDERS_WIDTH -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.SHOULDERS_WIDTH, null);
|
||||
case UPPER_ARM_LENGTH -> skeletonConfig
|
||||
.setOffset(SkeletonConfigOffsets.UPPER_ARM_LENGTH, null);
|
||||
default -> skeletonConfig.setOffset(config, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -130,8 +130,11 @@ public class SkeletonConfig {
|
||||
|
||||
// Re-calculate user height
|
||||
userHeight = getOffset(SkeletonConfigOffsets.NECK)
|
||||
+ getOffset(SkeletonConfigOffsets.TORSO)
|
||||
+ getOffset(SkeletonConfigOffsets.LEGS_LENGTH);
|
||||
+ getOffset(SkeletonConfigOffsets.CHEST)
|
||||
+ getOffset(SkeletonConfigOffsets.WAIST)
|
||||
+ getOffset(SkeletonConfigOffsets.HIP)
|
||||
+ getOffset(SkeletonConfigOffsets.UPPER_LEG)
|
||||
+ getOffset(SkeletonConfigOffsets.LOWER_LEG);
|
||||
}
|
||||
|
||||
public void setOffset(SkeletonConfigOffsets config, Float newValue) {
|
||||
@@ -236,18 +239,12 @@ public class SkeletonConfig {
|
||||
case CHEST_TRACKER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.CHEST_OFFSET)
|
||||
- getOffset(SkeletonConfigOffsets.CHEST),
|
||||
-getOffset(SkeletonConfigOffsets.SKELETON_OFFSET)
|
||||
);
|
||||
case WAIST -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
(getOffset(SkeletonConfigOffsets.CHEST)
|
||||
- getOffset(SkeletonConfigOffsets.TORSO)
|
||||
+ getOffset(SkeletonConfigOffsets.WAIST)),
|
||||
0
|
||||
);
|
||||
case HIP -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.WAIST), 0);
|
||||
case WAIST -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.WAIST), 0);
|
||||
case HIP -> setNodeOffset(nodeOffset, 0, -getOffset(SkeletonConfigOffsets.HIP), 0);
|
||||
case HIP_TRACKER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
@@ -269,8 +266,7 @@ public class SkeletonConfig {
|
||||
case LEFT_UPPER_LEG, RIGHT_UPPER_LEG -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-(getOffset(SkeletonConfigOffsets.LEGS_LENGTH)
|
||||
- getOffset(SkeletonConfigOffsets.KNEE_HEIGHT)),
|
||||
-getOffset(SkeletonConfigOffsets.UPPER_LEG),
|
||||
0
|
||||
);
|
||||
case LEFT_KNEE_TRACKER, RIGHT_KNEE_TRACKER -> setNodeOffset(
|
||||
@@ -282,7 +278,7 @@ public class SkeletonConfig {
|
||||
case LEFT_LOWER_LEG, RIGHT_LOWER_LEG -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.KNEE_HEIGHT),
|
||||
-getOffset(SkeletonConfigOffsets.LOWER_LEG),
|
||||
-getOffset(SkeletonConfigOffsets.FOOT_SHIFT)
|
||||
);
|
||||
case LEFT_FOOT, RIGHT_FOOT -> setNodeOffset(
|
||||
@@ -297,36 +293,6 @@ public class SkeletonConfig {
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.SKELETON_OFFSET)
|
||||
);
|
||||
case LEFT_CONTROLLER, RIGHT_CONTROLLER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y),
|
||||
getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z)
|
||||
);
|
||||
case LEFT_HAND, RIGHT_HAND -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Y),
|
||||
-getOffset(SkeletonConfigOffsets.CONTROLLER_DISTANCE_Z)
|
||||
);
|
||||
case LEFT_LOWER_ARM, RIGHT_LOWER_ARM -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.LOWER_ARM_LENGTH),
|
||||
0
|
||||
);
|
||||
case LEFT_ELBOW_TRACKER, RIGHT_ELBOW_TRACKER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.ELBOW_OFFSET),
|
||||
0
|
||||
);
|
||||
case LEFT_UPPER_ARM, RIGHT_UPPER_ARM -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.UPPER_ARM_LENGTH),
|
||||
0
|
||||
);
|
||||
case LEFT_SHOULDER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
-getOffset(SkeletonConfigOffsets.SHOULDERS_WIDTH) / 2f,
|
||||
@@ -339,6 +305,30 @@ public class SkeletonConfig {
|
||||
-getOffset(SkeletonConfigOffsets.SHOULDERS_DISTANCE),
|
||||
0
|
||||
);
|
||||
case LEFT_UPPER_ARM, RIGHT_UPPER_ARM -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.UPPER_ARM),
|
||||
0
|
||||
);
|
||||
case LEFT_LOWER_ARM, RIGHT_LOWER_ARM -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.LOWER_ARM),
|
||||
0
|
||||
);
|
||||
case LEFT_HAND, RIGHT_HAND -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
-getOffset(SkeletonConfigOffsets.CONTROLLER_Y),
|
||||
-getOffset(SkeletonConfigOffsets.CONTROLLER_Z)
|
||||
);
|
||||
case LEFT_CONTROLLER, RIGHT_CONTROLLER -> setNodeOffset(
|
||||
nodeOffset,
|
||||
0,
|
||||
getOffset(SkeletonConfigOffsets.CONTROLLER_Y),
|
||||
getOffset(SkeletonConfigOffsets.CONTROLLER_Z)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,193 +7,146 @@ import java.util.Map;
|
||||
public enum SkeletonConfigOffsets {
|
||||
HEAD(
|
||||
1,
|
||||
"Head",
|
||||
"headShift",
|
||||
"Head shift",
|
||||
0.1f,
|
||||
new BoneType[] { BoneType.HEAD }
|
||||
),
|
||||
NECK(
|
||||
2,
|
||||
"Neck",
|
||||
"neckLength",
|
||||
"Neck length",
|
||||
0.1f,
|
||||
new BoneType[] { BoneType.NECK }
|
||||
),
|
||||
TORSO(
|
||||
3,
|
||||
"Torso",
|
||||
"torsoLength",
|
||||
"Torso length",
|
||||
0.56f,
|
||||
new BoneType[] { BoneType.WAIST }
|
||||
),
|
||||
CHEST(
|
||||
4,
|
||||
"Chest",
|
||||
"chestDistance",
|
||||
"Chest distance",
|
||||
3,
|
||||
"chestLength",
|
||||
0.32f,
|
||||
new BoneType[] { BoneType.CHEST, BoneType.WAIST,
|
||||
new BoneType[] { BoneType.CHEST, BoneType.CHEST_TRACKER,
|
||||
BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
|
||||
),
|
||||
CHEST_OFFSET(
|
||||
4,
|
||||
"chestOffset",
|
||||
0.0f,
|
||||
new BoneType[] { BoneType.CHEST_TRACKER }
|
||||
),
|
||||
WAIST(
|
||||
5,
|
||||
"Waist",
|
||||
"waistDistance",
|
||||
"Waist distance",
|
||||
"waistLength",
|
||||
0.20f,
|
||||
new BoneType[] { BoneType.WAIST }
|
||||
),
|
||||
HIP(
|
||||
6,
|
||||
"hipLength",
|
||||
0.04f,
|
||||
new BoneType[] { BoneType.WAIST, BoneType.HIP }
|
||||
new BoneType[] { BoneType.HIP }
|
||||
),
|
||||
HIP_OFFSET(
|
||||
6,
|
||||
"Hip offset",
|
||||
7,
|
||||
"hipOffset",
|
||||
"Hip offset",
|
||||
0.0f,
|
||||
new BoneType[] { BoneType.HIP_TRACKER }
|
||||
),
|
||||
HIPS_WIDTH(
|
||||
7,
|
||||
"Hips width",
|
||||
8,
|
||||
"hipsWidth",
|
||||
"Hips width",
|
||||
0.26f,
|
||||
new BoneType[] { BoneType.LEFT_HIP, BoneType.RIGHT_HIP }
|
||||
),
|
||||
LEGS_LENGTH(
|
||||
8,
|
||||
"Legs length",
|
||||
"legsLength",
|
||||
"Legs length",
|
||||
0.92f,
|
||||
UPPER_LEG(
|
||||
9,
|
||||
"upperLegLength",
|
||||
0.42f,
|
||||
new BoneType[] { BoneType.LEFT_UPPER_LEG, BoneType.RIGHT_UPPER_LEG }
|
||||
),
|
||||
KNEE_HEIGHT(
|
||||
9,
|
||||
"Knee height",
|
||||
"kneeHeight",
|
||||
"Knee height",
|
||||
LOWER_LEG(
|
||||
10,
|
||||
"lowerLegLength",
|
||||
0.50f,
|
||||
new BoneType[] { BoneType.LEFT_UPPER_LEG, BoneType.RIGHT_UPPER_LEG,
|
||||
BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
|
||||
new BoneType[] { BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
|
||||
),
|
||||
FOOT_LENGTH(
|
||||
10,
|
||||
"Foot length",
|
||||
11,
|
||||
"footLength",
|
||||
"Foot length",
|
||||
0.05f,
|
||||
new BoneType[] { BoneType.LEFT_FOOT, BoneType.RIGHT_FOOT }
|
||||
),
|
||||
FOOT_SHIFT(
|
||||
11,
|
||||
"Foot shift",
|
||||
12,
|
||||
"footShift",
|
||||
"Foot shift",
|
||||
-0.05f,
|
||||
new BoneType[] { BoneType.LEFT_LOWER_LEG, BoneType.RIGHT_LOWER_LEG }
|
||||
),
|
||||
SKELETON_OFFSET(
|
||||
12,
|
||||
"Skeleton offset",
|
||||
13,
|
||||
"skeletonOffset",
|
||||
"Skeleton offset",
|
||||
0.0f,
|
||||
new BoneType[] { BoneType.CHEST_TRACKER, BoneType.HIP_TRACKER,
|
||||
BoneType.LEFT_KNEE_TRACKER, BoneType.RIGHT_KNEE_TRACKER,
|
||||
BoneType.LEFT_FOOT_TRACKER, BoneType.RIGHT_KNEE_TRACKER }
|
||||
),
|
||||
CONTROLLER_DISTANCE_Z(
|
||||
13,
|
||||
"Controller distance z",
|
||||
"controllerDistanceZ",
|
||||
"Controller distance z",
|
||||
0.13f,
|
||||
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
|
||||
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
|
||||
),
|
||||
CONTROLLER_DISTANCE_Y(
|
||||
14,
|
||||
"Controller distance y",
|
||||
"controllerDistanceY",
|
||||
"Controller distance y",
|
||||
0.035f,
|
||||
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
|
||||
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
|
||||
),
|
||||
LOWER_ARM_LENGTH(
|
||||
15,
|
||||
"Lower arm length",
|
||||
"lowerArmLength",
|
||||
"Lower arm length",
|
||||
0.25f,
|
||||
new BoneType[] { BoneType.LEFT_LOWER_ARM, BoneType.RIGHT_LOWER_ARM }
|
||||
),
|
||||
SHOULDERS_DISTANCE(
|
||||
16,
|
||||
"Shoulders distance",
|
||||
14,
|
||||
"shouldersDistance",
|
||||
"Shoulders distance",
|
||||
0.08f,
|
||||
new BoneType[] { BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
|
||||
),
|
||||
SHOULDERS_WIDTH(
|
||||
17,
|
||||
"Shoulders width",
|
||||
15,
|
||||
"shouldersWidth",
|
||||
"Shoulders width",
|
||||
0.36f,
|
||||
new BoneType[] { BoneType.LEFT_SHOULDER, BoneType.RIGHT_SHOULDER }
|
||||
),
|
||||
UPPER_ARM_LENGTH(
|
||||
18,
|
||||
"Upper arm length",
|
||||
UPPER_ARM(
|
||||
16,
|
||||
"upperArmLength",
|
||||
"Upper arm length",
|
||||
0.25f,
|
||||
new BoneType[] { BoneType.LEFT_UPPER_ARM, BoneType.RIGHT_UPPER_ARM }
|
||||
),
|
||||
ELBOW_OFFSET(
|
||||
LOWER_ARM(
|
||||
17,
|
||||
"lowerArmLength",
|
||||
0.25f,
|
||||
new BoneType[] { BoneType.LEFT_LOWER_ARM, BoneType.RIGHT_LOWER_ARM }
|
||||
),
|
||||
CONTROLLER_Y(
|
||||
18,
|
||||
"controllerDistanceY",
|
||||
0.035f,
|
||||
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
|
||||
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
|
||||
),
|
||||
CONTROLLER_Z(
|
||||
19,
|
||||
"Elbow offset",
|
||||
"elbowOffset",
|
||||
"Elbow offset",
|
||||
0f,
|
||||
new BoneType[] { BoneType.LEFT_ELBOW_TRACKER, BoneType.RIGHT_ELBOW_TRACKER }
|
||||
"controllerDistanceZ",
|
||||
0.13f,
|
||||
new BoneType[] { BoneType.LEFT_CONTROLLER, BoneType.RIGHT_CONTROLLER,
|
||||
BoneType.LEFT_HAND, BoneType.RIGHT_HAND }
|
||||
),;
|
||||
|
||||
public static final SkeletonConfigOffsets[] values = values();
|
||||
private static final Map<String, SkeletonConfigOffsets> byStringVal = new HashMap<>();
|
||||
private static final Map<Number, SkeletonConfigOffsets> byIdVal = new HashMap<>();
|
||||
|
||||
static {
|
||||
for (SkeletonConfigOffsets configVal : values()) {
|
||||
byIdVal.put(configVal.id, configVal);
|
||||
byStringVal.put(configVal.stringVal.toLowerCase(), configVal);
|
||||
}
|
||||
}
|
||||
|
||||
public final int id;
|
||||
public final String stringVal;
|
||||
public final String configKey;
|
||||
public final String label;
|
||||
public final float defaultValue;
|
||||
public final BoneType[] affectedOffsets;
|
||||
|
||||
SkeletonConfigOffsets(
|
||||
int id,
|
||||
String stringVal,
|
||||
String configKey,
|
||||
String label,
|
||||
float defaultValue,
|
||||
BoneType[] affectedOffsets
|
||||
) {
|
||||
this.id = id;
|
||||
this.stringVal = stringVal;
|
||||
this.configKey = configKey;
|
||||
this.label = label;
|
||||
|
||||
this.defaultValue = defaultValue;
|
||||
|
||||
@@ -201,10 +154,6 @@ public enum SkeletonConfigOffsets {
|
||||
== null ? new BoneType[0] : affectedOffsets;
|
||||
}
|
||||
|
||||
public static SkeletonConfigOffsets getByStringValue(String stringVal) {
|
||||
return stringVal == null ? null : byStringVal.get(stringVal.toLowerCase());
|
||||
}
|
||||
|
||||
public static SkeletonConfigOffsets getById(int id) {
|
||||
return byIdVal.get(id);
|
||||
}
|
||||
|
||||
Submodule solarxr-protocol updated: 3cb3e7aeea...e8f16f2a3d
Reference in New Issue
Block a user