{
	"$schema": "https://json-schema.org/draft/2020-12/schema",
	"$id": "https://schema.stfform.at/stfexp.constraint.ik.schema.json",
	"title": "Inverse Kinematic Constraint",
	"description": "Basic inverse-kinematic constraint. The component has to be placed on the last bone in the ik-chain.",
	"stfImplementations": {
		"blender": {
			"representingType": "STF component on bpy.types.Bone and bpy.types.KinematicConstraint",
			"link": "https://codeberg.org/stf_format/stf_blender/src/branch/master/stfblender/stf_resources/stfexp/stfexp_constraint_ik.py"
		},
		"godot": {
			"representingType": "Subclasses of IKModifier3D",
			"link": "https://codeberg.org/stf_format/stf_godot/src/branch/master/addons/stf_godot/resources/stfexp/STFEXP_Constraint_IK.gd"
		},
		"unity": {
			"representingType": "Application specific components",
			"link": "https://codeberg.org/stf_format/stf_unity/src/branch/master/Runtime/Resources/Resources_STFEXP/STFEXP_Constraint_IK.cs",
			"extra_links": {
				"FinalIK Processor": "https://codeberg.org/stf_format/stf_unity/src/branch/master/FinalIK/Editor/FinalIK_STFEXP_Constraint_IK_Processor.cs"
			}
		}
	},
	"allOf": [{ "$ref": "https://schema.stfform.at/stf.schema.json#/$defs/stf_component_resource" }],
	"properties": {
		"type": {
			"const": "stfexp.constraint.ik"
		},
		"chain_length": {
			"type": "integer",
			"minimum": 1,
			"description": "The length of the IK chain. A length of 1 essentially constitutes an `aim` constraint."
		},
		"target": {
			"$ref": "https://schema.stfform.at/stf.schema.json#resource_ref_path",
			"description": "Path to the target node."
		},
		"pole": {
			"$ref": "https://schema.stfform.at/stf.schema.json#resource_ref_path",
			"description": "Path to the pole node."
		}
	},
	"required": [
		"type",
		"chain_length",
		"target"
	],
	"additionalProperties": false
}