diff options
Diffstat (limited to 'mp/src/public/particles/particles.h')
| -rw-r--r-- | mp/src/public/particles/particles.h | 35 |
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 ] ); |