mirror of
https://github.com/unknownworlds/NS.git
synced 2024-12-11 13:21:17 +00:00
384 lines
12 KiB
C++
384 lines
12 KiB
C++
|
#include "AvHParticleTemplateClient.h"
|
||
|
#include "cl_dll/hud.h"
|
||
|
#include "cl_dll/parsemsg.h"
|
||
|
#include "cl_dll/cl_util.h"
|
||
|
#include "cl_dll/parsemsg.h"
|
||
|
#include "cl_dll/demo.h"
|
||
|
#include "common/demo_api.h"
|
||
|
|
||
|
int AvHParticleTemplateListClient::InitializeDemoPlayback(int inSize, unsigned char* inBuffer)
|
||
|
{
|
||
|
// Read one particle template and add it to the list
|
||
|
int theBytesRead = 0;
|
||
|
|
||
|
AvHParticleTemplate theTemplate;
|
||
|
|
||
|
// Read all fields
|
||
|
string theTemplateName;
|
||
|
LoadStringData(theTemplateName, inBuffer, theBytesRead);
|
||
|
theTemplate.SetName(theTemplateName);
|
||
|
|
||
|
uint32 theMaxParticles;
|
||
|
LOAD_DATA(theMaxParticles);
|
||
|
theTemplate.SetMaxParticles(theMaxParticles);
|
||
|
|
||
|
float theParticleSize;
|
||
|
LOAD_DATA(theParticleSize);
|
||
|
theTemplate.SetParticleSize(theParticleSize);
|
||
|
|
||
|
float theParticleSystemLifetime;
|
||
|
LOAD_DATA(theParticleSystemLifetime);
|
||
|
theTemplate.SetParticleSystemLifetime(theParticleSystemLifetime);
|
||
|
|
||
|
float theParticleLifetime;
|
||
|
LOAD_DATA(theParticleLifetime);
|
||
|
theTemplate.SetParticleLifetime(theParticleLifetime);
|
||
|
|
||
|
string theSpriteName;
|
||
|
LoadStringData(theSpriteName, inBuffer, theBytesRead);
|
||
|
theTemplate.SetSprite(theSpriteName);
|
||
|
|
||
|
ShapeType theGenerationShape;
|
||
|
LOAD_DATA(theGenerationShape);
|
||
|
theTemplate.SetGenerationShape(theGenerationShape);
|
||
|
|
||
|
string theGenerationEntityName;
|
||
|
LoadStringData(theGenerationEntityName, inBuffer, theBytesRead);
|
||
|
theTemplate.SetGenerationEntityName(theGenerationEntityName);
|
||
|
|
||
|
string theParticleSystemToGenerate;
|
||
|
LoadStringData(theParticleSystemToGenerate, inBuffer, theBytesRead);
|
||
|
theTemplate.SetParticleSystemToGenerate(theParticleSystemToGenerate);
|
||
|
|
||
|
int theParticleSystemIndexToGenerate;
|
||
|
LOAD_DATA(theParticleSystemIndexToGenerate);
|
||
|
theTemplate.SetParticleSystemIndexToGenerate(theParticleSystemIndexToGenerate);
|
||
|
|
||
|
int theGenerationEntityIndex;
|
||
|
LOAD_DATA(theGenerationEntityIndex);
|
||
|
theTemplate.SetGenerationEntityIndex(theGenerationEntityIndex);
|
||
|
|
||
|
float theGenerationEntityParameter;
|
||
|
LOAD_DATA(theGenerationEntityParameter);
|
||
|
theTemplate.SetGenerationEntityParameter(theGenerationEntityParameter);
|
||
|
|
||
|
ShapeType theStartingVelocityShape;
|
||
|
LOAD_DATA(theStartingVelocityShape);
|
||
|
theTemplate.SetStartingVelocityShape(theStartingVelocityShape);
|
||
|
|
||
|
ParticleParams theGenerationParams;
|
||
|
LOAD_DATA(theGenerationParams);
|
||
|
theTemplate.SetGenerationParams(theGenerationParams);
|
||
|
|
||
|
ParticleParams theStartingVelocityParams;
|
||
|
LOAD_DATA(theStartingVelocityParams);
|
||
|
theTemplate.SetStartingVelocityParams(theStartingVelocityParams);
|
||
|
|
||
|
uint32 theGenerationRate;
|
||
|
LOAD_DATA(theGenerationRate);
|
||
|
theTemplate.SetGenerationRate(theGenerationRate);
|
||
|
|
||
|
int theParticleFlags;
|
||
|
LOAD_DATA(theParticleFlags);
|
||
|
theTemplate.SetFlags(theParticleFlags);
|
||
|
|
||
|
PSVector theGravity;
|
||
|
LOAD_DATA(theGravity);
|
||
|
theTemplate.SetGravity(theGravity);
|
||
|
|
||
|
float theAnimationSpeed;
|
||
|
LOAD_DATA(theAnimationSpeed);
|
||
|
theTemplate.SetAnimationSpeed(theAnimationSpeed);
|
||
|
|
||
|
int theNumSpriteFrames;
|
||
|
LOAD_DATA(theNumSpriteFrames);
|
||
|
theTemplate.SetNumSpriteFrames(theNumSpriteFrames);
|
||
|
|
||
|
float theParticleScaling;
|
||
|
LOAD_DATA(theParticleScaling);
|
||
|
theTemplate.SetParticleScaling(theParticleScaling);
|
||
|
|
||
|
int theRenderMode;
|
||
|
LOAD_DATA(theRenderMode);
|
||
|
theTemplate.SetRenderMode(theRenderMode);
|
||
|
|
||
|
float theMaxAlpha;
|
||
|
LOAD_DATA(theMaxAlpha);
|
||
|
theTemplate.SetMaxAlpha(theMaxAlpha);
|
||
|
|
||
|
// Save the template
|
||
|
this->mTemplateList.push_back(theTemplate);
|
||
|
|
||
|
return theBytesRead;
|
||
|
}
|
||
|
|
||
|
void AvHParticleTemplateListClient::InitializeDemoRecording() const
|
||
|
{
|
||
|
// Loop through all our particle templates, and write out each one
|
||
|
int theNumTemplates = this->GetNumberTemplates();
|
||
|
for(int i = 0; i < theNumTemplates; i++)
|
||
|
{
|
||
|
const AvHParticleTemplate* theTemplate = this->GetTemplateAtIndex(i);
|
||
|
ASSERT(theTemplate);
|
||
|
|
||
|
int theTotalSize = 0;
|
||
|
|
||
|
// Calculate total size needed to store template
|
||
|
string theTemplateName = theTemplate->GetName();
|
||
|
theTotalSize += GetDataSize(theTemplateName);
|
||
|
|
||
|
uint32 theMaxParticles = theTemplate->GetMaxParticles();
|
||
|
theTotalSize += sizeof(theMaxParticles);
|
||
|
|
||
|
float theParticleSize = theTemplate->GetParticleSize();
|
||
|
theTotalSize += sizeof(theParticleSize);
|
||
|
|
||
|
float theParticleSystemLifetime = theTemplate->GetParticleSystemLifetime();
|
||
|
theTotalSize += sizeof(theParticleSystemLifetime);
|
||
|
|
||
|
float theParticleLifetime = theTemplate->GetParticleLifetime();
|
||
|
theTotalSize += sizeof(theParticleLifetime);
|
||
|
|
||
|
string theSpriteName = theTemplate->GetSprite();
|
||
|
theTotalSize += GetDataSize(theSpriteName);
|
||
|
|
||
|
ShapeType theGenerationShape = theTemplate->GetGenerationShape();
|
||
|
theTotalSize += sizeof(theGenerationShape);
|
||
|
|
||
|
string theGenerationEntityName = theTemplate->GetGenerationEntityName();
|
||
|
theTotalSize += GetDataSize(theGenerationEntityName);
|
||
|
|
||
|
string theParticleSystemToGenerate = theTemplate->GetParticleSystemToGenerate();
|
||
|
theTotalSize += GetDataSize(theParticleSystemToGenerate);
|
||
|
|
||
|
int theParticleSystemIndexToGenerate = theTemplate->GetParticleSystemIndexToGenerate();
|
||
|
theTotalSize += sizeof(theParticleSystemIndexToGenerate);
|
||
|
|
||
|
int theGenerationEntityIndex = theTemplate->GetGenerationEntityIndex();
|
||
|
theTotalSize += sizeof(theGenerationEntityIndex);
|
||
|
|
||
|
float theGenerationEntityParam = theTemplate->GetGenerationEntityParameter();
|
||
|
theTotalSize += sizeof(theGenerationEntityParam);
|
||
|
|
||
|
ShapeType theStartingVelocityShape = theTemplate->GetStartingVelocityShape();
|
||
|
theTotalSize += sizeof(theStartingVelocityShape);
|
||
|
|
||
|
ParticleParams theGenerationParams;
|
||
|
theTemplate->GetGenerationParams(theGenerationParams);
|
||
|
theTotalSize += sizeof(theGenerationParams);
|
||
|
|
||
|
ParticleParams theStartingVelocityParams;
|
||
|
theTemplate->GetStartingVelocityParams(theStartingVelocityParams);
|
||
|
theTotalSize += sizeof(theStartingVelocityParams);
|
||
|
|
||
|
uint32 theGenerationRate = theTemplate->GetGenerationRate();
|
||
|
theTotalSize += sizeof(theGenerationRate);
|
||
|
|
||
|
int theParticleFlags = theTemplate->GetFlags();
|
||
|
theTotalSize += sizeof(theParticleFlags);
|
||
|
|
||
|
PSVector theGravity;
|
||
|
theTemplate->GetGravity(theGravity);
|
||
|
theTotalSize += sizeof(theGravity);
|
||
|
|
||
|
float theAnimationSpeed = theTemplate->GetAnimationSpeed();
|
||
|
theTotalSize += sizeof(theAnimationSpeed);
|
||
|
|
||
|
int theNumSpriteFrames = theTemplate->GetNumSpriteFrames();
|
||
|
theTotalSize += sizeof(theNumSpriteFrames);
|
||
|
|
||
|
float theParticleScaling = theTemplate->GetParticleScaling();
|
||
|
theTotalSize += sizeof(theParticleScaling);
|
||
|
|
||
|
int theRenderMode = theTemplate->GetRenderMode();
|
||
|
theTotalSize += sizeof(theRenderMode);
|
||
|
|
||
|
float theMaxAlpha = theTemplate->GetMaxAlpha();
|
||
|
theTotalSize += sizeof(theMaxAlpha);
|
||
|
|
||
|
// New memory
|
||
|
unsigned char* theCharArray = new unsigned char[theTotalSize];
|
||
|
ASSERT(theCharArray);
|
||
|
int theCounter = 0;
|
||
|
|
||
|
// Write out each field
|
||
|
SaveStringData(theCharArray, theTemplateName, theCounter);
|
||
|
SAVE_DATA(theMaxParticles);
|
||
|
SAVE_DATA(theParticleSize);
|
||
|
SAVE_DATA(theParticleSystemLifetime);
|
||
|
SAVE_DATA(theParticleLifetime);
|
||
|
SaveStringData(theCharArray, theSpriteName, theCounter);
|
||
|
SAVE_DATA(theGenerationShape);
|
||
|
SaveStringData(theCharArray, theGenerationEntityName, theCounter);
|
||
|
SaveStringData(theCharArray, theParticleSystemToGenerate, theCounter);
|
||
|
SAVE_DATA(theParticleSystemIndexToGenerate);
|
||
|
SAVE_DATA(theGenerationEntityIndex);
|
||
|
SAVE_DATA(theGenerationEntityParam);
|
||
|
SAVE_DATA(theStartingVelocityShape);
|
||
|
SAVE_DATA(theGenerationParams);
|
||
|
SAVE_DATA(theStartingVelocityParams);
|
||
|
SAVE_DATA(theGenerationRate);
|
||
|
SAVE_DATA(theParticleFlags);
|
||
|
SAVE_DATA(theGravity);
|
||
|
SAVE_DATA(theAnimationSpeed);
|
||
|
SAVE_DATA(theNumSpriteFrames);
|
||
|
SAVE_DATA(theParticleScaling);
|
||
|
SAVE_DATA(theRenderMode);
|
||
|
SAVE_DATA(theMaxAlpha);
|
||
|
|
||
|
// Make sure we wrote exact amount of data we were supposed to
|
||
|
ASSERT(theTotalSize == theCounter);
|
||
|
|
||
|
Demo_WriteBuffer(TYPE_PARTICLES, theTotalSize, theCharArray);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Clears out the templates and receives all new ones
|
||
|
int32
|
||
|
AvHParticleTemplateListClient::ReceiveFromNetworkStream()
|
||
|
{
|
||
|
int32 theBytesReceived = 0;
|
||
|
|
||
|
//this->mTemplateList.clear();
|
||
|
|
||
|
// Receive number of templates
|
||
|
//int theNumTemplates = READ_LONG();
|
||
|
//theBytesReceived += 4;
|
||
|
|
||
|
//for(int theLoop = 0; theLoop < theNumTemplates; theLoop++)
|
||
|
//{
|
||
|
// Read each one
|
||
|
AvHParticleTemplate theNewTemplate;
|
||
|
|
||
|
// Read name
|
||
|
char* theName = READ_STRING();
|
||
|
string theStringName = string(theName);
|
||
|
theNewTemplate.SetName(theStringName);
|
||
|
theBytesReceived += theStringName.length();
|
||
|
|
||
|
// Read max particles
|
||
|
uint32 theMaxParticles = READ_LONG();
|
||
|
theNewTemplate.SetMaxParticles(theMaxParticles);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read particle size
|
||
|
float theParticleSize = READ_COORD();
|
||
|
theNewTemplate.SetParticleSize(theParticleSize);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read sprite name
|
||
|
char* theStr = READ_STRING();
|
||
|
theStringName = theStr;
|
||
|
theNewTemplate.SetSprite(theStringName);
|
||
|
theBytesReceived += theStringName.length();
|
||
|
|
||
|
// Read particle SYSTEM lifetime
|
||
|
float theParticleSystemLifetime = (float)(READ_COORD());
|
||
|
theNewTemplate.SetParticleSystemLifetime(theParticleSystemLifetime);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read particle lifetime
|
||
|
float theParticleLifetime = (float)(READ_COORD());
|
||
|
theNewTemplate.SetParticleLifetime(theParticleLifetime);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Animation speed
|
||
|
float theAnimSpeed = (float)READ_COORD();
|
||
|
theNewTemplate.SetAnimationSpeed(theAnimSpeed);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Num frames in sprite
|
||
|
int theNumSpriteFrames = READ_BYTE();
|
||
|
theNewTemplate.SetNumSpriteFrames(theNumSpriteFrames);
|
||
|
theBytesReceived++;
|
||
|
|
||
|
// Scale particle over course of its life
|
||
|
float theParticleScaling = (float)READ_COORD();
|
||
|
theNewTemplate.SetParticleScaling(theParticleScaling);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Render mode
|
||
|
int theRenderMode = READ_BYTE();
|
||
|
theNewTemplate.SetRenderMode(theRenderMode);
|
||
|
theBytesReceived++;
|
||
|
|
||
|
// Read gen rate as long
|
||
|
uint32 theGenRate = READ_LONG();
|
||
|
theNewTemplate.SetGenerationRate(theGenRate);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read gen shape
|
||
|
ShapeType theGenerationShape = READ_BYTE();
|
||
|
theNewTemplate.SetGenerationShape(theGenerationShape);
|
||
|
theBytesReceived += 1;
|
||
|
|
||
|
// Read the generation params as 8 longs
|
||
|
uint32 theInnerLoop;
|
||
|
ParticleParams theGenParams;
|
||
|
for(theInnerLoop = 0; theInnerLoop < 8; theInnerLoop++)
|
||
|
{
|
||
|
theGenParams[theInnerLoop] = READ_LONG();
|
||
|
}
|
||
|
theNewTemplate.SetGenerationParams(theGenParams);
|
||
|
theBytesReceived += 32;
|
||
|
|
||
|
// Read generation entity name (if any)
|
||
|
int theGenerationEntityIndex = READ_LONG();
|
||
|
theNewTemplate.SetGenerationEntityIndex(theGenerationEntityIndex);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read generation entity param
|
||
|
float theGenerationEntityParam = READ_COORD();
|
||
|
theNewTemplate.SetGenerationEntityParameter(theGenerationEntityParam);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read starting velocity shape
|
||
|
ShapeType theStartingVelocityShape = READ_BYTE();
|
||
|
theNewTemplate.SetStartingVelocityShape(theStartingVelocityShape);
|
||
|
theBytesReceived += 1;
|
||
|
|
||
|
// Read the starting velocity params as 8 longs
|
||
|
ParticleParams theVelParams;
|
||
|
for(theInnerLoop = 0; theInnerLoop < 8; theInnerLoop++)
|
||
|
{
|
||
|
theVelParams[theInnerLoop] = READ_LONG();
|
||
|
}
|
||
|
theNewTemplate.SetStartingVelocityParams(theVelParams);
|
||
|
theBytesReceived += 32;
|
||
|
|
||
|
// Read gravity
|
||
|
PSVector theGravity;
|
||
|
for(theInnerLoop = 0; theInnerLoop < 3; theInnerLoop++)
|
||
|
{
|
||
|
theGravity[theInnerLoop] = READ_COORD();
|
||
|
}
|
||
|
theNewTemplate.SetGravity(theGravity);
|
||
|
theBytesReceived += 12;
|
||
|
|
||
|
// Read number initial particles
|
||
|
//int theNumInitialParticles = READ_LONG();
|
||
|
//theNewTemplate.SetInitialParticles(theNumInitialParticles);
|
||
|
//theBytesReceived += 4;
|
||
|
|
||
|
float theMaxAlpha = READ_COORD();
|
||
|
theNewTemplate.SetMaxAlpha(theMaxAlpha);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read particle system to generate
|
||
|
int theParticleSystemIndexToGenerate = READ_LONG();
|
||
|
theNewTemplate.SetParticleSystemIndexToGenerate(theParticleSystemIndexToGenerate);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Read flags
|
||
|
int theFlags = READ_LONG();
|
||
|
theNewTemplate.SetFlags(theFlags);
|
||
|
theBytesReceived += 4;
|
||
|
|
||
|
// Add it on the end
|
||
|
this->mTemplateList.insert(this->mTemplateList.end(), theNewTemplate);
|
||
|
//}
|
||
|
|
||
|
return theBytesReceived;
|
||
|
}
|
||
|
|