unit particles can now have float values for emission rates. This allows also emission rates smaller than 1 like 0.01 for example

This commit is contained in:
Titus Tscharntke 2010-09-24 16:36:59 +00:00
parent 61b66fb761
commit cd65927924
6 changed files with 27 additions and 16 deletions

View File

@ -111,7 +111,7 @@ void ParticleSystemType::load(const XmlNode *particleSystemNode, const string &d
//emission rate
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
emissionRate= emissionRateNode->getAttribute("value")->getIntValue();
emissionRate= emissionRateNode->getAttribute("value")->getFloatValue();
//energy max
const XmlNode *energyMaxNode= particleSystemNode->getChild("energy-max");
@ -234,7 +234,7 @@ void ParticleSystemTypeSplash::load(const string &dir, const string &path,Render
//emission rate fade
const XmlNode *emissionRateFadeNode= particleSystemNode->getChild("emission-rate-fade");
emissionRateFade= emissionRateFadeNode->getAttribute("value")->getIntValue();
emissionRateFade= emissionRateFadeNode->getAttribute("value")->getFloatValue();
//spread values
const XmlNode *verticalSpreadNode= particleSystemNode->getChild("vertical-spread");

View File

@ -57,7 +57,7 @@ protected:
float sizeNoEnergy;
float speed;
float gravity;
int emissionRate;
float emissionRate;
int energyMax;
int energyVar;
string mode;
@ -102,7 +102,7 @@ public:
SplashParticleSystem *create();
private:
int emissionRateFade;
float emissionRateFade;
float verticalSpreadA;
float verticalSpreadB;
float horizontalSpreadA;

View File

@ -110,7 +110,7 @@ void UnitParticleSystemType::load(const XmlNode *particleSystemNode, const strin
//emission rate
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
emissionRate= emissionRateNode->getAttribute("value")->getIntValue();
emissionRate= emissionRateNode->getAttribute("value")->getFloatValue();
//energy max
const XmlNode *energyMaxNode= particleSystemNode->getChild("energy-max");

View File

@ -55,7 +55,7 @@ protected:
float sizeNoEnergy;
float speed;
float gravity;
int emissionRate;
float emissionRate;
int energyMax;
int energyVar;
bool relative;

View File

@ -112,7 +112,8 @@ protected:
Vec3f pos;
Vec4f color;
Vec4f colorNoEnergy;
int emissionRate;
float emissionRate;
float emissionState;
int maxParticleEnergy;
int varParticleEnergy;
float particleSize;
@ -149,7 +150,7 @@ public:
void setPos(Vec3f pos);
void setColor(Vec4f color);
void setColorNoEnergy(Vec4f color);
void setEmissionRate(int emissionRate);
void setEmissionRate(float emissionRate);
void setMaxParticleEnergy(int maxParticleEnergy);
void setVarParticleEnergy(int varParticleEnergy);
void setParticleSize(float particleSize);
@ -397,7 +398,7 @@ public:
private:
ProjectileParticleSystem *prevParticleSystem;
int emissionRateFade;
float emissionRateFade;
float verticalSpreadA;
float verticalSpreadB;
float horizontalSpreadA;
@ -411,7 +412,7 @@ public:
virtual void initParticle(Particle *p, int particleIndex);
virtual void updateParticle(Particle *p);
void setEmissionRateFade(int emissionRateFade) {this->emissionRateFade= emissionRateFade;}
void setEmissionRateFade(float emissionRateFade) {this->emissionRateFade= emissionRateFade;}
void setVerticalSpreadA(float verticalSpreadA) {this->verticalSpreadA= verticalSpreadA;}
void setVerticalSpreadB(float verticalSpreadB) {this->verticalSpreadB= verticalSpreadB;}
void setHorizontalSpreadA(float horizontalSpreadA) {this->horizontalSpreadA= horizontalSpreadA;}

View File

@ -57,7 +57,8 @@ ParticleSystem::ParticleSystem(int particleCount) {
pos= Vec3f(0.0f);
color= Vec4f(1.0f);
colorNoEnergy= Vec4f(0.0f);
emissionRate= 15;
emissionRate= 15.0f;
emissionState= 1.0f;
speed= 1.0f;
teamcolorNoEnergy=false;
teamcolorEnergy=false;
@ -94,10 +95,19 @@ void ParticleSystem::update() {
}
if(state != ParticleSystem::sFade){
for(int i = 0; i < emissionRate; ++i){
emissionState=emissionState+emissionRate;
int emissionIntValue=emissionState;
for(int i = 0; i < emissionIntValue; i++){
Particle *p = createParticle();
initParticle(p, i);
}
emissionState=emissionState-(float)emissionIntValue;
if(aliveParticleCount==0){
Particle *p = createParticle();
initParticle(p, 0);
emissionState=0;
}
}
}
}
@ -143,7 +153,7 @@ void ParticleSystem::setColorNoEnergy(Vec4f colorNoEnergy){
this->colorNoEnergy= colorNoEnergy;
}
void ParticleSystem::setEmissionRate(int emissionRate){
void ParticleSystem::setEmissionRate(float emissionRate){
this->emissionRate= emissionRate;
}
@ -531,7 +541,7 @@ RainParticleSystem::RainParticleSystem(int particleCount):ParticleSystem(particl
setWind(0.0f, 0.0f);
setRadius(20.0f);
setEmissionRate(25);
setEmissionRate(25.0f);
setParticleSize(3.0f);
setColor(Vec4f(0.5f, 0.5f, 0.5f, 0.3f));
setSpeed(0.2f);
@ -583,7 +593,7 @@ SnowParticleSystem::SnowParticleSystem(int particleCount):ParticleSystem(particl
setWind(0.0f, 0.0f);
setRadius(30.0f);
setEmissionRate(2);
setEmissionRate(2.0f);
setParticleSize(0.2f);
setColor(Vec4f(0.8f, 0.8f, 0.8f, 0.8f));
setSpeed(0.05f);
@ -672,7 +682,7 @@ AttackParticleSystem::Primitive AttackParticleSystem::strToPrimitive(const strin
// ===========================================================================
ProjectileParticleSystem::ProjectileParticleSystem(int particleCount): AttackParticleSystem(particleCount){
setEmissionRate(20);
setEmissionRate(20.0f);
setColor(Vec4f(1.0f, 0.3f, 0.0f, 0.5f));
setMaxParticleEnergy(100);
setVarParticleEnergy(50);