CEmitter* CParticleSystem::CreateEmitter(string name) { CEmitter* ToAdd = new CEmitter(); *ToAdd = m_mLoaded[name]; m_vActive.push_back(ToAdd); ToAdd->SetupParticle(); return ToAdd; }
void CText::draw( double fTime, int iScreenWidth, int iScreenHeight ) { updateMatrix( fTime ); if( miState == STATE_DISABLED ) { return; } WTFASSERT2( mpFont, "No valid font for %s", mszName ); if( miVertAlign == VERTALIGN_CENTER ) { float fHeight = mpFont->getHeight( mszText, mfSize ); mfOffsetY = -( fHeight - mfSize ) * 0.5f; } float fScale = 1.0f; if( mpAnimPlayer ) { tVector4 scaling = { 1.0f, 1.0f, 1.0f, 1.0f }; mpAnimPlayer->getScaling( &scaling ); fScale = scaling.fX; } bool bUseBatch = false; #if defined( UI_USE_BATCH ) bUseBatch = true; #endif // UI_USE_BATCH mpFont->drawString( mszText, mTotalMatrix.M( 0, 3 ), mTotalMatrix.M( 1, 3 ) + mfOffsetY, mfSize * fScale, (float)iScreenWidth, (float)iScreenHeight, mColor.fX, mColor.fY, mColor.fZ, mColor.fW, miAlign, bUseBatch ); // draw emitter if( mpAnimPlayer ) { CEmitter* pEmitter = mpAnimPlayer->getEmitter(); if( pEmitter ) { pEmitter->render(); } } }
//------------------------- // FX_AddEmitter //------------------------- CEmitter *FX_AddEmitter( vec3_t org, vec3_t vel, vec3_t accel, float size1, float size2, float sizeParm, float alpha1, float alpha2, float alphaParm, vec3_t rgb1, vec3_t rgb2, float rgbParm, vec3_t angs, vec3_t deltaAngs, vec3_t min, vec3_t max, float elasticity, int deathID, int impactID, int emitterID, float density, float variance, int killTime, qhandle_t model, int flags = 0, EMatImpactEffect matImpactFX /*MATIMPACTFX_NONE*/, int fxParm /*-1*/, int iGhoul2/*0*/, int entNum/*-1*/, int modelNum/*-1*/, int boltNum/*-1*/ ) { if ( theFxHelper.mFrameTime < 0 ) { // disallow adding effects when the system is paused return 0; } CEmitter *fx = new CEmitter; if ( fx ) { if (flags&FX_RELATIVE && iGhoul2>0) { assert(0);//not done // fx->SetBoltinfo( iGhoul2, entNum, modelNum, boltNum ); } fx->SetMatImpactFX(matImpactFX); fx->SetMatImpactParm(fxParm); fx->SetOrigin1( org ); fx->SetVel( vel ); fx->SetAccel( accel ); // RGB---------------- fx->SetRGBStart( rgb1 ); fx->SetRGBEnd( rgb2 ); if (( flags & FX_RGB_PARM_MASK ) == FX_RGB_WAVE ) { fx->SetRGBParm( rgbParm * PI * 0.001f ); } else if ( flags & FX_RGB_PARM_MASK ) { // rgbParm should be a value from 0-100.. fx->SetRGBParm(rgbParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } // Size---------------- fx->SetSizeStart( size1 ); fx->SetSizeEnd( size2 ); if (( flags & FX_SIZE_PARM_MASK ) == FX_SIZE_WAVE ) { fx->SetSizeParm( sizeParm * PI * 0.001f ); } else if ( flags & FX_SIZE_PARM_MASK ) { fx->SetSizeParm(sizeParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } // Alpha---------------- fx->SetAlphaStart( alpha1 ); fx->SetAlphaEnd( alpha2 ); if (( flags & FX_ALPHA_PARM_MASK ) == FX_ALPHA_WAVE ) { fx->SetAlphaParm( alphaParm * PI * 0.001f ); } else if ( flags & FX_ALPHA_PARM_MASK ) { fx->SetAlphaParm(alphaParm * 0.01f * killTime + theFxHelper.mTime + theFxHelper.mTimeFraction); } fx->SetAngles( angs ); fx->SetAngleDelta( deltaAngs ); fx->SetFlags( flags ); fx->SetModel( model ); fx->SetElasticity( elasticity ); fx->SetMin( min ); fx->SetMax( max ); fx->SetDeathFxID( deathID ); fx->SetImpactFxID( impactID ); fx->SetEmitterFxID( emitterID ); fx->SetDensity( density ); fx->SetVariance( variance ); fx->SetOldTime( theFxHelper.mTime ); fx->SetLastOrg( org ); fx->SetLastVel( vel ); FX_AddPrimitive( (CEffect**)&fx, killTime ); } return fx; }
//------------------------- // FX_AddEmitter //------------------------- CEmitter *FX_AddEmitter( vec3_t org, vec3_t vel, vec3_t accel, float size1, float size2, float sizeParm, float alpha1, float alpha2, float alphaParm, vec3_t rgb1, vec3_t rgb2, float rgbParm, vec3_t angs, vec3_t deltaAngs, vec3_t min, vec3_t max, float elasticity, int deathID, int impactID, int emitterID, float density, float variance, int killTime, qhandle_t model, int flags = 0 ) { if ( theFxHelper.mFrameTime < 1 ) { // disallow adding effects when the system is paused return 0; } CEmitter *fx = new CEmitter; if ( fx ) { fx->SetOrigin1( org ); fx->SetVel( vel ); fx->SetAccel( accel ); // RGB---------------- fx->SetRGBStart( rgb1 ); fx->SetRGBEnd( rgb2 ); if (( flags & FX_RGB_PARM_MASK ) == FX_RGB_WAVE ) { fx->SetRGBParm( rgbParm * PI * 0.001f ); } else if ( flags & FX_RGB_PARM_MASK ) { // rgbParm should be a value from 0-100.. fx->SetRGBParm( rgbParm * 0.01f * killTime + theFxHelper.mTime ); } // Size---------------- fx->SetSizeStart( size1 ); fx->SetSizeEnd( size2 ); if (( flags & FX_SIZE_PARM_MASK ) == FX_SIZE_WAVE ) { fx->SetSizeParm( sizeParm * PI * 0.001f ); } else if ( flags & FX_SIZE_PARM_MASK ) { fx->SetSizeParm( sizeParm * 0.01f * killTime + theFxHelper.mTime ); } // Alpha---------------- fx->SetAlphaStart( alpha1 ); fx->SetAlphaEnd( alpha2 ); if (( flags & FX_ALPHA_PARM_MASK ) == FX_ALPHA_WAVE ) { fx->SetAlphaParm( alphaParm * PI * 0.001f ); } else if ( flags & FX_ALPHA_PARM_MASK ) { fx->SetAlphaParm( alphaParm * 0.01f * killTime + theFxHelper.mTime ); } fx->SetAngles( angs ); fx->SetAngleDelta( deltaAngs ); fx->SetFlags( flags ); fx->SetModel( model ); fx->SetElasticity( elasticity ); fx->SetMin( min ); fx->SetMax( max ); fx->SetDeathFxID( deathID ); fx->SetImpactFxID( impactID ); fx->SetEmitterFxID( emitterID ); fx->SetDensity( density ); fx->SetVariance( variance ); fx->SetOldTime( theFxHelper.mTime ); fx->SetLastOrg( org ); fx->SetLastVel( vel ); FX_AddPrimitive( (CEffect**)&fx, killTime ); // in the editor, fx may now be NULL } return fx; }