📄 particlecloud.cpp
字号:
#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 + -