/*
 * © 2026 TiedUp! Remake Contributors, distributed under GPLv3.
 */

package com.tiedup.remake.rig.anim;

/**
 * Motions custom TiedUp! — extension de {@link LivingMotions} (motions vanilla EF).
 *
 * Chaque valeur partage le meme {@link LivingMotion#ENUM_MANAGER} que
 * {@link LivingMotions} : les universalOrdinal() sont assignes a la suite, sans
 * collision, a condition que les deux enums soient class-loaded avant usage.
 *
 * Les 8 premieres motions correspondent au design original RIG (cf.
 * docs/plans/rig/). Les 3 dernieres sont des ajouts UX (P0/P1) :
 * - POSE_SLEEP_BOUND : sleep avec restraints (P0)
 * - POSE_UNCONSCIOUS : steady-state post-capture (P0)
 * - FALL_BOUND      : fall sans flailing (P1)
 *
 * Class-load force dans {@code TiedUpMod.commonSetup} via {@link #values()} —
 * sans ca, les ordinals ne sont pas assignes tant que l'enum n'est pas touche
 * (JLS : init lazy).
 */
public enum TiedUpLivingMotions implements LivingMotion {
	POSE_DOG,
	POSE_PET_BED_SIT,
	POSE_PET_BED_SLEEP,
	POSE_FURNITURE_SEAT,
	POSE_KNEEL_BOUND,
	STRUGGLE_BOUND,
	WALK_BOUND,
	SNEAK_BOUND,
	POSE_SLEEP_BOUND,     // UX P0 — sleep avec restraints
	POSE_UNCONSCIOUS,     // UX P0 — steady-state post-capture
	FALL_BOUND;           // UX P1 — no flailing en chute

	final int id;

	TiedUpLivingMotions() {
		this.id = LivingMotion.ENUM_MANAGER.assign(this);
	}

	@Override
	public int universalOrdinal() {
		return this.id;
	}
}
