⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 particlecloud.cpp

📁 机甲指挥官2源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "gosFXHeaders.hpp"

//==========================================================================//
// File:	 gosFX_ParticleCloud.cpp										//
// Contents: Base gosFX::ParticleCloud Component							//
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//
//
//############################################################################
//########################  gosFX::ParticleCloud__Specification  #############################
//############################################################################

//------------------------------------------------------------------------------
//
gosFX::ParticleCloud__Specification::ParticleCloud__Specification(
	Stuff::RegisteredClass::ClassID class_id,
	Stuff::MemoryStream *stream,
	int gfx_version
):
	Effect__Specification(class_id, stream, gfx_version)
{
	Check_Pointer(this);
	Check_Object(stream);
	Verify(gos_GetCurrentHeap() == Heap);

	//
	//-------------------
	// Load in the curves
	//-------------------
	//
	m_startingPopulation.Load(stream, gfx_version);
	m_particlesPerSecond.Load(stream, gfx_version);
	m_emitterSizeX.Load(stream, gfx_version);
	m_emitterSizeY.Load(stream, gfx_version);
	m_emitterSizeZ.Load(stream, gfx_version);
	m_minimumDeviation.Load(stream, gfx_version);
	m_maximumDeviation.Load(stream, gfx_version);
	m_startingSpeed.Load(stream, gfx_version);
	m_pLifeSpan.Load(stream, gfx_version);
	m_pEtherVelocityX.Load(stream, gfx_version);
	m_pEtherVelocityY.Load(stream, gfx_version);
	m_pEtherVelocityZ.Load(stream, gfx_version);
	m_pAccelerationX.Load(stream, gfx_version);
	m_pAccelerationY.Load(stream, gfx_version);
	m_pAccelerationZ.Load(stream, gfx_version);
	m_pDrag.Load(stream, gfx_version);
	m_pRed.Load(stream, gfx_version);
	m_pGreen.Load(stream, gfx_version);
	m_pBlue.Load(stream, gfx_version);
	m_pAlpha.Load(stream, gfx_version);

	*stream >> m_maxParticleCount;
}

//------------------------------------------------------------------------------
//
gosFX::ParticleCloud__Specification::ParticleCloud__Specification(
	Stuff::RegisteredClass::ClassID class_id
):
	Effect__Specification(class_id)
{
	Verify(gos_GetCurrentHeap() == Heap);
	m_maxParticleCount = 0;
	Check_Pointer(this);
}

//------------------------------------------------------------------------------
//
void
	gosFX::ParticleCloud__Specification::Save(Stuff::MemoryStream *stream)
{
	Check_Object(this);
	Check_Object(stream);
	Effect__Specification::Save(stream);

	//
	//----------------
	// Save our curves
	//----------------
	//
	m_startingPopulation.Save(stream);
	m_particlesPerSecond.Save(stream);
	m_emitterSizeX.Save(stream);
	m_emitterSizeY.Save(stream);
	m_emitterSizeZ.Save(stream);
	m_minimumDeviation.Save(stream);
	m_maximumDeviation.Save(stream);
	m_startingSpeed.Save(stream);
	m_pLifeSpan.Save(stream);
	m_pEtherVelocityX.Save(stream);
	m_pEtherVelocityY.Save(stream);
	m_pEtherVelocityZ.Save(stream);
	m_pAccelerationX.Save(stream);
	m_pAccelerationY.Save(stream);
	m_pAccelerationZ.Save(stream);
	m_pDrag.Save(stream);
	m_pRed.Save(stream);
	m_pGreen.Save(stream);
	m_pBlue.Save(stream);
	m_pAlpha.Save(stream);

	*stream << m_maxParticleCount;
}

//------------------------------------------------------------------------------
//
void 
	gosFX::ParticleCloud__Specification::BuildDefaults()
{

	Check_Object(this);
	Effect__Specification::BuildDefaults();

	m_startingPopulation.SetCurve(0.0f);
	m_particlesPerSecond.SetCurve(5.0f);

	m_emitterSizeX.SetCurve(0.0f);
	m_emitterSizeY.SetCurve(0.0f);
	m_emitterSizeZ.SetCurve(0.0f);

	m_minimumDeviation.SetCurve(0.0f);
	m_maximumDeviation.SetCurve(0.0f);

	m_startingSpeed.m_ageCurve.SetCurve(1.0f);
	m_startingSpeed.m_seeded = false;
	m_startingSpeed.m_seedCurve.SetCurve(1.0f);

	m_pLifeSpan.m_ageCurve.SetCurve(1.0f);
	m_pLifeSpan.m_seeded = false;
	m_pLifeSpan.m_seedCurve.SetCurve(1.0f);

	m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
	m_pAccelerationX.m_seeded = false;
	m_pAccelerationX.m_seedCurve.SetCurve(1.0f);

	m_pAccelerationY.m_ageCurve.SetCurve(0.0f);
	m_pAccelerationY.m_seeded = false;
	m_pAccelerationY.m_seedCurve.SetCurve(1.0f);

	m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
	m_pAccelerationZ.m_seeded = false;
	m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);

	m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
	m_pEtherVelocityX.m_seeded = false;
	m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);

	m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
	m_pEtherVelocityY.m_seeded = false;
	m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);

	m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
	m_pEtherVelocityZ.m_seeded = false;
	m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);

	m_pDrag.m_ageCurve.SetCurve(0.0f);
	m_pDrag.m_seeded = false;
	m_pDrag.m_seedCurve.SetCurve(1.0f);

	m_pRed.m_ageCurve.SetCurve(1.0f);
	m_pRed.m_seeded = false;
	m_pRed.m_seedCurve.SetCurve(1.0f);

	m_pGreen.m_ageCurve.SetCurve(1.0f);
	m_pGreen.m_seeded = false;
	m_pGreen.m_seedCurve.SetCurve(1.0f);

	m_pBlue.m_ageCurve.SetCurve(1.0f);
	m_pBlue.m_seeded = false;
	m_pBlue.m_seedCurve.SetCurve(1.0f);

	m_pAlpha.m_ageCurve.SetCurve(1.0f);
	m_pAlpha.m_seeded = false;
	m_pAlpha.m_seedCurve.SetCurve(1.0f);

}


