package dev.slimevr.tracking.processor;

import solarxr_protocol.datatypes.BodyPart;


/**
 * Keys for all the bones in the skeleton.
 */
public enum BoneType {
	HEAD(BodyPart.HEAD),
	HEAD_TRACKER(),
	NECK(BodyPart.NECK),
	UPPER_CHEST(BodyPart.UPPER_CHEST),
	CHEST_TRACKER,
	CHEST(BodyPart.CHEST),
	WAIST(BodyPart.WAIST),
	HIP(BodyPart.HIP),
	HIP_TRACKER,
	LEFT_HIP(BodyPart.LEFT_HIP),
	RIGHT_HIP(BodyPart.RIGHT_HIP),
	LEFT_UPPER_LEG(BodyPart.LEFT_UPPER_LEG),
	RIGHT_UPPER_LEG(BodyPart.RIGHT_UPPER_LEG),
	LEFT_KNEE_TRACKER,
	RIGHT_KNEE_TRACKER,
	LEFT_LOWER_LEG(BodyPart.LEFT_LOWER_LEG),
	RIGHT_LOWER_LEG(BodyPart.RIGHT_LOWER_LEG),
	LEFT_FOOT(BodyPart.LEFT_FOOT),
	RIGHT_FOOT(BodyPart.RIGHT_FOOT),
	LEFT_FOOT_TRACKER(BodyPart.LEFT_FOOT),
	RIGHT_FOOT_TRACKER(BodyPart.RIGHT_FOOT),
	LEFT_LOWER_ARM(BodyPart.LEFT_LOWER_ARM),
	RIGHT_LOWER_ARM(BodyPart.RIGHT_LOWER_ARM),
	LEFT_ELBOW_TRACKER,
	RIGHT_ELBOW_TRACKER,
	LEFT_UPPER_ARM(BodyPart.LEFT_UPPER_ARM),
	RIGHT_UPPER_ARM(BodyPart.RIGHT_UPPER_ARM),
	LEFT_SHOULDER(BodyPart.LEFT_SHOULDER),
	RIGHT_SHOULDER(BodyPart.RIGHT_SHOULDER),
	LEFT_UPPER_SHOULDER,
	RIGHT_UPPER_SHOULDER,
	LEFT_HAND(BodyPart.LEFT_HAND),
	RIGHT_HAND(BodyPart.RIGHT_HAND),
	LEFT_HAND_TRACKER,
	RIGHT_HAND_TRACKER,
	LEFT_THUMB_METACARPAL(BodyPart.LEFT_THUMB_METACARPAL),
	LEFT_THUMB_PROXIMAL(BodyPart.LEFT_THUMB_PROXIMAL),
	LEFT_THUMB_DISTAL(BodyPart.LEFT_THUMB_DISTAL),
	LEFT_INDEX_PROXIMAL(BodyPart.LEFT_INDEX_PROXIMAL),
	LEFT_INDEX_INTERMEDIATE(BodyPart.LEFT_INDEX_INTERMEDIATE),
	LEFT_INDEX_DISTAL(BodyPart.LEFT_INDEX_DISTAL),
	LEFT_MIDDLE_PROXIMAL(BodyPart.LEFT_MIDDLE_PROXIMAL),
	LEFT_MIDDLE_INTERMEDIATE(BodyPart.LEFT_MIDDLE_INTERMEDIATE),
	LEFT_MIDDLE_DISTAL(BodyPart.LEFT_MIDDLE_DISTAL),
	LEFT_RING_PROXIMAL(BodyPart.LEFT_RING_PROXIMAL),
	LEFT_RING_INTERMEDIATE(BodyPart.LEFT_RING_INTERMEDIATE),
	LEFT_RING_DISTAL(BodyPart.LEFT_RING_DISTAL),
	LEFT_LITTLE_PROXIMAL(BodyPart.LEFT_LITTLE_PROXIMAL),
	LEFT_LITTLE_INTERMEDIATE(BodyPart.LEFT_LITTLE_INTERMEDIATE),
	LEFT_LITTLE_DISTAL(BodyPart.LEFT_LITTLE_DISTAL),
	RIGHT_THUMB_METACARPAL(BodyPart.RIGHT_THUMB_METACARPAL),
	RIGHT_THUMB_PROXIMAL(BodyPart.RIGHT_THUMB_PROXIMAL),
	RIGHT_THUMB_DISTAL(BodyPart.RIGHT_THUMB_DISTAL),
	RIGHT_INDEX_PROXIMAL(BodyPart.RIGHT_INDEX_PROXIMAL),
	RIGHT_INDEX_INTERMEDIATE(BodyPart.RIGHT_INDEX_INTERMEDIATE),
	RIGHT_INDEX_DISTAL(BodyPart.RIGHT_INDEX_DISTAL),
	RIGHT_MIDDLE_PROXIMAL(BodyPart.RIGHT_MIDDLE_PROXIMAL),
	RIGHT_MIDDLE_INTERMEDIATE(BodyPart.RIGHT_MIDDLE_INTERMEDIATE),
	RIGHT_MIDDLE_DISTAL(BodyPart.RIGHT_MIDDLE_DISTAL),
	RIGHT_RING_PROXIMAL(BodyPart.RIGHT_RING_PROXIMAL),
	RIGHT_RING_INTERMEDIATE(BodyPart.RIGHT_RING_INTERMEDIATE),
	RIGHT_RING_DISTAL(BodyPart.RIGHT_RING_DISTAL),
	RIGHT_LITTLE_PROXIMAL(BodyPart.RIGHT_LITTLE_PROXIMAL),
	RIGHT_LITTLE_INTERMEDIATE(BodyPart.RIGHT_LITTLE_INTERMEDIATE),
	RIGHT_LITTLE_DISTAL(BodyPart.RIGHT_LITTLE_DISTAL);

	public static final BoneType[] values = values();

	public final int bodyPart;

	BoneType() {
		this.bodyPart = BodyPart.NONE;
	}

	BoneType(int associatedBodyPart) {
		this.bodyPart = associatedBodyPart;
	}
}
