00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Projectile.hpp"
00020 #include "Singletons.hpp"
00021
00022 #include <cmath>
00023
00024 CProjectile::CProjectile()
00025 : m_SpeedX(0.0f),
00026 m_SpeedY(0.0f),
00027 m_SpeedLimitX(-99999.0f),
00028 m_SpeedLimitXSmaller(false),
00029 m_SpeedLimitY(-99999.0f),
00030 m_SpeedLimitYSmaller(false),
00031 m_AccelX(0.0f),
00032 m_AccelY(0.0f),
00033 m_AutoRotate(false),
00034 m_LastAniFrameInc(sgl::get_clock().GetElapsedTime()*1000),
00035 m_AniFrameDelay(999999)
00036 {}
00037
00038 CProjectile::~CProjectile()
00039 {
00040 }
00041
00042 void CProjectile::Init(sProjectileData ProjectileData)
00043 {
00044 m_SpeedX = ProjectileData.SpeedX;
00045 m_SpeedY = ProjectileData.SpeedY;
00046
00047 m_AccelX = ProjectileData.AccelX;
00048 m_AccelY = ProjectileData.AccelY;
00049
00050 m_AutoRotate = ProjectileData.AutoRotate;
00051
00052 m_SpeedLimitX = ProjectileData.SpeedLimitX;
00053 m_SpeedLimitXSmaller = ProjectileData.SpeedLimitXSmaller;
00054
00055 m_SpeedLimitY = ProjectileData.SpeedLimitY;
00056 m_SpeedLimitYSmaller = ProjectileData.SpeedLimitYSmaller;
00057
00058 m_LastAniFrameInc = sgl::get_clock().GetElapsedTime()*1000;
00059 m_AniFrameDelay = ProjectileData.FrameDelay;
00060
00061 m_Sprite.SetImage(sgl::get_imagemgr().get_img(ProjectileData.FileName));
00062
00063 m_Sprite.SetPosition(ProjectileData.X,ProjectileData.Y);
00064
00065 if(m_AutoRotate == true)
00066 {
00067 int Degree = (std::atan2(m_SpeedY, m_SpeedX) + M_PI / 2)*180.0f/M_PI;
00068 m_Sprite.SetRotation(Degree);
00069 }
00070
00071 m_CollisionSystem.Init(ProjectileData.CollisionFile);
00072 m_CollisionSystem.SetPosition(ProjectileData.X + m_Sprite.GetSize().x/2,ProjectileData.Y + m_Sprite.GetSize().y/2);
00073 }
00074
00075 void CProjectile::Update()
00076 {
00077 m_Sprite.Move(m_SpeedX,m_SpeedY);
00078
00079 m_SpeedX += m_AccelX;
00080 m_SpeedY += m_AccelY;
00081
00082 if(m_SpeedLimitXSmaller == true)
00083 {
00084 if(m_SpeedX > m_SpeedLimitX)
00085 {
00086 m_SpeedX = m_SpeedLimitX;
00087 }
00088 }
00089 else
00090 {
00091 if(m_SpeedX < m_SpeedLimitX)
00092 {
00093 m_SpeedX = m_SpeedLimitX;
00094 }
00095 }
00096
00097 if(m_SpeedLimitYSmaller == true)
00098 {
00099 if(m_SpeedY > m_SpeedLimitY)
00100 {
00101 m_SpeedY = m_SpeedLimitY;
00102 }
00103 }
00104 else
00105 {
00106 if(m_SpeedY < m_SpeedLimitY)
00107 {
00108 m_SpeedY = m_SpeedLimitY;
00109 }
00110 }
00111
00112 if(m_AutoRotate == true)
00113 {
00114 int Degree = (std::atan2(m_SpeedY,
00115 m_SpeedX) + M_PI / 2)*180.0f/M_PI;
00116 m_Sprite.SetRotation(Degree);
00117 }
00118
00119 if(sgl::get_clock().GetElapsedTime()*1000 - m_LastAniFrameInc > m_AniFrameDelay)
00120 {
00121 m_LastAniFrameInc = sgl::get_clock().GetElapsedTime()*1000;
00123
00124 }
00125
00126 m_CollisionSystem.SetPosition(m_Sprite.GetPosition().x,m_Sprite.GetPosition().y);
00127 }
00128