Files
firestorm/Gameleap/code/mw4/Code/Test ElementRenderer/BuildCurves.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

1140 lines
31 KiB
C++

#include "BuildCurves.hpp"
//----------------------------------------------------------------------------
//
gosFX::PointCloud::Specification*
CreatePointCloud(
gosFX::EffectLibrary *library,
unsigned index,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::PointCloud::Specification* spec =
new gosFX::PointCloud::Specification(gosFX::PointCloudClassID);
Check_Object(spec);
library->m_effects[index] = spec;
spec->m_name = "PointCloud";
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
event->m_localToParent(3,1) = -0.2f;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//----------------------
// Override given curves
//----------------------
//
spec->m_minimumChildSeed.SetCurve(0.5f, 0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f, 0.5f);
spec->m_maxParticleCount = 150;
spec->m_startingPopulation.SetCurve(3.0f);
spec->m_particlesPerSecond.SetCurve(50.0f);
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
spec->m_startingSpeed.m_seeded = true;
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 3.0f);
spec->m_pLifeSpan.m_ageCurve.SetCurve(2.0f);
spec->m_pLifeSpan.m_seeded = false;
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_ageCurve.SetCurve(3.0f);
spec->m_pAccelerationY.m_seeded = false;
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(7.0f);
spec->m_pEtherVelocityX.m_seeded = false;
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
spec->m_pDrag.m_ageCurve.SetCurve(0.3f);
spec->m_pDrag.m_seeded = false;
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pRed.m_seeded = true;
spec->m_pRed.m_seedCurve.SetCurve(0.5f, 1.0f);
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pGreen.m_seeded = true;
spec->m_pGreen.m_seedCurve.SetCurve(1.0f, 0.5f);
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
spec->m_pBlue.m_seeded = true;
spec->m_pBlue.m_seedCurve.SetCurve(0.0f, 2.0f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::ShardCloud::Specification*
CreateShardCloud(
gosFX::EffectLibrary *library,
unsigned index,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::ShardCloud::Specification* spec = new gosFX::ShardCloud::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "ShardCloud";
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(10.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxParticleCount = 200;
spec->m_startingPopulation.SetCurve(0.0f);
spec->m_particlesPerSecond.SetCurve(50.0f);
spec->m_emitterSizeX.SetCurve(0.0f);
spec->m_emitterSizeY.SetCurve(0.0f);
spec->m_emitterSizeZ.SetCurve(0.0f);
spec->m_minimumDeviation.SetCurve(0.0f);
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
spec->m_startingSpeed.m_seeded = true;
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 3.0f);
spec->m_pLifeSpan.m_ageCurve.SetCurve(4.0f);
spec->m_pLifeSpan.m_seeded = false;
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationX.m_seeded = false;
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_ageCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_seeded = false;
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationZ.m_seeded = false;
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityX.m_seeded = false;
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityY.m_seeded = false;
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityZ.m_seeded = false;
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
spec->m_pDrag.m_seeded = false;
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pRed.m_seeded = false;
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pGreen.m_seeded = false;
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
spec->m_pBlue.m_seeded = false;
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
spec->m_pAlpha.m_seeded = false;
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
//
//----------------------------------
// Fill in the Spinning cloud curves
//----------------------------------
//
spec->m_randomStartingRotation = true;
spec->m_alignZUsingX = false;
spec->m_alignZUsingY = true;
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
spec->m_pSpin.m_seeded = true;
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
spec->m_pScale.m_ageCurve.SetCurve(1.0f);
spec->m_pScale.m_seeded = false;
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
//
//-------------------------------
// Fill in the Shard cloud curves
//-------------------------------
//
spec->m_size.m_ageCurve.SetCurve(1.0f, 2.0f);
spec->m_size.m_seeded = false;
spec->m_size.m_seedCurve.SetCurve(1.0f);
spec->m_angularity.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
spec->m_angularity.m_seeded = true;
spec->m_angularity.m_seedCurve.SetCurve(-0.9f, 0.9f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::PertCloud::Specification*
CreatePertCloud(
gosFX::EffectLibrary *library,
unsigned index,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::PertCloud::Specification* spec = new gosFX::PertCloud::Specification(5);
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "PertCloud";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
// event->m_localToParent(3,1) = -1.5f;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(10.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxParticleCount = 140;
spec->m_startingPopulation.SetCurve(0.0f);
spec->m_particlesPerSecond.SetCurve(50.0f);
spec->m_emitterSizeX.SetCurve(1.0f);
spec->m_emitterSizeY.SetCurve(1.0f);
spec->m_emitterSizeZ.SetCurve(1.0f);
spec->m_minimumDeviation.SetCurve(0.0f);
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
spec->m_startingSpeed.m_ageCurve.SetCurve(2.0f);
spec->m_startingSpeed.m_seeded = true;
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 2.0f);
spec->m_pLifeSpan.m_ageCurve.SetCurve(2.0f);
spec->m_pLifeSpan.m_seeded = false;
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationX.m_seeded = false;
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_ageCurve.SetCurve(-3.0f);
spec->m_pAccelerationY.m_seeded = false;
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationZ.m_seeded = false;
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityX.m_seeded = false;
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityY.m_seeded = false;
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityZ.m_seeded = false;
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
spec->m_pDrag.m_seeded = false;
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
spec->m_pRed.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pRed.m_seeded = false;
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
spec->m_pGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pGreen.m_seeded = false;
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
spec->m_pBlue.m_ageCurve.SetCurve(0.25f);
spec->m_pBlue.m_seeded = false;
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pAlpha.m_seeded = false;
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
//
//----------------------------------
// Fill in the Spinning cloud curves
//----------------------------------
//
spec->m_randomStartingRotation = true;
spec->m_alignZUsingX = true;
spec->m_alignZUsingY = false;
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
spec->m_pSpin.m_seeded = true;
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
spec->m_pScale.m_ageCurve.SetCurve(4.0, 1.0f);
spec->m_pScale.m_seeded = false;
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
//
//-------------------------------
// Fill in the pert cloud curves
//-------------------------------
//
spec->m_pCenterRed.m_ageCurve.SetCurve(1.0, 1.0f);
spec->m_pCenterRed.m_seeded = false;
spec->m_pCenterRed.m_seedCurve.SetCurve(1.0f);
spec->m_pCenterGreen.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_pCenterGreen.m_seeded = false;
spec->m_pCenterGreen.m_seedCurve.SetCurve(1.0f);
spec->m_pCenterBlue.m_ageCurve.SetCurve(0.25f);
spec->m_pCenterBlue.m_seeded = false;
spec->m_pCenterBlue.m_seedCurve.SetCurve(1.0f);
spec->m_pCenterAlpha.m_ageCurve.SetCurve(1.0f);
spec->m_pCenterAlpha.m_seeded = false;
spec->m_pCenterAlpha.m_seedCurve.SetCurve(1.0f);
spec->m_size.m_ageCurve.SetCurve(0.2f);
spec->m_size.m_seeded = false;
spec->m_size.m_seedCurve.SetCurve(1.0f);
spec->m_perturbation.m_ageCurve.SetCurve(0.25f);
spec->m_perturbation.m_seeded = true;
spec->m_perturbation.m_seedCurve.SetCurve(-1.0f, 1.0f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::CardCloud::Specification*
CreateCardCloud(
gosFX::EffectLibrary *library,
unsigned index,
MidLevelRenderer::MLRTexture *texture,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::CardCloud::Specification* spec = new gosFX::CardCloud::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "CardCloud";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
Check_Object(texture);
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
// event->m_localToParent(3,1) = -1.5f;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(1.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxParticleCount = 20;
spec->m_startingPopulation.SetCurve(0.0f);
spec->m_particlesPerSecond.SetCurve(5.0f);
spec->m_emitterSizeX.SetCurve(1.0f);
spec->m_emitterSizeY.SetCurve(1.0f);
spec->m_emitterSizeZ.SetCurve(1.0f);
spec->m_minimumDeviation.SetCurve(0.0f);
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
spec->m_startingSpeed.m_ageCurve.SetCurve(1.0f);
spec->m_startingSpeed.m_seeded = true;
spec->m_startingSpeed.m_seedCurve.SetCurve(-1.0f, 1.0f);
spec->m_pLifeSpan.m_ageCurve.SetCurve(3.0f);
spec->m_pLifeSpan.m_seeded = false;
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationX.m_seeded = false;
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_ageCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_seeded = false;
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationZ.m_seeded = false;
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityX.m_seeded = false;
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityY.m_seeded = false;
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityZ.m_seeded = false;
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
spec->m_pDrag.m_seeded = false;
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
spec->m_pRed.m_ageCurve.SetCurve(1.0f);
spec->m_pRed.m_seeded = false;
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
spec->m_pGreen.m_ageCurve.SetCurve(1.0f);
spec->m_pGreen.m_seeded = false;
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
spec->m_pBlue.m_ageCurve.SetCurve(1.0f);
spec->m_pBlue.m_seeded = false;
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
spec->m_pAlpha.m_seeded = false;
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
//
//----------------------------------
// Fill in the Spinning cloud curves
//----------------------------------
//
spec->m_randomStartingRotation = false;
spec->m_alignZUsingX = true;
spec->m_alignZUsingY = true;
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
spec->m_pSpin.m_seeded = true;
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
spec->m_pScale.m_ageCurve.SetCurve(0.2f);
spec->m_pScale.m_seeded = false;
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
spec->m_pIndex.m_ageCurve.SetCurve(0.0f, 3.999f);
spec->m_pIndex.m_seeded = false;
spec->m_pIndex.m_seedCurve.SetCurve(1.0f);
spec->m_USize.SetCurve(0.5f);
spec->m_VSize.SetCurve(0.5f);
spec->m_animated = true;
spec->m_width = 2;
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::EffectCloud::Specification*
CreateEffectCloud(
gosFX::EffectLibrary *library,
unsigned index,
unsigned effect,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::EffectCloud::Specification* spec = new gosFX::EffectCloud::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "EffectCloud";
spec->m_effectID = index;
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
// event->m_localToParent(3,1) = -1.5f;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(10.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxParticleCount = 12;
spec->m_startingPopulation.SetCurve(3.0f);
spec->m_particlesPerSecond.SetCurve(2.0f);
spec->m_emitterSizeX.SetCurve(1.0f);
spec->m_emitterSizeY.SetCurve(1.0f);
spec->m_emitterSizeZ.SetCurve(1.0f);
spec->m_minimumDeviation.SetCurve(0.0f);
spec->m_maximumDeviation.SetCurve(Stuff::Pi_Over_6);
spec->m_startingSpeed.m_ageCurve.SetCurve(2.0f);
spec->m_startingSpeed.m_seeded = true;
spec->m_startingSpeed.m_seedCurve.SetCurve(1.0f, 2.0f);
spec->m_pLifeSpan.m_ageCurve.SetCurve(1.0f);
spec->m_pLifeSpan.m_seeded = false;
spec->m_pLifeSpan.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationX.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationX.m_seeded = false;
spec->m_pAccelerationX.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationY.m_ageCurve.SetCurve(-2.0f);
spec->m_pAccelerationY.m_seeded = false;
spec->m_pAccelerationY.m_seedCurve.SetCurve(1.0f);
spec->m_pAccelerationZ.m_ageCurve.SetCurve(0.0f);
spec->m_pAccelerationZ.m_seeded = false;
spec->m_pAccelerationZ.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityX.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityX.m_seeded = false;
spec->m_pEtherVelocityX.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityY.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityY.m_seeded = false;
spec->m_pEtherVelocityY.m_seedCurve.SetCurve(1.0f);
spec->m_pEtherVelocityZ.m_ageCurve.SetCurve(0.0f);
spec->m_pEtherVelocityZ.m_seeded = false;
spec->m_pEtherVelocityZ.m_seedCurve.SetCurve(1.0f);
spec->m_pDrag.m_ageCurve.SetCurve(0.0f);
spec->m_pDrag.m_seeded = false;
spec->m_pDrag.m_seedCurve.SetCurve(1.0f);
spec->m_pRed.m_ageCurve.SetCurve(1.0f);
spec->m_pRed.m_seeded = false;
spec->m_pRed.m_seedCurve.SetCurve(1.0f);
spec->m_pGreen.m_ageCurve.SetCurve(1.0f);
spec->m_pGreen.m_seeded = false;
spec->m_pGreen.m_seedCurve.SetCurve(1.0f);
spec->m_pBlue.m_ageCurve.SetCurve(1.0f);
spec->m_pBlue.m_seeded = false;
spec->m_pBlue.m_seedCurve.SetCurve(1.0f);
spec->m_pAlpha.m_ageCurve.SetCurve(1.0f);
spec->m_pAlpha.m_seeded = false;
spec->m_pAlpha.m_seedCurve.SetCurve(1.0f);
//
//----------------------------------
// Fill in the Spinning cloud curves
//----------------------------------
//
spec->m_particleEffectID = effect;
spec->m_randomStartingRotation = false;
spec->m_alignZUsingX = false;
spec->m_alignZUsingY = false;
spec->m_pSpin.m_ageCurve.SetCurve(Stuff::Pi_Over_2);
spec->m_pSpin.m_seeded = true;
spec->m_pSpin.m_seedCurve.SetCurve(-1.0f, 1.0f);
spec->m_pScale.m_ageCurve.SetCurve(1.0f);
spec->m_pScale.m_seeded = false;
spec->m_pScale.m_seedCurve.SetCurve(1.0f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::Card::Specification*
CreateCard(
gosFX::EffectLibrary *library,
unsigned index,
MidLevelRenderer::MLRTexture *texture,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::Card::Specification* spec =
new gosFX::Card::Specification(gosFX::CardClassID);
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "Card";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
Check_Object(texture);
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(1.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//----------------------------
// Set up the singleton curves
//----------------------------
//
spec->m_red.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_red.m_seeded = false;
spec->m_red.m_seedCurve.SetCurve(1.0f);
spec->m_green.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_green.m_seeded = false;
spec->m_green.m_seedCurve.SetCurve(1.0f);
spec->m_blue.m_ageCurve.SetCurve(0.25f);
spec->m_blue.m_seeded = false;
spec->m_blue.m_seedCurve.SetCurve(1.0f);
spec->m_alpha.m_ageCurve.SetCurve(1.0f);
spec->m_alpha.m_seeded = false;
spec->m_alpha.m_seedCurve.SetCurve(1.0f);
spec->m_spin.m_ageCurve.SetCurve(1.0f);
spec->m_spin.m_seeded = false;
spec->m_spin.m_seedCurve.SetCurve(1.0f);
spec->m_scale.m_ageCurve.SetCurve(0.2f);
spec->m_scale.m_seeded = false;
spec->m_scale.m_seedCurve.SetCurve(1.0f);
spec->m_randomStartingRotation = true;
spec->m_alignZUsingX = false;
spec->m_alignZUsingY = false;
//
//-------------------------------
// Fill in the Card cloud curves
//-------------------------------
//
spec->m_halfHeight.m_ageCurve.SetCurve(1.0f);
spec->m_halfHeight.m_seeded = false;
spec->m_halfHeight.m_seedCurve.SetCurve(1.0f);
spec->m_aspectRatio.m_ageCurve.SetCurve(1.0f);
spec->m_aspectRatio.m_seeded = false;
spec->m_aspectRatio.m_seedCurve.SetCurve(1.0f);
spec->m_index.m_ageCurve.SetCurve(0.0f, 3.999f);
spec->m_index.m_seeded = false;
spec->m_index.m_seedCurve.SetCurve(1.0f);
spec->m_USize.SetCurve(0.5f);
spec->m_VSize.SetCurve(0.5f);
spec->m_animated = true;
spec->SetWidth();
// spec->m_width = 2;
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::Tube::Specification*
CreateTube(
gosFX::EffectLibrary *library,
unsigned index,
MidLevelRenderer::MLRTexture *texture,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::Tube::Specification* spec = new gosFX::Tube::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "Tube";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::OneOneMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
Check_Object(texture);
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
spec->m_lifeSpan.SetCurve(4.0f);
#if 0
spec->m_minimumDeviation.SetCurve(0.0);
spec->m_maximumDeviation.SetCurve(1.0f);
spec->m_pDisplacement.m_ageCurve.SetCurve(0.0f, 2.0f);
spec->m_pDisplacement.m_seeded = false;
spec->m_pDisplacement.m_seedCurve.SetCurve(1.0f);
#endif
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxProfileCount = 21;
spec->m_profileType = gosFX::Tube::Specification::e_Pentagon;
spec->m_insideOut = false;
spec->BuildTemplate();
spec->m_profilesPerSecond.SetCurve(10.0f);
spec->m_pLifeSpan.SetCurve(2.0f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::Beam::Specification*
CreateBeam(
gosFX::EffectLibrary *library,
unsigned index,
MidLevelRenderer::MLRTexture *texture,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::Beam::Specification* spec = new gosFX::Beam::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "Beam";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::OneOneMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
Check_Object(texture);
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
spec->m_lifeSpan.SetCurve(4.0f);
#if 0
spec->m_minimumDeviation.SetCurve(0.0);
spec->m_maximumDeviation.SetCurve(1.0f);
spec->m_pDisplacement.m_ageCurve.SetCurve(0.0f, 2.0f);
spec->m_pDisplacement.m_seeded = false;
spec->m_pDisplacement.m_seedCurve.SetCurve(1.0f);
#endif
//
//---------------------------------
// Set up the particle cloud curves
//---------------------------------
//
spec->m_maxProfileCount = 21;
spec->m_profileType = gosFX::Beam::Specification::e_Pentagon;
spec->m_insideOut = false;
spec->BuildTemplate();
spec->m_profilesPerMeter.SetCurve(2.43f);
return spec;
}
//----------------------------------------------------------------------------
//
gosFX::Flare::Specification*
CreateFlare(
gosFX::EffectLibrary *library,
unsigned index,
MidLevelRenderer::MLRTexture *texture,
unsigned child
)
{
//
//-----------------------------------------
// Stick a new specification in the library
//-----------------------------------------
//
Check_Object(library);
Verify(!library->m_effects[index]);
gosFX::Flare::Specification* spec =
new gosFX::Flare::Specification;
Check_Object(spec);
library->m_effects[index] = spec;
//
//-------------------------
// Build a simple FX holder
//-------------------------
//
spec->m_name = "Flare";
spec->m_state.SetAlphaMode(MidLevelRenderer::MLRState::AlphaInvAlphaMode);
spec->m_state.SetPriority(MidLevelRenderer::MLRState::AlphaPriority);
Check_Object(texture);
spec->m_state.SetTextureHandle(texture->GetTextureHandle());
//
//------------------
// Set up the events
//------------------
//
if (child < EFFECT_COUNT)
{
gosFX::Event *event = new gosFX::Event;
Check_Object(event);
event->m_time = 0.0f;
event->m_flags = gosFX::Effect::DynamicWorldSpaceSimulationMode;
event->m_effectID = child;
event->m_localToParent = Stuff::LinearMatrix4D::Identity;
spec->AdoptEvent(event);
}
//
//--------------------------
// Set up the default curves
//--------------------------
//
spec->BuildDefaults();
//
//-------------------------
// Set up the effect curves
//-------------------------
//
spec->m_lifeSpan.SetCurve(1.0f);
spec->m_minimumChildSeed.SetCurve(0.0f);
spec->m_maximumChildSeed.SetCurve(1.0f);
//
//----------------------------
// Set up the singleton curves
//----------------------------
//
spec->m_red.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_red.m_seeded = false;
spec->m_red.m_seedCurve.SetCurve(1.0f);
spec->m_green.m_ageCurve.SetCurve(1.0f, 0.0f);
spec->m_green.m_seeded = false;
spec->m_green.m_seedCurve.SetCurve(1.0f);
spec->m_blue.m_ageCurve.SetCurve(0.25f);
spec->m_blue.m_seeded = false;
spec->m_blue.m_seedCurve.SetCurve(1.0f);
spec->m_alpha.m_ageCurve.SetCurve(1.0f);
spec->m_alpha.m_seeded = false;
spec->m_alpha.m_seedCurve.SetCurve(1.0f);
spec->m_scale.m_ageCurve.SetCurve(0.2f);
spec->m_scale.m_seeded = false;
spec->m_scale.m_seedCurve.SetCurve(1.0f);
return spec;
}