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

152 lines
4.0 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
* DO NOT USE, try the NxForceField classes instead!
*/
class RB_RadialForceActor extends RigidBodyBase
native(ForceField)
placeable;
enum ERadialForceType
{
RFT_Force, // Use as a force
RFT_Impulse, // Use as an impulse, gets deactivated when applied once
};
/** Used to preview the radius of the force. */
var DrawSphereComponent RenderComponent;
/** Strength of the force applied by this actor. Positive forces are applied outwards. */
var() interp float ForceStrength;
/** Radius of influence of the force. */
var() interp float ForceRadius;
/** How strongly objects orbit around Z axis of actor. */
var() interp float SwirlStrength;
/** How strongly to spin objects around their local Z. */
var() interp float SpinTorque;
/** Way in which the force falls off as objects are further away from the location. */
var() PrimitiveComponent.ERadialImpulseFalloff ForceFalloff;
/** Indicates whether the force is active at the moment. */
var() bool bForceActive;
/** Indicates which type of force mode is used. */
var() ERadialForceType RadialForceMode;
/** Apply force field to cloth */
var() bool bForceApplyToCloth;
/** Apply force field to fluid */
var() bool bForceApplyToFluid;
/** Apply force field to rigid bodies */
var() bool bForceApplyToRigidBodies;
/** Apply force field to projectiles like rockets */
var() bool bForceApplyToProjectiles;
//TODO: Remove the above booleans and just use the channels
/** Which types of object to apply this force field to */
var() const RBCollisionChannelContainer CollideWithChannels;
cpptext
{
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent);
virtual void TickSpecial(FLOAT DeltaSeconds);
#if WITH_EDITOR
virtual void EditorApplyScale(const FVector& DeltaScale, const FMatrix& ScaleMatrix, const FVector* PivotLocation, UBOOL bAltDown, UBOOL bShiftDown, UBOOL bCtrlDown);
#endif
}
replication
{
if (bNetDirty)
bForceActive;
}
/** Handling Toggle event from Kismet. */
simulated function OnToggle(SeqAct_Toggle inAction)
{
if(inAction.InputLinks[0].bHasImpulse)
{
bForceActive = true;
}
else if(inAction.InputLinks[1].bHasImpulse)
{
bForceActive = false;
}
else if(inAction.InputLinks[2].bHasImpulse)
{
bForceActive = !bForceActive;
}
SetForcedInitialReplicatedProperty(Property'Engine.RB_RadialForceActor.bForceActive', (bForceActive == default.bForceActive));
`if(`__TW_PERFORMANCE_)
// Once Kismet is used this actor needs to be replicated
ForceNetRelevant();
`endif
}
defaultproperties
{
Begin Object Class=DrawSphereComponent Name=DrawSphere0
SphereColor=(R=64,G=70,B=255,A=255)
SphereRadius=200.0
bDrawOnlyIfSelected=True
End Object
RenderComponent=DrawSphere0
Components.Add(DrawSphere0)
Begin Object Class=SpriteComponent Name=Sprite
Sprite=Texture2D'EditorResources.S_RadForce'
HiddenGame=True
AlwaysLoadOnClient=False
AlwaysLoadOnServer=False
SpriteCategoryName="Physics"
End Object
Components.Add(Sprite)
TickGroup=TG_PreAsyncWork
ForceStrength=10.0
ForceRadius=200.0
ForceFalloff=RIF_Constant
RadialForceMode=RFT_Force
`if(`__TW_PERFORMANCE_)
// SimProxy is wasteful unless SeqAct_Toggle is used!
RemoteRole=ROLE_None
`else
RemoteRole=ROLE_SimulatedProxy
`endif
bNoDelete=true
bAlwaysRelevant=true
NetUpdateFrequency=0.1
bOnlyDirtyReplication=true
bForceApplyToCloth=True
bForceApplyToFluid=True
bForceApplyToRigidBodies=True
bForceApplyToProjectiles=False
CollideWithChannels={(
Default=True,
Pawn=True,
Vehicle=True,
Water=True,
GameplayPhysics=True,
EffectPhysics=True,
Untitled1=True,
Untitled2=True,
Untitled3=True,
Untitled4=True,
Cloth=True,
FluidDrain=True,
)}
}