aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/particles/particles.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/public/particles/particles.h')
-rw-r--r--mp/src/public/particles/particles.h35
1 files changed, 27 insertions, 8 deletions
diff --git a/mp/src/public/particles/particles.h b/mp/src/public/particles/particles.h
index 16b48e74..4066d85e 100644
--- a/mp/src/public/particles/particles.h
+++ b/mp/src/public/particles/particles.h
@@ -154,6 +154,7 @@ enum ParticleFunctionType_t
struct CParticleVisibilityInputs
{
+ float m_flCameraBias;
float m_flInputMin;
float m_flInputMax;
float m_flAlphaScaleMin;
@@ -668,7 +669,7 @@ public:
}
// should the constraint be run only once after all other constraints?
- virtual bool IsFinalConstaint( void ) const
+ virtual bool IsFinalConstraint( void ) const
{
return false;
}
@@ -720,6 +721,12 @@ public:
return false;
}
+ // Does this operator require that particles remain in the order they were emitted?
+ virtual bool RequiresOrderInvariance( void ) const
+ {
+ return false;
+ }
+
// Called when the SFM wants to skip forward in time
virtual void SkipToTime( float flTime, CParticleCollection *pParticles, void *pContext ) const {}
@@ -881,7 +888,9 @@ private:
DMXELEMENT_UNPACK_FIELD( "Visibility Alpha Scale minimum","0", float, VisibilityInputs.m_flAlphaScaleMin ) \
DMXELEMENT_UNPACK_FIELD( "Visibility Alpha Scale maximum","1", float, VisibilityInputs.m_flAlphaScaleMax ) \
DMXELEMENT_UNPACK_FIELD( "Visibility Radius Scale minimum","1", float, VisibilityInputs.m_flRadiusScaleMin ) \
- DMXELEMENT_UNPACK_FIELD( "Visibility Radius Scale maximum","1", float, VisibilityInputs.m_flRadiusScaleMax )
+ DMXELEMENT_UNPACK_FIELD( "Visibility Radius Scale maximum","1", float, VisibilityInputs.m_flRadiusScaleMax ) \
+ DMXELEMENT_UNPACK_FIELD( "Visibility Camera Depth Bias", "0", float, VisibilityInputs.m_flCameraBias )
+
// DMXELEMENT_UNPACK_FIELD( "Visibility Use Bounding Box for Proxy", "0", bool, VisibilityInputs.m_bUseBBox )
// DMXELEMENT_UNPACK_FIELD( "Visibility Bounding Box Scale", "1.0", float, VisibilityInputs.m_flBBoxScale )
@@ -961,6 +970,7 @@ struct CParticleVisibilityData
{
float m_flAlphaVisibility;
float m_flRadiusVisibility;
+ float m_flCameraBias;
bool m_bUseVisibility;
};
@@ -1062,7 +1072,7 @@ public:
float *GetInitialFloatAttributePtrForWrite( int nAttribute, int nParticleNumber );
fltx4 *GetInitialM128AttributePtrForWrite( int nAttribute, size_t *pStrideOut );
- void Simulate( float dt );
+ void Simulate( float dt, bool updateBboxOnly );
void SkipToTime( float t );
// the camera objetc may be compared for equality against control point objects
@@ -1094,14 +1104,17 @@ public:
// Used to retrieve the position of a control point
// somewhere between m_fCurTime and m_fCurTime - m_fPreviousDT
- void GetControlPointAtTime( int nControlPoint, float flTime, Vector *pControlPoint );
- void GetControlPointAtPrevTime( int nControlPoint, Vector *pControlPoint );
+ void GetControlPointAtTime( int nControlPoint, float flTime, Vector *pControlPoint ) const;
+ void GetControlPointAtPrevTime( int nControlPoint, Vector *pControlPoint ) const;
void GetControlPointOrientationAtTime( int nControlPoint, float flTime, Vector *pForward, Vector *pRight, Vector *pUp );
void GetControlPointTransformAtTime( int nControlPoint, float flTime, matrix3x4_t *pMat );
void GetControlPointTransformAtTime( int nControlPoint, float flTime, VMatrix *pMat );
void GetControlPointTransformAtTime( int nControlPoint, float flTime, CParticleSIMDTransformation *pXForm );
int GetHighestControlPoint( void ) const;
+ // Has this particle moved recently (since the last simulation?)
+ bool HasMoved() const;
+
// Control point accessed:
// NOTE: Unlike the definition's version of these methods,
// these OR-in the masks of their children.
@@ -1249,6 +1262,7 @@ private:
bool ComputeIsTranslucent();
bool ComputeIsTwoPass();
bool ComputeIsBatchable();
+ bool ComputeRequiresOrderInvariance();
void LabelTextureUsage( void );
@@ -1270,6 +1284,7 @@ public:
int m_nMaxAllowedParticles;
bool m_bDormant;
bool m_bEmissionStopped;
+ bool m_bRequiresOrderInvariance;
int m_LocalLightingCP;
Color m_LocalLighting;
@@ -1337,6 +1352,7 @@ private:
// How many frames have we drawn?
int m_nDrawnFrames;
+ int m_nSimulatedFrames;
Vector m_Center; // average of particle centers
@@ -1805,9 +1821,12 @@ inline fltx4 *CParticleCollection::GetM128AttributePtrForWrite( int nAttribute,
{
// NOTE: If you hit this assertion, it means your particle operator isn't returning
// the appropriate fields in the RequiredAttributesMask call
- Assert( !m_bIsRunningInitializers || ( m_nPerParticleInitializedAttributeMask & (1 << nAttribute) ) );
- Assert( !m_bIsRunningOperators || ( m_nPerParticleUpdatedAttributeMask & (1 << nAttribute) ) );
- Assert( m_nParticleFloatStrides[nAttribute] != 0 );
+ if ( !HushAsserts() )
+ {
+ Assert( !m_bIsRunningInitializers || ( m_nPerParticleInitializedAttributeMask & (1 << nAttribute) ) );
+ Assert( !m_bIsRunningOperators || ( m_nPerParticleUpdatedAttributeMask & (1 << nAttribute) ) );
+ Assert( m_nParticleFloatStrides[nAttribute] != 0 );
+ }
*(pStrideOut) = m_nParticleFloatStrides[ nAttribute ]/4;
return reinterpret_cast<fltx4 *>( m_pParticleAttributes[ nAttribute ] );