159 lines
4.5 KiB
Ucode
159 lines
4.5 KiB
Ucode
|
/**
|
||
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
||
|
*/
|
||
|
|
||
|
class FluidInfluenceComponent extends PrimitiveComponent
|
||
|
dependson(FluidSurfaceActor)
|
||
|
native(Fluid)
|
||
|
AutoExpandCategories(FluidInfluenceComponent)
|
||
|
hidecategories(Object,Collision,Lighting,Physics,PrimitiveComponent,Rendering)
|
||
|
editinlinenew;
|
||
|
|
||
|
|
||
|
enum EInfluenceType
|
||
|
{
|
||
|
Fluid_Flow,
|
||
|
Fluid_Raindrops,
|
||
|
Fluid_Wave,
|
||
|
Fluid_Sphere,
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/** Whether the effect is active and applying forces to the fluid. */
|
||
|
var() bool bActive;
|
||
|
|
||
|
/** If a specific FluidSurfaceActor is set, this influence won't automatically affect any other fluid and MaxDistance is ignored. */
|
||
|
var() FluidSurfaceActor FluidActor;
|
||
|
|
||
|
/** Type of fluid influence (a flow of waves, raindrops, or a single wave). */
|
||
|
var() EInfluenceType InfluenceType;
|
||
|
|
||
|
/** Maximum distance (from the fluid plane) from where this influence will affect a fluid. */
|
||
|
var() float MaxDistance;
|
||
|
|
||
|
|
||
|
/** Strength of the influencing force. */
|
||
|
var(FluidWave) interp float WaveStrength;
|
||
|
|
||
|
/** Wave frequency (can be 0 for a standing wave). */
|
||
|
var(FluidWave) interp float WaveFrequency;
|
||
|
|
||
|
/** Angular phase, in 0-360 degrees. */
|
||
|
var(FluidWave) interp float WavePhase;
|
||
|
|
||
|
/** Radius of the wave, in world space units. */
|
||
|
var(FluidWave) interp float WaveRadius;
|
||
|
|
||
|
|
||
|
|
||
|
/** Whether raindrops should fill the entire fluid (TRUE), or just in a circular area around the influenceactor (FALSE). */
|
||
|
var(FluidRaindrops) interp bool RaindropFillEntireFluid;
|
||
|
|
||
|
/** Radius of the area where raindrops fall. */
|
||
|
var(FluidRaindrops) interp float RaindropAreaRadius;
|
||
|
|
||
|
/** Radius of each raindrop, in world space units. */
|
||
|
var(FluidRaindrops) interp float RaindropRadius;
|
||
|
|
||
|
/** Strength of each raindrop. */
|
||
|
var(FluidRaindrops) interp float RaindropStrength;
|
||
|
|
||
|
/** Number of raindrops per second. */
|
||
|
var(FluidRaindrops) interp float RaindropRate;
|
||
|
|
||
|
|
||
|
|
||
|
/** How fast the flow moves thru the fluid, in world space units per second. */
|
||
|
var(FluidFlow) interp float FlowSpeed;
|
||
|
|
||
|
/** Number of flow ripples generated on the fluid surface. */
|
||
|
var(FluidFlow) interp int FlowNumRipples;
|
||
|
|
||
|
/** How much each flow ripple should oscillate sideways while moving down that flow direction. */
|
||
|
var(FluidFlow) interp float FlowSideMotionRadius;
|
||
|
|
||
|
/** Radius of each flow wave, in world space units. */
|
||
|
var(FluidFlow) interp float FlowWaveRadius;
|
||
|
|
||
|
/** Strength of each wave ripple. */
|
||
|
var(FluidFlow) interp float FlowStrength;
|
||
|
|
||
|
/** Frequency of up/down and sideways motion of each ripple. */
|
||
|
var(FluidFlow) interp float FlowFrequency;
|
||
|
|
||
|
|
||
|
/** Outer radius of the 3D sphere. While inside this radius, the force will increase as it moves closer to the fluid plane. */
|
||
|
var(FluidSphere) interp float SphereOuterRadius;
|
||
|
|
||
|
/** Inner radius of the 3D sphere. While inside this radius, the force will decrease as it moves closer to the fluid plane. */
|
||
|
var(FluidSphere) interp float SphereInnerRadius;
|
||
|
|
||
|
/** Strength of the force applied by the sphere. */
|
||
|
var(FluidSphere) interp float SphereStrength;
|
||
|
|
||
|
/** The "toggle" Kismet event will set this to true, which will enable/disable the influence for 1 tick, then automatically go back to its previous state. */
|
||
|
var transient bool bIsToggleTriggered;
|
||
|
|
||
|
var private native transient float CurrentAngle;
|
||
|
var private native transient float CurrentTimer;
|
||
|
|
||
|
/** The currently affected FluidSurfaceActor. */
|
||
|
var private native transient FluidSurfaceActor CurrentFluidActor;
|
||
|
|
||
|
|
||
|
cpptext
|
||
|
{
|
||
|
public:
|
||
|
// Base class interfaces
|
||
|
virtual void PostLoad( );
|
||
|
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent);
|
||
|
virtual void UpdateBounds( );
|
||
|
virtual void Tick( FLOAT DeltaTime );
|
||
|
|
||
|
// Influence functions
|
||
|
void UpdateFlow( FLOAT DeltaSeconds );
|
||
|
void UpdateRaindrops( FLOAT DeltaSeconds );
|
||
|
void UpdateWave( FLOAT DeltaSeconds );
|
||
|
void UpdateSphere( FLOAT DeltaSeconds );
|
||
|
void CheckSettings( UBOOL bUpdateIcon );
|
||
|
UBOOL IsTouching( AFluidSurfaceActor* Fluid );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
bActive=true
|
||
|
InfluenceType=Fluid_Wave
|
||
|
MaxDistance=1000.0
|
||
|
|
||
|
WaveStrength=40.0
|
||
|
WaveFrequency=1.0
|
||
|
WavePhase=0.0
|
||
|
WaveRadius=50.0
|
||
|
|
||
|
RaindropFillEntireFluid=True
|
||
|
RaindropAreaRadius=300.0
|
||
|
RaindropRadius=10.0
|
||
|
RaindropStrength=5.0
|
||
|
RaindropRate=20.0
|
||
|
|
||
|
FlowSpeed=100.0
|
||
|
FlowNumRipples=10
|
||
|
FlowSideMotionRadius=30.0
|
||
|
FlowWaveRadius=50.0
|
||
|
FlowStrength=20.0
|
||
|
FlowFrequency=4.0
|
||
|
|
||
|
SphereOuterRadius=100.0
|
||
|
SphereInnerRadius=50.0
|
||
|
SphereStrength=-40.0
|
||
|
|
||
|
bTickInEditor=True
|
||
|
CollideActors=False
|
||
|
BlockZeroExtent=False
|
||
|
BlockNonZeroExtent=False
|
||
|
BlockRigidBody=False
|
||
|
}
|