Exemplo n.º 1
0
//---------------------------------------------------------------------------
void TLinkLabelEx::CMFontChanged(TMessage &Message)
{
  TWinControl::Dispatch(&Message);
  AdjustBounds();
}
Exemplo n.º 2
0
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;
}