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:
parent
61b66fb761
commit
cd65927924
|
@ -111,7 +111,7 @@ void ParticleSystemType::load(const XmlNode *particleSystemNode, const string &d
|
||||||
|
|
||||||
//emission rate
|
//emission rate
|
||||||
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
|
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
|
||||||
emissionRate= emissionRateNode->getAttribute("value")->getIntValue();
|
emissionRate= emissionRateNode->getAttribute("value")->getFloatValue();
|
||||||
|
|
||||||
//energy max
|
//energy max
|
||||||
const XmlNode *energyMaxNode= particleSystemNode->getChild("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
|
//emission rate fade
|
||||||
const XmlNode *emissionRateFadeNode= particleSystemNode->getChild("emission-rate-fade");
|
const XmlNode *emissionRateFadeNode= particleSystemNode->getChild("emission-rate-fade");
|
||||||
emissionRateFade= emissionRateFadeNode->getAttribute("value")->getIntValue();
|
emissionRateFade= emissionRateFadeNode->getAttribute("value")->getFloatValue();
|
||||||
|
|
||||||
//spread values
|
//spread values
|
||||||
const XmlNode *verticalSpreadNode= particleSystemNode->getChild("vertical-spread");
|
const XmlNode *verticalSpreadNode= particleSystemNode->getChild("vertical-spread");
|
||||||
|
|
|
@ -57,7 +57,7 @@ protected:
|
||||||
float sizeNoEnergy;
|
float sizeNoEnergy;
|
||||||
float speed;
|
float speed;
|
||||||
float gravity;
|
float gravity;
|
||||||
int emissionRate;
|
float emissionRate;
|
||||||
int energyMax;
|
int energyMax;
|
||||||
int energyVar;
|
int energyVar;
|
||||||
string mode;
|
string mode;
|
||||||
|
@ -102,7 +102,7 @@ public:
|
||||||
SplashParticleSystem *create();
|
SplashParticleSystem *create();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int emissionRateFade;
|
float emissionRateFade;
|
||||||
float verticalSpreadA;
|
float verticalSpreadA;
|
||||||
float verticalSpreadB;
|
float verticalSpreadB;
|
||||||
float horizontalSpreadA;
|
float horizontalSpreadA;
|
||||||
|
|
|
@ -110,7 +110,7 @@ void UnitParticleSystemType::load(const XmlNode *particleSystemNode, const strin
|
||||||
|
|
||||||
//emission rate
|
//emission rate
|
||||||
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
|
const XmlNode *emissionRateNode= particleSystemNode->getChild("emission-rate");
|
||||||
emissionRate= emissionRateNode->getAttribute("value")->getIntValue();
|
emissionRate= emissionRateNode->getAttribute("value")->getFloatValue();
|
||||||
|
|
||||||
//energy max
|
//energy max
|
||||||
const XmlNode *energyMaxNode= particleSystemNode->getChild("energy-max");
|
const XmlNode *energyMaxNode= particleSystemNode->getChild("energy-max");
|
||||||
|
|
|
@ -55,7 +55,7 @@ protected:
|
||||||
float sizeNoEnergy;
|
float sizeNoEnergy;
|
||||||
float speed;
|
float speed;
|
||||||
float gravity;
|
float gravity;
|
||||||
int emissionRate;
|
float emissionRate;
|
||||||
int energyMax;
|
int energyMax;
|
||||||
int energyVar;
|
int energyVar;
|
||||||
bool relative;
|
bool relative;
|
||||||
|
|
|
@ -112,7 +112,8 @@ protected:
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
Vec4f color;
|
Vec4f color;
|
||||||
Vec4f colorNoEnergy;
|
Vec4f colorNoEnergy;
|
||||||
int emissionRate;
|
float emissionRate;
|
||||||
|
float emissionState;
|
||||||
int maxParticleEnergy;
|
int maxParticleEnergy;
|
||||||
int varParticleEnergy;
|
int varParticleEnergy;
|
||||||
float particleSize;
|
float particleSize;
|
||||||
|
@ -149,7 +150,7 @@ public:
|
||||||
void setPos(Vec3f pos);
|
void setPos(Vec3f pos);
|
||||||
void setColor(Vec4f color);
|
void setColor(Vec4f color);
|
||||||
void setColorNoEnergy(Vec4f color);
|
void setColorNoEnergy(Vec4f color);
|
||||||
void setEmissionRate(int emissionRate);
|
void setEmissionRate(float emissionRate);
|
||||||
void setMaxParticleEnergy(int maxParticleEnergy);
|
void setMaxParticleEnergy(int maxParticleEnergy);
|
||||||
void setVarParticleEnergy(int varParticleEnergy);
|
void setVarParticleEnergy(int varParticleEnergy);
|
||||||
void setParticleSize(float particleSize);
|
void setParticleSize(float particleSize);
|
||||||
|
@ -397,7 +398,7 @@ public:
|
||||||
private:
|
private:
|
||||||
ProjectileParticleSystem *prevParticleSystem;
|
ProjectileParticleSystem *prevParticleSystem;
|
||||||
|
|
||||||
int emissionRateFade;
|
float emissionRateFade;
|
||||||
float verticalSpreadA;
|
float verticalSpreadA;
|
||||||
float verticalSpreadB;
|
float verticalSpreadB;
|
||||||
float horizontalSpreadA;
|
float horizontalSpreadA;
|
||||||
|
@ -411,7 +412,7 @@ public:
|
||||||
virtual void initParticle(Particle *p, int particleIndex);
|
virtual void initParticle(Particle *p, int particleIndex);
|
||||||
virtual void updateParticle(Particle *p);
|
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 setVerticalSpreadA(float verticalSpreadA) {this->verticalSpreadA= verticalSpreadA;}
|
||||||
void setVerticalSpreadB(float verticalSpreadB) {this->verticalSpreadB= verticalSpreadB;}
|
void setVerticalSpreadB(float verticalSpreadB) {this->verticalSpreadB= verticalSpreadB;}
|
||||||
void setHorizontalSpreadA(float horizontalSpreadA) {this->horizontalSpreadA= horizontalSpreadA;}
|
void setHorizontalSpreadA(float horizontalSpreadA) {this->horizontalSpreadA= horizontalSpreadA;}
|
||||||
|
|
|
@ -57,7 +57,8 @@ ParticleSystem::ParticleSystem(int particleCount) {
|
||||||
pos= Vec3f(0.0f);
|
pos= Vec3f(0.0f);
|
||||||
color= Vec4f(1.0f);
|
color= Vec4f(1.0f);
|
||||||
colorNoEnergy= Vec4f(0.0f);
|
colorNoEnergy= Vec4f(0.0f);
|
||||||
emissionRate= 15;
|
emissionRate= 15.0f;
|
||||||
|
emissionState= 1.0f;
|
||||||
speed= 1.0f;
|
speed= 1.0f;
|
||||||
teamcolorNoEnergy=false;
|
teamcolorNoEnergy=false;
|
||||||
teamcolorEnergy=false;
|
teamcolorEnergy=false;
|
||||||
|
@ -94,10 +95,19 @@ void ParticleSystem::update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(state != ParticleSystem::sFade){
|
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();
|
Particle *p = createParticle();
|
||||||
initParticle(p, i);
|
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;
|
this->colorNoEnergy= colorNoEnergy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParticleSystem::setEmissionRate(int emissionRate){
|
void ParticleSystem::setEmissionRate(float emissionRate){
|
||||||
this->emissionRate= emissionRate;
|
this->emissionRate= emissionRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,7 +541,7 @@ RainParticleSystem::RainParticleSystem(int particleCount):ParticleSystem(particl
|
||||||
setWind(0.0f, 0.0f);
|
setWind(0.0f, 0.0f);
|
||||||
setRadius(20.0f);
|
setRadius(20.0f);
|
||||||
|
|
||||||
setEmissionRate(25);
|
setEmissionRate(25.0f);
|
||||||
setParticleSize(3.0f);
|
setParticleSize(3.0f);
|
||||||
setColor(Vec4f(0.5f, 0.5f, 0.5f, 0.3f));
|
setColor(Vec4f(0.5f, 0.5f, 0.5f, 0.3f));
|
||||||
setSpeed(0.2f);
|
setSpeed(0.2f);
|
||||||
|
@ -583,7 +593,7 @@ SnowParticleSystem::SnowParticleSystem(int particleCount):ParticleSystem(particl
|
||||||
setWind(0.0f, 0.0f);
|
setWind(0.0f, 0.0f);
|
||||||
setRadius(30.0f);
|
setRadius(30.0f);
|
||||||
|
|
||||||
setEmissionRate(2);
|
setEmissionRate(2.0f);
|
||||||
setParticleSize(0.2f);
|
setParticleSize(0.2f);
|
||||||
setColor(Vec4f(0.8f, 0.8f, 0.8f, 0.8f));
|
setColor(Vec4f(0.8f, 0.8f, 0.8f, 0.8f));
|
||||||
setSpeed(0.05f);
|
setSpeed(0.05f);
|
||||||
|
@ -672,7 +682,7 @@ AttackParticleSystem::Primitive AttackParticleSystem::strToPrimitive(const strin
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
|
|
||||||
ProjectileParticleSystem::ProjectileParticleSystem(int particleCount): AttackParticleSystem(particleCount){
|
ProjectileParticleSystem::ProjectileParticleSystem(int particleCount): AttackParticleSystem(particleCount){
|
||||||
setEmissionRate(20);
|
setEmissionRate(20.0f);
|
||||||
setColor(Vec4f(1.0f, 0.3f, 0.0f, 0.5f));
|
setColor(Vec4f(1.0f, 0.3f, 0.0f, 0.5f));
|
||||||
setMaxParticleEnergy(100);
|
setMaxParticleEnergy(100);
|
||||||
setVarParticleEnergy(50);
|
setVarParticleEnergy(50);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user