//------------------------------------------------------------------------------
//
bool 
	gosFX::ParticleCloud__Specification::IsDataValid(bool fix_data)
{

	Check_Object(this);
	Stuff::Scalar min,max;
	  m_pLifeSpan.ExpensiveComputeRange(&min,&max);
	  if(min<0.0f) 
	  {
		if(fix_data)
		{
		m_pLifeSpan.m_ageCurve.SetCurve(1.0f);
		m_pLifeSpan.m_seeded = false;
		m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
		PAUSE(("Warning: Curve \"pLifeSpan\" in Effect \"%s\" Is Out of Range and has been Reset",(char *)m_name));

		}
		else
		return false;
	  }
	 
	  m_startingPopulation.ExpensiveComputeRange(&min,&max);
	  if(min<0.0f) 
			if(fix_data)
			{
				m_startingPopulation.SetCurve(0.0f);
				PAUSE(("Warning: Curve \"startingPopulation\" in Effect \"%s\" Is Out of Range and has been Reset",(char *)m_name));

			}
			else
				return false;
	
	if(m_maxParticleCount<1) 
		if(fix_data)
		{
			m_maxParticleCount=1;
			PAUSE(("Warning: Value \"maxParticleCount\" in Effect \"%s\" Is Out of Range and has been Reset",(char *)m_name));

		}
		else
			return false;
	
	return	Effect__Specification::IsDataValid(fix_data);
}

//------------------------------------------------------------------------------
//
void
	gosFX::ParticleCloud__Specification::Copy(ParticleCloud__Specification *spec)
{
	Check_Object(this);
	Check_Object(spec);
	Verify(gos_GetCurrentHeap() == Heap);

	Effect__Specification::Copy(spec);

	//
	//----------------
	// Copy the curves
	//----------------
	//
	gos_PushCurrentHeap(Heap);
	m_startingPopulation = spec->m_startingPopulation;
	m_particlesPerSecond = spec->m_particlesPerSecond;
	m_emitterSizeX = spec->m_emitterSizeX;
	m_emitterSizeY = spec->m_emitterSizeY;
	m_emitterSizeZ = spec->m_emitterSizeZ;
	m_minimumDeviation = spec->m_minimumDeviation;
	m_maximumDeviation = spec->m_maximumDeviation;
	m_startingSpeed = spec->m_startingSpeed;
	m_pLifeSpan = spec->m_pLifeSpan;
	m_pEtherVelocityX = spec->m_pEtherVelocityX;
	m_pEtherVelocityY = spec->m_pEtherVelocityY;
	m_pEtherVelocityZ = spec->m_pEtherVelocityZ;
	m_pAccelerationX = spec->m_pAccelerationX;
	m_pAccelerationY = spec->m_pAccelerationY;
	m_pAccelerationZ = spec->m_pAccelerationZ;
	m_pDrag = spec->m_pDrag;
	m_pRed = spec->m_pRed;
	m_pGreen = spec->m_pGreen;
	m_pBlue = spec->m_pBlue;
	m_pAlpha = spec->m_pAlpha;
	m_maxParticleCount = spec->m_maxParticleCount;
	gos_PopCurrentHeap();
}

//############################################################################
//############################  gosFX::ParticleCloud  ###############################
//############################################################################

gosFX::ParticleCloud::ClassData*
	gosFX::ParticleCloud::DefaultData = NULL;

//------------------------------------------------------------------------------
//
void
	gosFX::ParticleCloud::InitializeClass()
{
	Verify(!DefaultData);
	Verify(gos_GetCurrentHeap() == Heap);
	DefaultData =
		new ClassData(
			ParticleCloudClassID,
			"gosFX::ParticleCloud",
			Effect::DefaultData,
			NULL,
			NULL
		);
	Register_Object(DefaultData);
}

//------------------------------------------------------------------------------
//
void
	gosFX::ParticleCloud::TerminateClass()
{
	Unregister_Object(DefaultData);
	delete DefaultData;
	DefaultData = NULL;
}

//------------------------------------------------------------------------------
//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -