1
0
KF2-Dev-Scripts/UDKBase/classes/UDKSkelControl_Damage.uc
2020-12-13 18:01:13 +03:00

156 lines
4.6 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
class UDKSkelControl_Damage extends SkelControlSingleBone
native(Animation);
/** Is this control initialized */
var bool bInitialized;
/** Quick link to the owning UDKVehicle */
var UDKVehicle OwnerVehicle;
/** Which morph Target to use for health. If none, use the main vehicle health */
var float HealthPerc;
/** Whether the OnDamage functionality is active **/
var(Damage) bool bOnDamageActive;
/** Value to scale this bone to on death **/
var(Damage) float DamageBoneScale;
/** How much damage the control can take */
var(Damage) int DamageMax;
/** If the health target is above this threshold, this control will be inactive */
var(Damage) float ActivationThreshold;
/** Once activated, does we generate the control strength as a product of the health remaining, or is it always full */
var(Damage) bool bControlStrFollowsHealth;
/** The Static Mesh component to display when it breaks off */
var(Damage) StaticMesh BreakMesh;
/** The threshold at which the spring will begin looking to break */
var(Damage) float BreakThreshold;
/** This is the amount of time to go from breaking to broken */
var(Damage) float BreakTime;
/** When breaking off, use this to build the vector */
var(Damage) vector DefaultBreakDir;
/**
* The scale to use for the spawned piece. (i.e. we have one static mesh asset but it is being spawned from different locations on a vehicle
* which is mirrored down the center.
**/
var(Damage) vector DamageScale;
/** ParticleSystem to spawn when this piece breaks */
var(Damage) ParticleSystem PS_DamageOnBreak;
/** ParticleSystem to attach when this piece flies off (i.e. a dark acrid trailing smoke trail!) */
var(Damage) ParticleSystem PS_DamageTrail;
/** Is this control broken */
var transient bool bIsBroken;
/** This is set to true when Break() is called. It signals the control is breaking but not yet broken */
var transient bool bIsBreaking;
/** This holds the name of the bone that was broken */
var transient name BrokenBone;
/** This holds the real-time at which this should break */
var transient float BreakTimer;
/** cached MaxDamage for a vehicle */
var transient float OwnerVehicleMaxHealth;
/** force that pushes the part up when the part is broken off to clear the vehicle. */
var() vector BreakSpeed;
/** Whether the OnDeath functionality is active **/
var(OnDeath) bool bOnDeathActive;
/** Whether the OnDeath functionality is active for the secondary explosion **/
var(OnDeath) bool bOnDeathUseForSecondaryExplosion;
/** This is the percent that this piece will actually spawn if OnDeath is active **/
var(OnDeath) float DeathPercentToActuallySpawn;
/** Value to scale this bone to on death **/
var(OnDeath) float DeathBoneScale;
/** The static mesh to spawn on death **/
var(OnDeath) StaticMesh DeathStaticMesh;
/** This is the direction which the spawned vehicle piece will fly **/
var(OnDeath) vector DeathImpulseDir;
/**
* The scale to use for the spawned piece. (i.e. we have one static mesh asset but it is being spawned from different locations on a vehicle
* which is mirrored down the center.
**/
var(OnDeath) vector DeathScale;
/** ParticleSystem to spawn when this piece breaks */
var(OnDeath) ParticleSystem PS_DeathOnBreak;
/** ParticleSystem to attach when this piece flies off (i.e. a dark acrid trailing smoke trail!) */
var(OnDeath) ParticleSystem PS_DeathTrail;
cpptext
{
virtual void TickSkelControl(FLOAT DeltaSeconds, USkeletalMeshComponent* SkelComp);
virtual void CalculateNewBoneTransforms(INT BoneIndex, USkeletalMeshComponent* SkelComp, TArray<FBoneAtom>& OutBoneTransforms);
virtual FLOAT GetBoneScale(INT BoneIndex, USkeletalMeshComponent* SkelComp);
virtual UBOOL InitializeControl(USkeletalMeshComponent* SkelComp);
}
/**
* This event is triggered when the spring has decided to break.
*
* Network - Called everywhere except on a dedicated server.
*/
simulated event BreakApart(vector PartLocation, bool bIsVisible)
{
BoneScale = DamageBoneScale;
bIsBreaking = FALSE;
bIsBroken = TRUE;
}
simulated event BreakApartOnDeath(vector PartLocation, bool bIsVisible)
{
BoneScale = DeathBoneScale;
bIsBroken = TRUE;
}
simulated event float RestorePart()
{
BoneScale = 1.0f;
HealthPerc = 1.0f;
return HealthPerc;
}
defaultproperties
{
bOnDamageActive=TRUE
bControlStrFollowsHealth=FALSE
BreakThreshold=1.1
BreakTime=0.0
HealthPerc=1.f
DamageMax=25
bIgnoreWhenNotRendered=TRUE
DamageScale=(X=1.0f,Y=1.0f,Z=1.0f)
DeathScale=(X=1.0f,Y=1.0f,Z=1.0f)
DeathPercentToActuallySpawn=1.0f
}