1
/************************************************************************************
3
AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
4
Copyright © 2006-2012 Michael Kurinnoy, Viewizard
7
AstroMenace is free software: you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation, either version 3 of the License, or
10
(at your option) any later version.
12
AstroMenace is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
21
Web Site: http://www.viewizard.com/
22
Project: http://sourceforge.net/projects/openastromenace/
23
E-mail: viewizard@viewizard.com
25
*************************************************************************************/
32
#include "../Object3D.h"
33
#include "../Projectile/Projectile.h"
37
//-----------------------------------------------------------------------------
39
//-----------------------------------------------------------------------------
40
class CWeapon : public CObject3D
48
// Обновление данных объектa
49
virtual bool Update(float Time);
51
virtual bool WeaponFire(float Time);
52
// Установка углов поворота
53
virtual void SetRotation(VECTOR3D NewRotation);
54
// Установка положения
55
virtual void SetLocation(VECTOR3D NewLocation);
56
// Создание нужного объекта
57
virtual void Create(int WeaponNum);
60
// уровень оружия, по мощьности
65
// начальное значение боекомплекта
68
// скорострельность, в мили секундах - время между выстрелами
70
// время последнего выстрела
73
// потребление энергии на выстрел
75
// текущее состояние энергии
76
float CurrentEnergyAccumulated;
81
// нужно вращать-поворачивать при наведении внешне ( не нужно для турелей и ракетных систем)
82
bool NeedRotateOnTargeting;
85
// собственно объект=снаряд
86
CProjectile *LaserMaser;
87
// номер проигрываемого звука, чтобы была возможность выключить при уничтожении
88
int LaserMaserSoundNum;
97
// для просчета положения точки стрельбы, считаем как кости
100
VECTOR3D WeaponBound;
102
// набор указателей на номера объектов, которыми нацеливаемся по горизонтале
103
int TargetHorizObject;
104
float TargetHorizObjectCurrentAngle;
105
float TargetHorizObjectNeedAngle;
106
// набор указателей на номера объектов, которыми нацеливаемся по вертикали
107
int TargetVertObject;
108
float TargetVertObjectMaxAngle;
109
float TargetVertObjectMinAngle;
110
float TargetVertObjectCurrentAngle;
111
float TargetVertObjectNeedAngle;
119
// выстрел - вылет частиц (засветка возле ствола)
120
eParticleSystem *Fire;
121
VECTOR3D FireLocation;
122
int SoundNum; // нужный номер
124
// если оружие уничтожено, делаем вырывающийся огонь
125
eParticleSystem *DestroyedFire;
126
eParticleSystem *DestroyedSmoke;
127
VECTOR3D DestroyedFireLocation;
141
//-----------------------------------------------------------------------------
142
// Дополнительные функции для CWeapon
143
//-----------------------------------------------------------------------------
145
// Установка нужных данных для вспышки возле ствола
146
void SetWeaponFire(eParticleSystem *ParticleSystem, int WeaponNum);
153
//-----------------------------------------------------------------------------
154
// Менеджер CWeapon, дополнительный
155
//-----------------------------------------------------------------------------
158
void AttachWeapon(CWeapon* Weapon);
159
// Исключаем из списка
160
void DetachWeapon(CWeapon* Weapon);
161
// Проверяем все объекты, обновляем данные
162
void UpdateAllWeapon(float Time);
163
// Прорисовываем все объекты
164
void DrawAllWeapon(bool VertexOnlyPass, unsigned int ShadowMap);
165
// Удаляем все объекты в списке
166
void ReleaseAllWeapon();