00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Particle.hpp"
00020 #include "Singletons.hpp"
00021 #include "MathFuncs.hpp"
00022
00023 CParticle::CParticle()
00024 : m_LastAniUpdate(sgl::get_clock().GetElapsedTime()*1000),
00025 m_AniSpeed(1000),
00026 m_SpawnTime(0),
00027 m_LifeTime(1000),
00028 m_StartAlpha(0),
00029 m_EndAlpha(255),
00030 m_StartVelX(0.0f),
00031 m_EndVelX(0.0f),
00032 m_StartVelY(0.0f),
00033 m_EndVelY(0.0f)
00034 {}
00035
00036 CParticle::~CParticle()
00037 {}
00038
00039 void CParticle::Init(const std::string& TexName, float FrameWidth, float FrameHeight, int FrameCount)
00040 {
00042
00043 m_SpawnTime = sgl::get_clock().GetElapsedTime()*1000;
00044 m_LastAniUpdate = sgl::get_clock().GetElapsedTime()*1000;
00045 }
00046
00047 bool CParticle::Remove()
00048 {
00049 return (sgl::get_clock().GetElapsedTime()*1000 - m_SpawnTime > m_LifeTime);
00050 }
00051
00052 void CParticle::Update()
00053 {
00054 float Time = ((sgl::get_clock().GetElapsedTime()*1000 - m_SpawnTime)) / m_LifeTime;
00055
00056 float ScaleX = lerp(m_StartScaleX,m_EndScaleX,Time);
00057 float ScaleY = lerp(m_StartScaleY,m_EndScaleY,Time);
00058
00059 m_Sprite.SetScale(ScaleX,ScaleY);
00060
00061
00062 int Red = lerp(m_StartRed,m_EndRed,Time);
00063 int Green = lerp(m_StartGreen,m_EndGreen,Time);
00064 int Blue = lerp(m_StartBlue,m_EndBlue,Time);
00065 int Alpha = lerp(m_StartAlpha,m_EndAlpha,Time);
00066
00067 m_Sprite.SetColor(sf::Color(Red,Green,Blue,Alpha));
00068
00069
00070 float VelX = lerp(m_StartVelX,m_EndVelX,Time);
00071 float VelY = lerp(m_StartVelY,m_EndVelY,Time);
00072
00073 m_Sprite.Move(VelX,VelY);
00074
00075 if(sgl::get_clock().GetElapsedTime()*1000 - m_LastAniUpdate > m_AniSpeed)
00076 {
00077 m_LastAniUpdate = sgl::get_clock().GetElapsedTime()*1000;
00079 }
00080 }
00081
00082 void CParticle::Draw()
00083 {
00084 sgl::get_window().Draw(m_Sprite);
00085 }