/*
 * Derived from Epic Fight (https://github.com/Epic-Fight/epicfight)
 * by the Epic Fight Team, licensed under GPLv3.
 * Modifications © 2026 TiedUp! Remake Contributors, distributed under GPLv3.
 */

package com.tiedup.remake.rig.physics;

import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import com.tiedup.remake.rig.armature.Joint;
import com.tiedup.remake.rig.mesh.SoftBodyTranslatable;
import com.tiedup.remake.rig.cloth.ClothSimulatable;
import com.tiedup.remake.rig.cloth.ClothSimulator;
import com.tiedup.remake.rig.physics.ik.InverseKinematicsProvider;
import com.tiedup.remake.rig.physics.ik.InverseKinematicsSimulatable;
import com.tiedup.remake.rig.physics.ik.InverseKinematicsSimulator;

public interface SimulationTypes<KEY, O, PV extends SimulationProvider<O, DATA, B, PV>, B extends SimulationObject.SimulationObjectBuilder, DATA extends SimulationObject<B, PV, O>, SIM extends PhysicsSimulator<KEY, B, PV, O, DATA>> {
	@OnlyIn(Dist.CLIENT)
	public static final SimulationTypes<ResourceLocation, ClothSimulatable, SoftBodyTranslatable, ClothSimulator.ClothObjectBuilder, ClothSimulator.ClothObject, ClothSimulator> CLOTH = new SimulationTypes<> () {};
	public static final SimulationTypes<Joint, InverseKinematicsSimulatable, InverseKinematicsProvider, InverseKinematicsSimulator.InverseKinematicsBuilder, InverseKinematicsSimulator.InverseKinematicsObject, InverseKinematicsSimulator> INVERSE_KINEMATICS = new SimulationTypes<> () {};
}