-
Notifications
You must be signed in to change notification settings - Fork 0
/
Snow.cpp
42 lines (41 loc) · 2.18 KB
/
Snow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//--------------------------------------------------------------------------------------------------------------------
/// @file Snow.h
/// @brief idem as in the fire file
//--------------------------------------------------------------------------------------------------------------------
#include "Snow.h"
Snow::Snow(int _numberOfParticles, glm::vec3 _positionSnow) : Emitter(_numberOfParticles, _positionSnow)
{
m_numberOfParticles = _numberOfParticles;
m_positionEmitter = _positionSnow;
}
//--------------------------------------------------------------------------------------------------------------------
void Snow::update(float _deltaTime)
{
for(int i=0; i<m_numberOfParticles; ++i)
{
// update if the particle is alive
if(m_listOfParticles[i].isDead()==0)
{
m_listOfParticles[i].update(_deltaTime);
// if the particle hits the ground set velocity to zero zo the particles stay on the ground till it dies (melting)
if(m_listOfParticles[i].getYPosition()<-99)
{
m_listOfParticles[i].setVelocity(glm::vec3(0,0,0));
}
}
else
{ // reset to the default values if the particle is dead
m_listOfParticles[i].setPosition(glm::vec3((float)rand()/(float)RAND_MAX*200.0-100.0,99,(float)rand()/(float)RAND_MAX*200.0-100.0));
m_listOfParticles[i].setAcceleration(glm::vec3((float)rand()/(float)RAND_MAX*0.002-0.001,0,(float)rand()/(float)RAND_MAX*0.001-0.0005));
m_listOfParticles[i].setVelocity((glm::vec3(0,-((float)rand()/RAND_MAX*0.5+0.05),0)));
m_listOfParticles[i].setColour(glm::vec3(1,0.95,0.95));
m_listOfParticles[i].setSize((float)rand()/(float)RAND_MAX*2.75+0.5);
m_listOfParticles[i].setDeltaSize(0.002);
m_listOfParticles[i].setLifeSpan((float)rand()/(float)RAND_MAX*5.0-2.5);
m_listOfParticles[i].setDeltaLifeSpan(0.02);
m_listOfParticles[i].setLifeLimit((float)rand()/(float)RAND_MAX*10.0f+5.0f);
m_listOfParticles[i].setTransparency((float)rand()/(float)RAND_MAX*15.0+7.5f);
m_listOfParticles[i].setDeltaTransparency(0.02);
}
}
}