1
0
KF2-Dev-Scripts/Engine/Classes/SkelControlTrail.uc
2020-12-13 18:01:13 +03:00

59 lines
2.0 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*
* Allows a chain of bones to 'trail' behind its head.
*/
class SkelControlTrail extends SkelControlBase
native(Anim);
cpptext
{
// USkelControlBase interface
virtual void TickSkelControl(FLOAT DeltaSeconds, USkeletalMeshComponent* SkelComp);
virtual void GetAffectedBones(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<INT>& OutBoneIndices);
virtual void CalculateNewBoneTransforms(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<FBoneAtom>& OutBoneTransforms);
}
/** Number of bones above the active one in the hierarchy to modify. */
var(Trail) int ChainLength;
/** Axis of the bones to point along trail. */
var(Trail) EAxis ChainBoneAxis;
/** Invert the direction specified in ChainBoneAxis. */
var(Trail) bool bInvertChainBoneAxis;
/** Limit the amount that a bone can stretch from its ref-pose length. */
var(Trail) bool bLimitStretch;
/** How quickly we 'relax' the bones to their animated positions. */
var(Trail) float TrailRelaxation;
/** If bLimitStretch is true, this indicates how long a bone can stretch beyond its length in the ref-pose. */
var(Trail) float StretchLimit;
/** 'Fake' velocity applied to bones. */
var(Trail) vector FakeVelocity;
/** Whether 'fake' velocity should be applied in actor or world space. */
var(Trail) bool bActorSpaceFakeVel;
/** Internal use - we need the timestep to do the relaxation in CalculateNewBoneTransforms. */
var float ThisTimstep;
/** Did we have a non-zero ControlStrength last frame. */
var bool bHadValidStrength;
/** Component-space locations of the bones from last frame. Each frame these are moved towards their 'animated' locations. */
var transient array<vector> TrailBoneLocations;
/** LocalToWorld used last frame, used for building transform between frames. */
var transient matrix OldLocalToWorld;
defaultproperties
{
ChainLength=2
ChainBoneAxis=AXIS_X
TrailRelaxation=10.0
}