1
0
KF2-Dev-Scripts/Engine/Classes/SkelControlLimb.uc

96 lines
3.9 KiB
Ucode
Raw Normal View History

2020-12-13 15:01:13 +00:00
class SkelControlLimb extends SkelControlBase
native(Anim);
/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*
* Controller Specifically designed for 2-bone limbs with an elbow-like joint in the middle.
* Should be set up to act on the bone at the end of the limb - ie the hand in the case of an arm.
*/
cpptext
{
// USkelControlBase interface
virtual void GetAffectedBones(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<INT>& OutBoneIndices);
virtual void CalculateNewBoneTransforms(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<FBoneAtom>& OutBoneTransforms);
virtual INT GetWidgetCount();
virtual FBoneAtom GetWidgetTM(INT WidgetIndex, USkeletalMeshComponent* SkelComp, INT BoneIndex);
virtual void HandleWidgetDrag(INT WidgetIndex, const FVector& DragVec);
virtual void DrawSkelControl3D(const FSceneView* View, FPrimitiveDrawInterface* PDI, USkeletalMeshComponent* SkelComp, INT BoneIndex);
}
/** Where you want the controlled bone to be. Will be placed as close as possible within the constraints of the limb. */
var(Effector) vector EffectorLocation;
/** Reference frame that the DesiredLocation is defined in. */
var(Effector) EBoneControlSpace EffectorLocationSpace;
/** Name of bone used if DesiredLocationSpace is BCS_OtherBoneSpace or BCS_BaseMeshSpace. */
var(Effector) name EffectorSpaceBoneName;
/** Point in space where the joint should move towards as it bends. */
var(Joint) vector JointTargetLocation;
/** Reference frame in which JointTargetLocation is defined. */
var(Joint) EBoneControlSpace JointTargetLocationSpace;
/** Name of bone used if JointTargetLocationSpace is BCS_OtherBoneSpace. */
var(Joint) name JointTargetSpaceBoneName;
/** Apply an Offset to the Joint (Elbow) bone. This will create stretching! */
var(Joint) Vector JointOffset;
/** Space this offset is in */
var(Joint) EBoneControlSpace JointOffsetSpace;
/** Optional bone name to be used by JoinOffsetSpace */
var(Joint) name JointOffsetBoneName;
/** Axis of graphical bone to align along the length of the bone. */
var(Limb) EAxis BoneAxis;
/** Axis of graphical bone to align along the hinge axis of the joint. */
var(Limb) EAxis JointAxis;
/** If we want to invert BoneAxis when constructing the transform for the bones. */
var(Limb) bool bInvertBoneAxis;
/** If we want to invert JointAxis when constructing the transform for the bones. */
var(Limb) bool bInvertJointAxis;
/** Experiment to Rotate Joint Bone, rather than creating a new Matrix for it. */
var(Limb) bool bRotateJoint;
/**
* If true, modify the relative rotation between the end 'effector' bone and its parent bone. If false,
* the rotation of the end bone will not be modified by this controller.
*/
var(Limb) bool bMaintainEffectorRelRot;
/** If true, rotation of effector bone is copied from the bone specified by EffectorSpaceBoneName. */
var(Limb) bool bTakeRotationFromEffectorSpace;
/** Is Limb allowed to stretch to reach its target? */
var() bool bAllowStretching;
/**
* Stretching limits.
* X represents the relative length of the limb at which it will start stretching.
* Y represents the maximum stretch factor allowed.
* For example (X=0.5,Y=2.f) will mean that the limb is allowed to stretch up to twice its length.
* And it will start stretching when shoulder to effector distance is half of the full arm length.
*/
var() Vector2D StretchLimits;
/** Name of Roll Bone to stretch as well. */
var() Name StretchRollBoneName;
defaultproperties
{
EffectorLocationSpace=BCS_WorldSpace
JointTargetLocationSpace=BCS_WorldSpace
BoneAxis=AXIS_X
JointAxis=AXIS_Y
StretchLimits=(X=0.71f,Y=1.2f)
CategoryDesc = "Limb"
bIgnoreWhenNotRendered=TRUE // IK Controllers can typically be skipped when mesh is not rendered.
}