//--------------------------------------------------------------------------- void TLinkLabelEx::CMFontChanged(TMessage &Message) { TWinControl::Dispatch(&Message); AdjustBounds(); }
LTBOOL CScatterFX::CreateObject( ILTClient* pClientDE ) { if( !CSpecialFX::CreateObject( pClientDE ) ) return LTFALSE; m_hObject = LTNULL; LTVector pos; g_pLTClient->GetObjectPos( m_hServerObject, &pos ); m_vMinBounds = pos - m_vDims; m_vMaxBounds = pos + m_vDims; // grab the subvolumes and particles from the blind object data uint32 numVolumes = 0; if( m_nBlindDataIndex != 0xffffffff ) { // grab the blind data uint8* blindData = NULL; uint32 blindDataSize = 0; if( m_pClientDE->GetBlindObjectData( m_nBlindDataIndex, SCATTER_BLINDOBJECTID, blindData, blindDataSize ) != LT_OK ) return LTFALSE; uint8* curBlindData = blindData; uint32 fltSz = sizeof(float); // get the number of subvolumes numVolumes = *((uint32*)curBlindData); curBlindData += 4; if( numVolumes ) m_pSubVolumes = debug_newa( CScatterFXSubVolume, numVolumes ); m_nNumSubVolumes = numVolumes; for( uint32 i = 0; i < numVolumes; i++ ) { // get the position of this subvolume LTVector pos; pos.x = *((float*)curBlindData); curBlindData += fltSz; pos.y = *((float*)curBlindData); curBlindData += fltSz; pos.z = *((float*)curBlindData); curBlindData += fltSz; // get the dimensions of this subvolume LTVector dims; dims.x = *((float*)curBlindData); curBlindData += fltSz; dims.y = *((float*)curBlindData); curBlindData += fltSz; dims.z = *((float*)curBlindData); curBlindData += fltSz; // get the number of particles in this volume uint32 numParticles = *((uint32*)curBlindData); curBlindData += 4; ASSERT( numParticles ); // this will be dealloced by the subvolume it is passed down to CScatterFXParticle* particles = debug_newa( CScatterFXParticle, numParticles ); for( uint32 j = 0; j < numParticles; j++ ) { particles[j].pos.x = *((float*)curBlindData); curBlindData += fltSz; particles[j].pos.y = *((float*)curBlindData); curBlindData += fltSz; particles[j].pos.z = *((float*)curBlindData); curBlindData += fltSz; particles[j].color = *((uint32*)curBlindData) & 0x00ffffff; curBlindData += 4; particles[j].scale = *((float*)curBlindData); curBlindData += fltSz; particles[j].waveRot = *curBlindData; curBlindData++; particles[j].waveStart = *curBlindData; curBlindData++; //-0---- float tmp = (float)rand() / (float)RAND_MAX; tmp *= 2.0f * PI; particles[j].xoffset = (float)sin( tmp ) * m_fWidth * particles[j].scale; particles[j].yoffset = (float)cos( tmp ) * m_fWidth * particles[j].scale; //------ } AdjustBounds( pos, dims ); m_pSubVolumes[i].Init( this, pos, dims, numParticles, particles ); } // we're done with the blind data for this object, free it m_pClientDE->FreeBlindObjectData( m_nBlindDataIndex, SCATTER_BLINDOBJECTID ); } return LTTRUE; }