00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00020
00021
00022
00024
00025
00027
00028 #ifndef SHIP_H
00029 #define SHIP_H
00030
00031 #include "Weapon.hpp"
00032 #include "CollisionSystem.hpp"
00033 #include "PowerUp.hpp"
00034 #include "Emitter.hpp"
00035
00036 #include <vector>
00037 #include <string>
00038 #include <log4cxx/logger.h>
00039
00040 #include <SFML/Graphics.hpp>
00041 #include <SFML/Audio.hpp>
00042
00044
00048 class CShip
00049 {
00050 public:
00052 CShip();
00053 ~CShip();
00054
00056 void Init(const std::string& FileName);
00057
00059 void Draw();
00060
00062 void Shoot();
00063
00065 void SetPosition(float X, float Y)
00066 {
00067 m_Sprite.SetPosition(X,Y);
00068 m_CollisionSystem.SetPosition(X + m_Sprite.GetSize().x/2,Y+m_Sprite.GetSize().y/2);
00069 }
00070
00072 void MoveX(int Direction);
00073
00075 void MoveY(int Direction);
00076
00078 float GetXPosition() const { return m_Sprite.GetPosition().x; }
00079
00081 float GetYPosition() const { return m_Sprite.GetPosition().y; }
00082
00084 const int* GetCurrentArmor() const { return &m_CurArmor; }
00085
00087 void SetCurArmor(int CurArmor)
00088 {
00089 m_CurArmor = (CurArmor > m_Armor) ? CurArmor : m_Armor;
00090 }
00091
00093 int GetMaxArmor() const { return m_Armor; }
00094
00096 const int* GetMaxArmorPtr() const { return &m_Armor; }
00097
00098
00101 void EquipWeapon(std::string Name);
00102
00105 void EquipWeapon(int GroupID);
00106
00108 void ResetWeapons();
00109
00111 bool CheckCollision(CPowerUp* CounterPart);
00112
00115 bool CheckCollision(CShip* CounterPart);
00116
00118 void Repair(int Repair);
00119
00121 bool Damage(int Damage);
00122
00124 CCollisionSystem* GetCollisionSystem() { return &m_CollisionSystem; }
00125
00127 float GetCollisionSystemWidth() { return m_CollisionSystem.GetWidth(); }
00128
00130 bool IsDead() { return (m_CurArmor <= 0); }
00131
00133 bool CanBeRemoved() const
00134 {
00135 return (m_DeadEmiter.IsActivate() == false && m_DeadEmiter.GetParticleCount() == 0);
00136 }
00137
00139 int GetProjectilCount() const;
00140
00142 float GetProjectilXPosition(int Projectil) const;
00143
00145 float GetProjectilYPosition(int Projectil) const;
00146
00148 int GetProjectilDamage(int Projectil) const;
00149
00151 float GetProjectilWidth(int Projectil) const;
00152
00154 int GetProjectileTarget(int YDistance) const;
00155
00157 int GetWeaponCount() const { return m_Weapons.size(); }
00158
00160 int GetWeaponDamage(std::size_t Weapon) const ;
00161
00163 std::string GetWeaponName(std::size_t Weapon) const;
00164
00166 int GetWeaponTypeCount() const;
00167
00169 std::string GetCurWeaponNameOfType(std::size_t GroupID) const;
00170
00172 const CWeapon* GetCurWeaponOfType(std::size_t GroupID) const;
00173
00174
00176 void ClearProjectils()
00177 {
00178 for(std::size_t CurWeapon = 0; CurWeapon < m_Weapons.size(); CurWeapon++)
00179 {
00180 m_Weapons[CurWeapon]->ClearProjectils();
00181 }
00182 }
00183
00184
00186 void SetInvulnerable(bool Invulnerable) { m_Invulnerable = Invulnerable; }
00187
00189 bool IsInvulnerable() const { return m_Invulnerable; }
00190
00191
00193 void SetAlpha(float Alpha) { m_Sprite.SetColor(sf::Color(255,255,255,Alpha * 255)); }
00194
00195
00197 void SetAniDelay(int AniDelay) { m_AniDelay = AniDelay; }
00198
00200 int GetAniDelay() const { return m_AniDelay; }
00201
00202
00204 int GetDeadTime() const { return m_DeadTime; }
00205 private:
00206
00207 void CleanUp();
00208
00209
00210 void ReadWeapon(FILE* ShipFile, CWeapon* Weapon);
00211
00212 sf::Sprite m_Sprite;
00213 int m_CurArmor;
00214 int m_Armor;
00215 float m_Speed;
00216
00217 int m_LastAniUpdate;
00218 int m_AniDelay;
00219
00220 std::string m_DeadSoundFile;
00221
00222
00223 sf::Sound m_DeadSound;
00224
00225 float m_EngineX;
00226 float m_EngineY;
00227 CEmiter m_EngineEmiter;
00228
00229 CEmiter m_DeadEmiter;
00230 int m_DeadEmiterTime;
00231 int m_DeadTime;
00232
00233 std::vector<CWeapon*> m_Weapons;
00234
00235 bool m_Invulnerable;
00236
00237 CCollisionSystem m_CollisionSystem;
00238
00239 log4cxx::LoggerPtr log_;
00240 unsigned int frame_count;
00241 };
00242
00243 #endif